Difference between revisions of "Sony PS3 BD Remote"

From MythTV Official Wiki
Jump to: navigation, search
m (uinput kernel module method: tone things down a bit...)
(Linux installation process: Added link to forum post about kernel upgrade problem.)
 
(10 intermediate revisions by 4 users not shown)
Line 2: Line 2:
  
 
[[Image:Ps3-bd-remote.png|thumb|right|450px|An angled view of the Sony PS3 Bluetooth remote control.]]
 
[[Image:Ps3-bd-remote.png|thumb|right|450px|An angled view of the Sony PS3 Bluetooth remote control.]]
Sony uses Bluetooth for wireless controllers including the BD Remote (Blueray Disc).  The makes for a decent remote option
+
Sony uses Bluetooth for wireless controllers including the BD Remote (Blue-ray Disc remote control).  This makes for a decent remote option.
  
Here are the advantages
+
Here are the advantages:
 
* Inexpensive (< $25 USD)
 
* Inexpensive (< $25 USD)
 
* Reasonable layout (51 buttons with separate arrows/seeking controls)
 
* Reasonable layout (51 buttons with separate arrows/seeking controls)
* Radio Frequency operation (better range, non-line-of-sight)
+
* Radio Frequency operation (better range - 30 feet/10 metres or better, non-line-of-sight)
 
* Bluetooth pairing - multiple remotes don't interfere, no picking channels to use
 
* Bluetooth pairing - multiple remotes don't interfere, no picking channels to use
 +
* Good feel to the control
  
{{Note box|Some remotes (such as that pictured, have a "back" label on the 'cross'/X key, others have it on the "circle"/O}}
+
{{Note box|Some remotes (such as that pictured, have a "back" label on the 'cross'/X key, others have it on the "circle"/O. And there are newer PS3 remote controls which are significantly different - they are slightly longer, they can control multiple devices (PS3/AMP/TV) and they have a row of lights to show which device is being controlled.}}
  
  
= Linux =
+
=Sony PS3 Bluetooth remote controls=
[http://ps3mods.blogspot.com/2007/03/bd-remote-for-linux-update.html Cakemote] - Python script that reads key presses
+
There are two different Sony PS3 remote controls around, and they appear to require different processes to get them working.
 +
The older ones look like the picture above and take two AA batteries.
 +
The newer ones look like this one on Amazon.com: http://www.amazon.com/Media-Blu-ray-Remote-Control-Playstation-3/dp/B0050SX9I2/ - they are slightly longer, take two AAA batteries, and have a row of lights to show which device is being controlled (PS3/AMP/TV).
 +
 
 +
The PS3 Bluetooth remote control can be put into a 'pairable' state by pressing the START and ENTER buttons on it simultaneously for about five seconds; on the newer PS3 remote control the 'PS3' light will start flashing at this point. The newer PS3 remote controls appear to lose their pairing data if you change/remove their batteries, so it's necessary to re-run part of the pairing process after a battery change.
 +
 
 +
In case anyone is interested, the power consumption of the newer Sony PS3 remote controls is about 14 mA when there is a bluetooth connection in place, and 0.05 mA when in standby; the power consumption of the older Sony PS3 remote controls is about 14 mA when connected and 0.12 mA when in standby.
 +
 
 +
The software described below will disconnect after a configurable inactivity timeout expires (say 10 minutes) in order to preserve the remote control battery life. After the connection has been dropped, the first time a user presses a button on the remote control the connection needs to be re-established, which takes a second or so. After that the button presses act practically instantaneously.
 +
 
 +
=Linux installation process=
 +
<b>Note: these instructions were written in July 2015 and tested on Mythbuntu 12.04 and Mythbuntu 14.04</b>
 +
 
 +
1. Ensure that your bluetooth receiver (dongle or built in) is listed when you run <code>lsusb</code>. It should display something similar to this:
 +
 
 +
Bus 006 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
 +
 
 +
2. Install the bluetooth software as a service together with various other pre-requisites:
 +
 
 +
sudo apt-get update
 +
sudo apt-get install bluez libdbus-1-dev libglib2.0-dev python-dbus python-gobject
 +
 
 +
3. The bluetooth stack needs to patched to enable some additional functionality, namely:
 +
*disconnect the bluetooth connection after a configurable timeout period. (This is to preserve the battery life in the remote controllers and avoid the batteries going flat after just a few days.)
 +
*configurable mapping from PS3 remote control buttons to key presses (without requiring LIRC).
 +
 
 +
These patches were originally developed by Kitlaan (Ted M Lin) and Ruff and subsequently updated/repackaged by readers of this forum: http://forum.kodi.tv/showthread.php?tid=50717
 +
 
 +
Carry out the following commands:
 +
 
 +
sudo service bluetooth stop
 +
cd ~
 +
mkdir bluetoothwork
 +
cd bluetoothwork
 +
wget https://www.dropbox.com/s/zwerzydgfiw54zx/bluez-4.101_ps3remote.diff
 +
wget http://www.kernel.org/pub/linux/bluetooth/bluez-4.101.tar.gz
 +
tar xvfz bluez-4.101.tar.gz
 +
cd bluez-4.101
 +
patch -p1 < ../bluez-4.101_ps3remote.diff
 +
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var
 +
make
 +
sudo make install
 +
sudo reboot
 +
 
 +
4. Check that the bluetooth service is running - if you type:
 +
 
 +
service bluetooth status
 +
 
 +
it should display something similar to this:
 +
 
 +
bluetooth start/running, process 762
 +
 
 +
5. It's not essential, but when carrying out the following steps it can be useful to run the bluetooth daemon in foreground, as this gives a few more clues as to what is happening. Start another ssh session and type the following:
 +
 
 +
sudo service bluetooth stop
 +
sudo bluetoothd -n -d
 +
 
 +
6. Download a utility for helping perform the pairing:
 +
 
 +
cd ~/bluetoothwork
 +
wget https://www.dropbox.com/s/62p4ycth8ge0hnv/ps3pair.tar.gz
 +
tar xvfz ps3pair.tar.gz
 +
cd ps3pair
 +
 
 +
7. Pair the remote control with the system - type the following:
 +
 
 +
sudo python ps3_pair.py
 +
 
 +
Hold the START and ENTER buttons on the PS3 remote control for about five seconds. The result should be similar to the following:
 +
 
 +
user@myth3:~/bluetoothwork/ps3pair$ sudo python ps3_pair.py
 +
Please HOLD the START and ENTER buttons on the PS3 remote.
 +
Searching for devices, please wait...
 +
Found:
 +
1: 34:C7:31:04:25:1A [Unknown]
 +
Select the device you wish to add [1]:
 +
 
 +
Type the number corresponding to the PS3 remote control or hit return to take the default. The result should be similar to the following:
 +
 
 +
user@myth3:~/bluetoothwork/ps3pair$ sudo python ps3_pair.py
 +
Please HOLD the START and ENTER buttons on the PS3 remote.
 +
Searching for devices, please wait...
 +
Found:
 +
1: 34:C7:31:04:25:1A [Unknown]
 +
Select the device you wish to add [1]: 1
 +
  Registering device...  Done
 +
user@myth3:~/bluetoothwork/ps3pair$
 +
 
 +
(Among other things, this causes data about the paired device to be stored in a directory off <code>/var/lib/bluetooth</code>.)
 +
 
 +
The timing can be quite sensitive - so it may be necessary to re-run this operation or else try holding the START and ENTER buttons on the PS3 remote control ''before'' running <code>sudo python ps3_pair.py</code>.
 +
 
 +
8. Run the following command:
 +
 
 +
/usr/share/doc/bluez/examples/list-devices
 +
 
 +
This should show something similar to the following:
 +
 
 +
user@myth3:/var/lib/bluetooth$ /usr/share/doc/bluez/examples/list-devices
 +
[ /org/bluez/2335/hci0 ]
 +
    Name = myth3-0
 +
    Powered = 1
 +
    Devices = dev_34_C7_31_04_25_1A
 +
    DiscoverableTimeout = 0
 +
    PairableTimeout = 0
 +
    Discoverable = 0
 +
    Address = 00:15:83:15:A3:10
 +
    Discovering = 0
 +
    Pairable = 1
 +
    Class = 0
 +
    UUIDs = 0x1000 0x1001 0x1112 0x111f 0x110c 0x110e
 +
    [ /org/bluez/2335/hci0/dev_34_C7_31_04_25_1A ]
 +
        Product = 0x0306
 +
        Vendor = 0x054c
 +
        Name = BD Remote Control
 +
        Paired = 0
 +
        Adapter = /org/bluez/2335/hci0
 +
        Alias = BD Remote Control
 +
        Version = 0x0110
 +
        Connected = 0
 +
        UUIDs = 0x1124 0x1200
 +
        Address = 34:C7:31:04:25:1A
 +
        Services = dbus.Array([], signature=dbus.Signature('o'), variant_level=1)
 +
        Class = 0x00250c
 +
        Trusted = 1
 +
        Blocked = 0
 +
   
 +
user@myth3:/var/lib/bluetooth$
 +
 
 +
In this example:<br>
 +
<code>00:15:83:15:A3:10</code> is the MAC address of the bluetooth receiver<br>
 +
<code>34:C7:31:04:25:1A</code> is the MAC address of the PS3 remote control
 +
 
 +
It should show <code>Trusted = 1</code> -- if it does not then re-run the <code>sudo python ps3_pair.py</code> command.
 +
 
 +
If the output from running /usr/share/doc/bluez/examples/list-devices shows <code>Connected = 1</code> then it is not necessary to run the next <code>bluez-test-input connect</code> step.
 +
 
 +
9. This step usually needs to be run to connect the newer PS3 remote controls, and sometimes needs to be run on the older PS3 remote controls.
 +
 
 +
Hold the START and ENTER buttons on the PS3 remote control for about five seconds, then type the following:
 +
 
 +
sudo bluez-test-input connect <device MAC address>
 +
 
 +
where '<device MAC address>' is the device MAC address shown when running the ps3_pair.py command - for example:
 +
 
 +
sudo bluez-test-input connect 34:C7:31:04:25:1A
 +
 
 +
If the command completes without displaying any messages then it has completed successfully.
 +
 
 +
If when running the command you get the message <code>org.bluez.Error.DoesNotExist: Does Not Exist</code> then it means that the device MAC address is not correct.
 +
 
 +
10. At this point the system should be receiving key presses from the remote control. If you are running bluetoothd in foreground you should see messages like the following when you press buttons on it:
 +
 
 +
bluetoothd[2335]: input/fakehid.c:ps3remote_event() Got key: 108 [1]
 +
bluetoothd[2335]: input/fakehid.c:ps3remote_event() Got key: 108 [0]
 +
 
 +
The system should be responding to the button presses, and if you run /usr/share/doc/bluez/examples/list-devices it should show 'Connected = 1'.
 +
 
 +
This forum post may be useful https://forum.mythtv.org/viewtopic.php?f=2&t=3230 if problems are found after upgrading the kernel.
 +
 
 +
<b>11. If at a later point you change/remove the batteries from the newer PS3 remote controls then it will be necessary to re-run the <code>sudo bluez-test-input connect 34:C7:31:04:25:1A</code> step.</b>
 +
 
 +
12. Run the following commands:
 +
sudo mv /etc/bluetooth/input.conf /etc/bluetooth/input.conf.old
 +
sudo cp ~/bluetoothwork/bluez-4.101/input/input.conf /etc/bluetooth/input.conf
 +
 
 +
This will update the comment about the <code>IdleTimeout</code> parameter (which is specified in seconds) and it will set up the XBMC/Kodi key map.
 +
 
 +
13. Edit <code>/etc/bluetooth/input.conf</code> and introduce a line in the <code>[General]</code> stanza similar to the following:
 +
 
 +
IdleTimeout=600
 +
 
 +
This species the idle timeout (in seconds) before the connection will be disconnected. ('IdleTimeout=600' means 600 seconds, i.e. 10 minutes.) (The IdleTimeout setting is commented out by default.)
 +
 
 +
14. Edit <code>/etc/bluetooth/input.conf</code> and copy into the <code>[PS3 Remote Map]</code> stanza the contents from below (in place of the XBMC/Kodi key map) and tailor it as you like. The newer PS3 remote controls have two extra buttons (INSTANT back and INSTANT forward) whose codes are not listed in the default <code>input.conf</code> - their values are 0x76 and 0x75 respectively.
 +
 
 +
15. Restart the bluetooth service in order to make the updates to <code>/etc/bluetooth/input.conf</code> take effect. (Run <code>sudo service bluetooth restart</code> or if running bluetoothd in foreground type <code>Ctrl-C</code> and then <code>sudo bluetoothd -n -d</code>.)
 +
 
 +
16. The bluetooth stack is smart enough to terminate the bluetooth connection if the bluetooth service is stopped cleanly when the box is shut down. The connection is terminated if you issue <code>sudo kill <bluetooth process ID></code> but if you issue <code>sudo kill '''-9''' <bluetooth process ID></code> the connection is left open. (In fact the only way I could make the connection work again after issuing a <code>kill -9</code> was by taking the batteries out of the PS3 remote control for a few seconds.) So it's worth ensuring that the bluetooth daemon is always shut down cleanly. (If there is a power failure while the bluetooth connection is operating, it's likely that the bluetooth connection will not have been terminated, so it would be worth removing the batteries from the PS3 remote control for a few seconds to prevent them from going flat.)
 +
 
 +
17. If you are using one of the newer PS3 remote controls, you have the option of using its infra-red capability for controlling the TV directly - here are a couple of links on the subject:
 +
 
 +
http://slickdeals.net/f/3794932ps3remotecontrolprogramming?page=2 <br>
 +
https://www.playstation.com/manual/pdf/CECH-ZRC1U.pdf
 +
 
 +
Crucially you need to do the following:
 +
* Press the white TV button and the '/CLEAR' Clear button at the same time - the TV button will start flashing
 +
* Enter the three digit code (see the references above for this code) while the TV button is still flashing
 +
* Press the ENTER button - the TV button should light up if you've entered the code properly
 +
 
 +
==Alternative mapping for Play button (and for other control-key combinations)==
 +
 
 +
The approach described so far will map the Play button on the remote control to the Pause/Play action in the MythTV player - this toggles between Pause and Play, and if it's used from Fast Forward or Rewind it puts the player into ''Pause'' mode (rather than ''Play'' mode). If that's what you want, then you need do no more. There is an alternative action, 'Play', which does not toggle: it puts the player into Play state when used from Fast Forward or Rewind, and it's invoked by typing Ctrl+P on the keyboard. As this patched bluetooth stack does not support mapping to control key combinations a different approach needs to be adopted. (This approach can also be used to launch actions whose default triggers are control characters like, say, Toggle Aspect which is invoked by keying Ctrl+W.)
  
[http://antst.mine.nu/linuxdriverforsonybdremote bdremote] - Daemon that directs bdremote data to LIRC (a cakemote successor)
+
So in order to invoke the Play (Ctrl+P) function when pressing the Play button on the remote control, do the following:
  
[http://arcsine.org/myth-btremote-0.3.tar.gz myth-btremote] - Daemon that supports the bd remote with mythtv's network remote infrastructure
+
1. Choose a key which is not already bound to an action. It is possible to use keys in the range F13-F23 (but for some reason it's not possible to use F24). We'll use F13 here.
  
[http://www.mythtv.org/wiki/PS3_Remote cakemote-mythtv.py] - Cakemote script tweak for myth .22 keybindings and multikey press functions removed.
+
2. Edit <code>/etc/bluetooth/input.conf</code> to contain the following:
  
[http://kitlaan.twinaxis.com/holdingcell/ps3pair.tar.gz ps3_pair.py and ps3_unpair.py] - Python script to pair and unpair your BD Remote (requires dbus-python and pygobject python modules)
+
0x32 = KEY_F13            # PLAY = Play (key needs to be bound to action using Setup -> Edit Keys)
  
== uinput kernel module method ==
+
3. Restart the bluetooth service in order to make the updates to <code>/etc/bluetooth/input.conf</code> take effect. (Run <code>sudo service bluetooth restart</code> or if running bluetoothd in foreground type <code>Ctrl-C</code> and then <code>sudo bluetoothd -n -d</code>.)
  
[http://www.xbmc.org/forum/showthread.php?t=50717 xbmc_forum_ps3_remote] - Great instructions for getting this going addresses battery issues (page 3)
+
4. In mythfrontend go to <b>Setup</b> -> <b>Edit Keys</b> -> <b>TV Playback</b> -> <b>PLAY</b>
  
Additional information. [http://kimattree.blogspot.co.uk/2010/09/xbmc-remote-control-part-deux_6369.html]
+
5. By default the only key listed against PLAY will be <b>Ctrl+P</b>.
  
Additional patches. [http://kitlaan.twinaxis.com/projects/bluez-ps3remote/]
+
6. Move the cursor to one of the empty key buttons and press <b>Enter</b>. A message will be displayed saying <b>Press A Key - Waiting for key press</b>.
  
[http://wiki.xbmc.org/?title=HOW-TO_Setup_PS3_BD_Remote HOW-TO_Setup_PS3_BD_Remote] - A wiki based on the above xbmc.org forum thread. <b>I strongly recommend that you use this method.</b> The only XBMC specific stuff in these instructions is the sample input.conf.  You will need to customize this for mythtv.  Other than that, it is easier and more up to date than the instructions in the rest of this wiki entry.
+
7. Press the <b>Play</b> button on the remote control. A message will be displayed saying <b>Add key 'Tools'?</b>. Click <b>OK</b>. (For some reason the keys F13-F23 are picked up by mythfrontend as <b>Tools</b>, <b>Launch (7)</b>, and other strange key names.)
  
The XBMC method uses an input.conf to map remote buttons to keyboard button presses. A suggested input.conf follows - remember to read the mappings and to change the MAC address
+
8. Press <b>Escape</b>. A message will be displayed saying <b>Save changes?</b>. Click <b>OK</b>.
  
 +
9. After this, pressing the <b>Play</b> button on the remote control should trigger the ''Play'' (rather than the ''Pause/Play'') action in the MythTV player.
  
 +
==Sugested input.conf file==
 +
This method uses a configuration file (<code>/etc/bluetooth/input.conf</code>) to map remote buttons to keyboard button presses. A suggested configuration file is as follows, and can be tailored as required:
  
 
  # input.conf - kitlaan custom
 
  # input.conf - kitlaan custom
Line 47: Line 243:
 
  # Set idle timeout (in seconds) before the connection will
 
  # Set idle timeout (in seconds) before the connection will
 
  # be disconnect (defaults to 0 for no timeout)
 
  # be disconnect (defaults to 0 for no timeout)
  #IdleTimeout=15
+
  IdleTimeout=600
 
  #
 
  #
 
  #
 
  #
Line 58: Line 254:
 
  #
 
  #
 
  # Set a custom idle timeout (in seconds) for this device
 
  # Set a custom idle timeout (in seconds) for this device
  IdleTimeout=15   
+
  #IdleTimeout=15   
 
  #
 
  #
 
  # This section is the PS3 Remote keymap.  It is loaded when bluez starts.
 
  # This section is the PS3 Remote keymap.  It is loaded when bluez starts.
Line 75: Line 271:
 
  0x63 = KEY_T              # SUBTITLE = toggle subtitles
 
  0x63 = KEY_T              # SUBTITLE = toggle subtitles
 
  0x0f = KEY_DELETE        # CLEAR = delete key
 
  0x0f = KEY_DELETE        # CLEAR = delete key
  0x28 = KEY_F8            # TIMER = toggle through sleep
+
  0x28 = KEY_F8            # /TIME = toggle through sleep
 
  0x00 = KEY_1              # NUM-1
 
  0x00 = KEY_1              # NUM-1
 
  0x01 = KEY_2              # NUM-2
 
  0x01 = KEY_2              # NUM-2
Line 91: Line 287:
 
  0x83 = KEY_F5            # YELLOW = yellow
 
  0x83 = KEY_F5            # YELLOW = yellow
 
  0x70 = KEY_I              # DISPLAY = show information
 
  0x70 = KEY_I              # DISPLAY = show information
  0x1a = KEY_S              # TOP MENU = show guide  
+
  0x1a = KEY_S              # TOP MENU = show guide
  0x40 = KEY_M              # POP UP/MENU = menu  
+
  0x40 = KEY_M              # POP UP/MENU = menu
 
  0x0e = KEY_ESC            # RETURN = back/escape/cancel
 
  0x0e = KEY_ESC            # RETURN = back/escape/cancel
 
  0x5c = KEY_R              # TRIANGLE/OPTIONS = cycle through recording options
 
  0x5c = KEY_R              # TRIANGLE/OPTIONS = cycle through recording options
 
  0x5d = KEY_ESC            # CIRCLE/BACK = back/escape/cancel
 
  0x5d = KEY_ESC            # CIRCLE/BACK = back/escape/cancel
  0x5f = KEY_A              # SQUARE/VIEW = Adjust Playback timestretch  
+
  0x5f = KEY_A              # SQUARE/VIEW = Adjust Playback timestretch
 
  0x5e = KEY_ENTER          # CROSS = select
 
  0x5e = KEY_ENTER          # CROSS = select
 
  0x54 = KEY_UP            # UP = Up/Skip forward 10 minutes
 
  0x54 = KEY_UP            # UP = Up/Skip forward 10 minutes
Line 104: Line 300:
 
  0x0b = KEY_ENTER          # ENTER = select
 
  0x0b = KEY_ENTER          # ENTER = select
 
  0x5a = KEY_F10            # L1 = volume down
 
  0x5a = KEY_F10            # L1 = volume down
  # 0x58 = KEY_F2            # L2
+
  0x58 = KEY_J              # L2 = decrease the play speed
  # 0x51 = KEY_F3            # L3
+
  0x51 = KEY_HOME          # L3 = commercial skip previous
 
  0x5b = KEY_F11            # R1 = volume up
 
  0x5b = KEY_F11            # R1 = volume up
  0x59 = KEY_PAGEUP        # R2 = move up one page in watch recordings/EPG
+
  0x59 = KEY_U              # R2 = increase the play speed
  0x52 = KEY_PAGEDOWN      # R3 = move down one page in watch recordings/EPG
+
  0x52 = KEY_END            # R3 = commercial skip next
 
  0x43 = KEY_F9            # PS button = mute
 
  0x43 = KEY_F9            # PS button = mute
 
  0x50 = KEY_M              # SELECT = menu (as per PS convention)
 
  0x50 = KEY_M              # SELECT = menu (as per PS convention)
  0x53 = KEY_ENTER          # START = select / Enter (matches terminology in mythwelcome)  
+
  0x53 = KEY_ENTER          # START = select / Enter (matches terminology in mythwelcome)
  0x33 = KEY_COMMA          # SCAN BACK =  decrease scan forward speed / play backwards; playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
+
0x30 = KEY_PAGEUP        # PREV = jump back (default 10 minutes)
 +
0x76 = KEY_J              # INSTANT BACK (newer RCs only) = decrease the play speed
 +
0x75 = KEY_U              # INSTANT FORWARD (newer RCs only) = increase the play speed
 +
0x31 = KEY_PAGEDOWN      # NEXT = jump forward (default 10 minutes)
 +
  0x33 = KEY_COMMA          # SCAN BACK =  decrease scan forward speed / play
 
  0x32 = KEY_P              # PLAY = play/pause
 
  0x32 = KEY_P              # PLAY = play/pause
 
  0x34 = KEY_DOT            # SCAN FORWARD decrease scan backard speed / increase playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
 
  0x34 = KEY_DOT            # SCAN FORWARD decrease scan backard speed / increase playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
  0x30 = KEY_HOME           # PREVIOUS = commercial skip previous
+
  0x60 = KEY_LEFT           # FRAMEBACK = Left/Skip back 5 seconds/rewind one frame
0x38 = KEY_ESC            # STOP = back/escape/cancel
+
  0x39 = KEY_P              # PAUSE = play/pause
  0x31 = KEY_END            # NEXT = commercial skip next
+
  0x38 = KEY_P             # STOP = play/pause
# 0x60 = KEY_COMMA          # SLOW/STEP BACK = jump back (default 10 minutes)
+
  0x61 = KEY_RIGHT          # FRAMEFORWARD = Right/Skip forward 30 seconds/advance one frame
  0x39 = KEY_P           # PAUSE = play/pause
 
  # 0x61 = KEY_DOT            # SLOW/STEP FORWARD = jump forward (default 10 minutes)
 
 
  0xff = KEY_MAX
 
  0xff = KEY_MAX
  
A reboot is required to load the uinput kernel modules.
+
=Other Linux resources (may be out of date)=
 +
<b>(It is not known whether these still work or are still available.)</b>
 +
 
 +
[http://ps3mods.blogspot.com/2007/03/bd-remote-for-linux-update.html Cakemote] - Python script that reads key presses
 +
 
 +
[http://antst.mine.nu/linuxdriverforsonybdremote bdremote] - Daemon that directs bdremote data to LIRC (a cakemote successor)
 +
 
 +
[http://arcsine.org/myth-btremote-0.3.tar.gz myth-btremote] - Daemon that supports the bd remote with mythtv's network remote infrastructure
 +
 
 +
[http://www.mythtv.org/wiki/PS3_Remote cakemote-mythtv.py] - Cakemote script tweak for myth .22 keybindings and multikey press functions removed.
 +
 
 +
[http://kitlaan.twinaxis.com/holdingcell/ps3pair.tar.gz ps3_pair.py and ps3_unpair.py] - Python script to pair and unpair your BD Remote (requires dbus-python and pygobject python modules)
 +
 
 +
== uinput kernel module method ==
 +
 
 +
[http://forum.xbmc.org/showthread.php?tid=50717 xbmc_forum_ps3_remote] - Great instructions for getting this going addresses battery issues (page 3)
 +
 
 +
Additional information. [http://kimattree.blogspot.co.uk/2010/09/xbmc-remote-control-part-deux_6369.html]
 +
 
 +
Additional patches. [http://kitlaan.twinaxis.com/projects/bluez-ps3remote/]
 +
 
 +
[http://wiki.xbmc.org/?title=HOW-TO_Setup_PS3_BD_Remote HOW-TO_Setup_PS3_BD_Remote] - A wiki based on the above xbmc.org forum thread. The only XBMC specific stuff in these instructions is the sample input.conf.  You will need to customize this for mythtv.
  
 
== The Sony PS3 Remote Package ==
 
== The Sony PS3 Remote Package ==

Latest revision as of 20:07, 1 July 2019

Merge-arrows.gif
It has been suggested that this article or section be merged with PS3_Remote. (Discuss)
An angled view of the Sony PS3 Bluetooth remote control.

Sony uses Bluetooth for wireless controllers including the BD Remote (Blue-ray Disc remote control). This makes for a decent remote option.

Here are the advantages:

  • Inexpensive (< $25 USD)
  • Reasonable layout (51 buttons with separate arrows/seeking controls)
  • Radio Frequency operation (better range - 30 feet/10 metres or better, non-line-of-sight)
  • Bluetooth pairing - multiple remotes don't interfere, no picking channels to use
  • Good feel to the control


Important.png Note: Some remotes (such as that pictured, have a "back" label on the 'cross'/X key, others have it on the "circle"/O. And there are newer PS3 remote controls which are significantly different - they are slightly longer, they can control multiple devices (PS3/AMP/TV) and they have a row of lights to show which device is being controlled.


Sony PS3 Bluetooth remote controls

There are two different Sony PS3 remote controls around, and they appear to require different processes to get them working. The older ones look like the picture above and take two AA batteries. The newer ones look like this one on Amazon.com: http://www.amazon.com/Media-Blu-ray-Remote-Control-Playstation-3/dp/B0050SX9I2/ - they are slightly longer, take two AAA batteries, and have a row of lights to show which device is being controlled (PS3/AMP/TV).

The PS3 Bluetooth remote control can be put into a 'pairable' state by pressing the START and ENTER buttons on it simultaneously for about five seconds; on the newer PS3 remote control the 'PS3' light will start flashing at this point. The newer PS3 remote controls appear to lose their pairing data if you change/remove their batteries, so it's necessary to re-run part of the pairing process after a battery change.

In case anyone is interested, the power consumption of the newer Sony PS3 remote controls is about 14 mA when there is a bluetooth connection in place, and 0.05 mA when in standby; the power consumption of the older Sony PS3 remote controls is about 14 mA when connected and 0.12 mA when in standby.

The software described below will disconnect after a configurable inactivity timeout expires (say 10 minutes) in order to preserve the remote control battery life. After the connection has been dropped, the first time a user presses a button on the remote control the connection needs to be re-established, which takes a second or so. After that the button presses act practically instantaneously.

Linux installation process

Note: these instructions were written in July 2015 and tested on Mythbuntu 12.04 and Mythbuntu 14.04

1. Ensure that your bluetooth receiver (dongle or built in) is listed when you run lsusb. It should display something similar to this:

Bus 006 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

2. Install the bluetooth software as a service together with various other pre-requisites:

sudo apt-get update
sudo apt-get install bluez libdbus-1-dev libglib2.0-dev python-dbus python-gobject

3. The bluetooth stack needs to patched to enable some additional functionality, namely:

  • disconnect the bluetooth connection after a configurable timeout period. (This is to preserve the battery life in the remote controllers and avoid the batteries going flat after just a few days.)
  • configurable mapping from PS3 remote control buttons to key presses (without requiring LIRC).

These patches were originally developed by Kitlaan (Ted M Lin) and Ruff and subsequently updated/repackaged by readers of this forum: http://forum.kodi.tv/showthread.php?tid=50717

Carry out the following commands:

sudo service bluetooth stop
cd ~
mkdir bluetoothwork
cd bluetoothwork
wget https://www.dropbox.com/s/zwerzydgfiw54zx/bluez-4.101_ps3remote.diff
wget http://www.kernel.org/pub/linux/bluetooth/bluez-4.101.tar.gz
tar xvfz bluez-4.101.tar.gz
cd bluez-4.101
patch -p1 < ../bluez-4.101_ps3remote.diff
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var
make
sudo make install
sudo reboot

4. Check that the bluetooth service is running - if you type:

service bluetooth status

it should display something similar to this:

bluetooth start/running, process 762

5. It's not essential, but when carrying out the following steps it can be useful to run the bluetooth daemon in foreground, as this gives a few more clues as to what is happening. Start another ssh session and type the following:

sudo service bluetooth stop
sudo bluetoothd -n -d

6. Download a utility for helping perform the pairing:

cd ~/bluetoothwork
wget https://www.dropbox.com/s/62p4ycth8ge0hnv/ps3pair.tar.gz
tar xvfz ps3pair.tar.gz
cd ps3pair

7. Pair the remote control with the system - type the following:

sudo python ps3_pair.py

Hold the START and ENTER buttons on the PS3 remote control for about five seconds. The result should be similar to the following:

user@myth3:~/bluetoothwork/ps3pair$ sudo python ps3_pair.py
Please HOLD the START and ENTER buttons on the PS3 remote.
Searching for devices, please wait...
Found:
1: 34:C7:31:04:25:1A [Unknown]
Select the device you wish to add [1]: 

Type the number corresponding to the PS3 remote control or hit return to take the default. The result should be similar to the following:

user@myth3:~/bluetoothwork/ps3pair$ sudo python ps3_pair.py
Please HOLD the START and ENTER buttons on the PS3 remote.
Searching for devices, please wait...
Found:
1: 34:C7:31:04:25:1A [Unknown]
Select the device you wish to add [1]: 1
 Registering device...  Done
user@myth3:~/bluetoothwork/ps3pair$

(Among other things, this causes data about the paired device to be stored in a directory off /var/lib/bluetooth.)

The timing can be quite sensitive - so it may be necessary to re-run this operation or else try holding the START and ENTER buttons on the PS3 remote control before running sudo python ps3_pair.py.

8. Run the following command:

/usr/share/doc/bluez/examples/list-devices

This should show something similar to the following:

user@myth3:/var/lib/bluetooth$ /usr/share/doc/bluez/examples/list-devices
[ /org/bluez/2335/hci0 ]
    Name = myth3-0
    Powered = 1
    Devices = dev_34_C7_31_04_25_1A
    DiscoverableTimeout = 0
    PairableTimeout = 0
    Discoverable = 0
    Address = 00:15:83:15:A3:10
    Discovering = 0
    Pairable = 1
    Class = 0
    UUIDs = 0x1000 0x1001 0x1112 0x111f 0x110c 0x110e
    [ /org/bluez/2335/hci0/dev_34_C7_31_04_25_1A ]
        Product = 0x0306
        Vendor = 0x054c
        Name = BD Remote Control
        Paired = 0
        Adapter = /org/bluez/2335/hci0
        Alias = BD Remote Control
        Version = 0x0110
        Connected = 0
        UUIDs = 0x1124 0x1200
        Address = 34:C7:31:04:25:1A
        Services = dbus.Array([], signature=dbus.Signature('o'), variant_level=1)
        Class = 0x00250c
        Trusted = 1
        Blocked = 0
   
user@myth3:/var/lib/bluetooth$

In this example:
00:15:83:15:A3:10 is the MAC address of the bluetooth receiver
34:C7:31:04:25:1A is the MAC address of the PS3 remote control

It should show Trusted = 1 -- if it does not then re-run the sudo python ps3_pair.py command.

If the output from running /usr/share/doc/bluez/examples/list-devices shows Connected = 1 then it is not necessary to run the next bluez-test-input connect step.

9. This step usually needs to be run to connect the newer PS3 remote controls, and sometimes needs to be run on the older PS3 remote controls.

Hold the START and ENTER buttons on the PS3 remote control for about five seconds, then type the following:

sudo bluez-test-input connect <device MAC address>

where '<device MAC address>' is the device MAC address shown when running the ps3_pair.py command - for example:

sudo bluez-test-input connect 34:C7:31:04:25:1A

If the command completes without displaying any messages then it has completed successfully.

If when running the command you get the message org.bluez.Error.DoesNotExist: Does Not Exist then it means that the device MAC address is not correct.

10. At this point the system should be receiving key presses from the remote control. If you are running bluetoothd in foreground you should see messages like the following when you press buttons on it:

bluetoothd[2335]: input/fakehid.c:ps3remote_event() Got key: 108 [1]
bluetoothd[2335]: input/fakehid.c:ps3remote_event() Got key: 108 [0]

The system should be responding to the button presses, and if you run /usr/share/doc/bluez/examples/list-devices it should show 'Connected = 1'.

This forum post may be useful https://forum.mythtv.org/viewtopic.php?f=2&t=3230 if problems are found after upgrading the kernel.

11. If at a later point you change/remove the batteries from the newer PS3 remote controls then it will be necessary to re-run the sudo bluez-test-input connect 34:C7:31:04:25:1A step.

12. Run the following commands:

sudo mv /etc/bluetooth/input.conf /etc/bluetooth/input.conf.old
sudo cp ~/bluetoothwork/bluez-4.101/input/input.conf /etc/bluetooth/input.conf

This will update the comment about the IdleTimeout parameter (which is specified in seconds) and it will set up the XBMC/Kodi key map.

13. Edit /etc/bluetooth/input.conf and introduce a line in the [General] stanza similar to the following:

IdleTimeout=600

This species the idle timeout (in seconds) before the connection will be disconnected. ('IdleTimeout=600' means 600 seconds, i.e. 10 minutes.) (The IdleTimeout setting is commented out by default.)

14. Edit /etc/bluetooth/input.conf and copy into the [PS3 Remote Map] stanza the contents from below (in place of the XBMC/Kodi key map) and tailor it as you like. The newer PS3 remote controls have two extra buttons (INSTANT back and INSTANT forward) whose codes are not listed in the default input.conf - their values are 0x76 and 0x75 respectively.

15. Restart the bluetooth service in order to make the updates to /etc/bluetooth/input.conf take effect. (Run sudo service bluetooth restart or if running bluetoothd in foreground type Ctrl-C and then sudo bluetoothd -n -d.)

16. The bluetooth stack is smart enough to terminate the bluetooth connection if the bluetooth service is stopped cleanly when the box is shut down. The connection is terminated if you issue sudo kill <bluetooth process ID> but if you issue sudo kill -9 <bluetooth process ID> the connection is left open. (In fact the only way I could make the connection work again after issuing a kill -9 was by taking the batteries out of the PS3 remote control for a few seconds.) So it's worth ensuring that the bluetooth daemon is always shut down cleanly. (If there is a power failure while the bluetooth connection is operating, it's likely that the bluetooth connection will not have been terminated, so it would be worth removing the batteries from the PS3 remote control for a few seconds to prevent them from going flat.)

17. If you are using one of the newer PS3 remote controls, you have the option of using its infra-red capability for controlling the TV directly - here are a couple of links on the subject:

http://slickdeals.net/f/3794932ps3remotecontrolprogramming?page=2
https://www.playstation.com/manual/pdf/CECH-ZRC1U.pdf

Crucially you need to do the following:

  • Press the white TV button and the '/CLEAR' Clear button at the same time - the TV button will start flashing
  • Enter the three digit code (see the references above for this code) while the TV button is still flashing
  • Press the ENTER button - the TV button should light up if you've entered the code properly

Alternative mapping for Play button (and for other control-key combinations)

The approach described so far will map the Play button on the remote control to the Pause/Play action in the MythTV player - this toggles between Pause and Play, and if it's used from Fast Forward or Rewind it puts the player into Pause mode (rather than Play mode). If that's what you want, then you need do no more. There is an alternative action, 'Play', which does not toggle: it puts the player into Play state when used from Fast Forward or Rewind, and it's invoked by typing Ctrl+P on the keyboard. As this patched bluetooth stack does not support mapping to control key combinations a different approach needs to be adopted. (This approach can also be used to launch actions whose default triggers are control characters like, say, Toggle Aspect which is invoked by keying Ctrl+W.)

So in order to invoke the Play (Ctrl+P) function when pressing the Play button on the remote control, do the following:

1. Choose a key which is not already bound to an action. It is possible to use keys in the range F13-F23 (but for some reason it's not possible to use F24). We'll use F13 here.

2. Edit /etc/bluetooth/input.conf to contain the following:

0x32 = KEY_F13            # PLAY = Play (key needs to be bound to action using Setup -> Edit Keys)

3. Restart the bluetooth service in order to make the updates to /etc/bluetooth/input.conf take effect. (Run sudo service bluetooth restart or if running bluetoothd in foreground type Ctrl-C and then sudo bluetoothd -n -d.)

4. In mythfrontend go to Setup -> Edit Keys -> TV Playback -> PLAY

5. By default the only key listed against PLAY will be Ctrl+P.

6. Move the cursor to one of the empty key buttons and press Enter. A message will be displayed saying Press A Key - Waiting for key press.

7. Press the Play button on the remote control. A message will be displayed saying Add key 'Tools'?. Click OK. (For some reason the keys F13-F23 are picked up by mythfrontend as Tools, Launch (7), and other strange key names.)

8. Press Escape. A message will be displayed saying Save changes?. Click OK.

9. After this, pressing the Play button on the remote control should trigger the Play (rather than the Pause/Play) action in the MythTV player.

Sugested input.conf file

This method uses a configuration file (/etc/bluetooth/input.conf) to map remote buttons to keyboard button presses. A suggested configuration file is as follows, and can be tailored as required:

# input.conf - kitlaan custom
# Configuration file for the input service
#
# This section contains options which are not specific to any
# particular interface
[General]
#
# Set idle timeout (in seconds) before the connection will
# be disconnect (defaults to 0 for no timeout)
IdleTimeout=600 
#
#
#
# This section contains options that are specific to a device
#
# change this MAC address to that of your paired device
# use "hcitool con" to list active bluetooth connections
[00:24:33:94:E5:4B]
#
# Set a custom idle timeout (in seconds) for this device
#IdleTimeout=15   
#
# This section is the PS3 Remote keymap.  It is loaded when bluez starts.
# Use 'uinput.h' from bluez sources or '/usr/include/linux/input.h' for
# a list of possible KEY_* values.
#
[PS3 Remote Map]
# When the 'OverlayBuiltin' option is TRUE (the default), the keymap uses
# the built-in keymap as a starting point.  When FALSE, an empty keymap is
# the starting point.
#OverlayBuiltin = TRUE
#buttoncode = keypress    # Button label = action with default key mappings
0x16 = KEY_ESC            # EJECT = exit
0x64 = KEY_MINUS          # AUDIO = cycle audio tracks
0x65 = KEY_W              # ANGLE = cycle zoom mode
0x63 = KEY_T              # SUBTITLE = toggle subtitles
0x0f = KEY_DELETE         # CLEAR = delete key
0x28 = KEY_F8             # /TIME = toggle through sleep
0x00 = KEY_1              # NUM-1
0x01 = KEY_2              # NUM-2
0x02 = KEY_3              # NUM-3
0x03 = KEY_4              # NUM-4
0x04 = KEY_5              # NUM-5
0x05 = KEY_6              # NUM-6
0x06 = KEY_7              # NUM-7
0x07 = KEY_8              # NUM-8
0x08 = KEY_9              # NUM-9
0x09 = KEY_0              # NUM-0
0x81 = KEY_F2             # RED = red
0x82 = KEY_F3             # GREEN = green
0x80 = KEY_F4             # BLUE = blue
0x83 = KEY_F5             # YELLOW = yellow
0x70 = KEY_I              # DISPLAY = show information
0x1a = KEY_S              # TOP MENU = show guide
0x40 = KEY_M              # POP UP/MENU = menu
0x0e = KEY_ESC            # RETURN = back/escape/cancel
0x5c = KEY_R              # TRIANGLE/OPTIONS = cycle through recording options
0x5d = KEY_ESC            # CIRCLE/BACK = back/escape/cancel
0x5f = KEY_A              # SQUARE/VIEW = Adjust Playback timestretch
0x5e = KEY_ENTER          # CROSS = select
0x54 = KEY_UP             # UP = Up/Skip forward 10 minutes
0x56 = KEY_DOWN           # DOWN = Down/Skip back 10 minutes
0x57 = KEY_LEFT           # LEFT = Left/Skip back 5 seconds
0x55 = KEY_RIGHT          # RIGHT = Right/Skip forward 30 seconds
0x0b = KEY_ENTER          # ENTER = select
0x5a = KEY_F10            # L1 = volume down
0x58 = KEY_J              # L2 = decrease the play speed
0x51 = KEY_HOME           # L3 = commercial skip previous
0x5b = KEY_F11            # R1 = volume up
0x59 = KEY_U              # R2 = increase the play speed
0x52 = KEY_END            # R3 = commercial skip next
0x43 = KEY_F9             # PS button = mute
0x50 = KEY_M              # SELECT = menu (as per PS convention)
0x53 = KEY_ENTER          # START = select / Enter (matches terminology in mythwelcome)
0x30 = KEY_PAGEUP         # PREV = jump back (default 10 minutes)
0x76 = KEY_J              # INSTANT BACK (newer RCs only) = decrease the play speed
0x75 = KEY_U              # INSTANT FORWARD (newer RCs only) = increase the play speed
0x31 = KEY_PAGEDOWN       # NEXT = jump forward (default 10 minutes)
0x33 = KEY_COMMA          # SCAN BACK =  decrease scan forward speed / play
0x32 = KEY_P              # PLAY = play/pause
0x34 = KEY_DOT            # SCAN FORWARD decrease scan backard speed / increase playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
0x60 = KEY_LEFT           # FRAMEBACK = Left/Skip back 5 seconds/rewind one frame
0x39 = KEY_P              # PAUSE = play/pause
0x38 = KEY_P              # STOP = play/pause
0x61 = KEY_RIGHT          # FRAMEFORWARD = Right/Skip forward 30 seconds/advance one frame
0xff = KEY_MAX

Other Linux resources (may be out of date)

(It is not known whether these still work or are still available.)

Cakemote - Python script that reads key presses

bdremote - Daemon that directs bdremote data to LIRC (a cakemote successor)

myth-btremote - Daemon that supports the bd remote with mythtv's network remote infrastructure

cakemote-mythtv.py - Cakemote script tweak for myth .22 keybindings and multikey press functions removed.

ps3_pair.py and ps3_unpair.py - Python script to pair and unpair your BD Remote (requires dbus-python and pygobject python modules)

uinput kernel module method

xbmc_forum_ps3_remote - Great instructions for getting this going addresses battery issues (page 3)

Additional information. [1]

Additional patches. [2]

HOW-TO_Setup_PS3_BD_Remote - A wiki based on the above xbmc.org forum thread. The only XBMC specific stuff in these instructions is the sample input.conf. You will need to customize this for mythtv.

The Sony PS3 Remote Package

This is a package which you can download and install on your linux machine. It provides a daemon that will manage the connection with one or more PS3 Remotes and forwards your key presses to the LIRC daemon.

The package has the following features:

  • Graphical interface - for pairing and configuration
  • Combo buttons - you can for example get an up button, a left button along with a upleft button.
  • Regular buttons - repeats events while held and optionally generate key up and key down events.
  • Mode buttons - allows you to set for example the color buttons to activate different setup for the other keys.
  • Shift buttons - allows you to have one button modify the behavior of the other buttons
  • Sticky buttons - press once to activate and again to deactivate
  • IR Relays - if you have a IR transmitter for other equipment, you can connect the buttons on the remote to transmit those IR signals

This should be the preferred option if you want to control more than the MythTV frontend using the PS3 Remote (e.g. your sound system via IR, other LIRC compatible applications, mouse movements via ircmd etc.).

Installation

Download the tarball from Sourceforge and follow the instructions in the README File

https://sourceforge.net/projects/sonyps3remote/

Disadvantage

The package depends on a patched version of the BlueZ daemon. The package itself helps you to patch and compile the patched daemon, so it is not too complicated (just follow the instructions in the README). This is also the reason there is no binary distribution for the package, you have to compile the package yourself. Anyone familiar with the "./configure; make; make install" approach should not have any problems with this.

Configuration File

Here is a sample lircrc configuration file for MythTV to use as a starting point.


# Toggle subtitles
begin
       prog = mythtv
       button = subtitle
       repeat = 0
       delay = 0
       config = T
end

# Cycle through zoom and fill modes
begin
       prog = mythtv
       button = angle
       repeat = 0
       delay = 0
       config = W
end

# Bring up on screen menu
begin
       prog = mythtv
       button = triangle
       repeat = 0
       delay = 0
       config = I
end

# Go back
begin
       prog = mythtv
       button = circle
       repeat = 0
       delay = 0
       config = Esc
end

# Up
begin
       prog = mythtv
       button = up
       repeat = 1
       delay = 2
       config = Up
end

# Left
begin
       prog = mythtv
       button = left
       repeat = 1
       delay = 2
       config = Left
end

# Enter
begin
       prog = mythtv
       button = enter
       repeat = 0
       delay = 0
       config = Enter
end

# Right
begin
       prog = mythtv
       button = right
       repeat = 1
       delay = 2
       config = Right
end

# Down
begin
       prog = mythtv
       button = down
       repeat = 1
       delay = 2
       config = Down
end

# 1
begin
       prog = mythtv
       button = 1
       repeat = 0
       delay = 0
       config = 1
end

# 2
begin
       prog = mythtv
       button = 2
       repeat = 0
       delay = 0
       config = 2
end

# 3
begin
       prog = mythtv
       button = 3
       repeat = 0
       delay = 0
       config = 3
end

# 4
begin
       prog = mythtv
       button = 4
       repeat = 0
       delay = 0
       config = 4
end

# 5
begin
       prog = mythtv
       button = 5
       repeat = 0
       delay = 0
       config = 5
end

# 6
begin
       prog = mythtv
       button = 6
       repeat = 0
       delay = 0
       config = 6
end

# 7
begin
       prog = mythtv
       button = 7
       repeat = 0
       delay = 0
       config = 7
end

# 8
begin
       prog = mythtv
       button = 8
       repeat = 0
       delay = 0
       config = 8
end

# 9
begin
       prog = mythtv
       button = 9
       repeat = 0
       delay = 0
       config = 9
end

# 0
begin
       prog = mythtv
       button = 0
       repeat = 0
       delay = 0
       config = 0
end

# Enter/Exit Live TV Browse Mode / brings up menu to allow toggling settings such as Commercial Auto-Skip, Auto-Expire, etc.
begin
       prog = mythtv
       button = popup_menu
       repeat = 0
       delay = 0
       config = O
end

# Rewind
begin
       prog = mythtv
       button = scanback
       repeat = 1
       delay = 2
       config = PgUp
end

# Reset Playback Speed
begin
       prog = mythtv
       button = play
       repeat = 0
       delay = 0
       config = Ctrl+P
end

# Forward
begin
       prog = mythtv
       button = scanforward
       repeat = 1
       delay = 2
       config = PgDown
end

# Pause / Play
begin
       prog = mythtv
       button = pause
       repeat = 0
       delay = 0
       config = P
end

# Previous commercial marker
begin
       prog = mythtv
       button = stepback
       repeat = 1
       delay = 2
       config = Home
end

# Big jump back
begin
       prog = mythtv
       button = previous
       repeat = 1
       delay = 2
       config = <
end

# Big jump forward
begin
       prog = mythtv
       button = next
       repeat = 1
       delay = 2
       config = >
end

# Next commercial break marker
begin
       prog = mythtv
       button = stepforward
       repeat = 1
       delay = 2
       config = End
end

# Open Program Guide
begin
       prog = mythtv
       button = top_menu
       repeat = 0
       delay = 0
       config = M
end

# Switch between audio streams
begin
       prog = mythtv
       button = audio
       repeat = 0
       delay = 0
       config = +
end

# Toggle Picture in Picture
begin
       prog = mythtv
       button = ps
       repeat = 0
       delay = 0
       config = V
end

# Switch Picture in Picture Focus
begin
       prog = mythtv
       button = select
       repeat = 0
       delay = 0
       config = B
end

# Swap Picture in Picture
begin
       prog = mythtv
       button = start
       repeat = 0
       delay = 0
       config = N
end

bdremoted method

While the original project has gone unmaintained, there is a maintained fork available at bdremote-ng. The following instructions may no longer be viable.

Get latest source (0.2 at this writing), unpack, and make

cp -p bdremoted /usr/local/sbin/bdremoted

Bluetooth Address of Remote

Hold 'Start' and 'Enter' buttons on the remote

 # hcitool scan
 Scanning ...
           00:19:C1:4F:BE:64       BD Remote Control
 #

bdremote Configuration

/etc/bdremote.conf

# Port number for incoming LIRCD connections
# Default is 8888
BDREMOTE_PORT=
# Disconect timeout for remote in minutes
# Default is 60
BDREMOTE_TIMEOUT=
# Bluetooth address of remote
# Set to address obtained from 'hcitool scan'
# Leave empty to disable
BDREMOTE_ADDR=
# Key repeat rate in repeats per second
# Default is 10
BDREMOTE_RATE=
# Debug level
# Default is 0
BDREMOTE_DEBUG=

bdremote Startup script /etc/init.d/bdremote

#!/bin/sh
#
#

BDREMOTED=/usr/local/sbin/bdremoted
BDREMOTE_CONF=/etc/bdremote.conf 

test -f "$BDREMOTED" || exit 0

if [ -f "$BDREMOTE_CONF" ]; then
    . "$BDREMOTE_CONF"
fi


case "$1" in
    start)
        echo -n "Starting bdremote daemon: "
        BDREMOTE_ARGS="$BDREMOTE_ARGS ${BDREMOTE_PORT:+-p $BDREMOTE_PORT}"
        BDREMOTE_ARGS="$BDREMOTE_ARGS ${BDREMOTE_TIMEOUT:+-t $BDREMOTE_TIMEOUT}"
        BDREMOTE_ARGS="$BDREMOTE_ARGS ${BDREMOTE_ADDR:+-a $BDREMOTE_ADDR}"
        BDREMOTE_ARGS="$BDREMOTE_ARGS ${BDREMOTE_RATE:+-r $BDREMOTE_RATE}"
        BDREMOTE_ARGS="$BDREMOTE_ARGS ${BDREMOTE_DEBUG:+-d $BDREMOTE_DEBUG}"

        if [ -z "$BDREMOTE_ADDR" ]; then
           echo -n "none configured"
        else
            start-stop-daemon --start --quiet --exec "$BDREMOTED" -- $BDREMOTE_ARGS
        fi
        echo
        ;;
    stop)
        echo -n "Stopping bdremote daemon: "
        start-stop-daemon --stop --quiet --exec "$BDREMOTED"
        echo
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: /etc/init.d/bdremote {start|stop|restart}"
        exit 1
esac

exit 0

Configure lircd

Modify /etc/lirc/hardware.conf

# Arguments which will be used when launching lircd
LIRCD_ARGS="-H null --connect 127.0.0.1:8888"

Configure bluetooth

hidd doesn't seem to get along with bdremoted. The distribution default seems ok.

/etc/default/bluetooth

BLUETOOTH_ENABLED=1
HIDD_ENABLED=0

Enable startup scripts

# Turn on bdremote before lirc
for runlevel in 2 3 4 5; do
    ln -s ../init.d/bdremote /etc/rc${runlevel}.d/S18bdremote
done
for runlevel in 0 1 6; do
    ln -s ../init.d/bdremote /etc/rc${runlevel}.d/K82bdremote
done

Test Connectivity

Once you have bluetooth, lircd, and bdremoted up and running, it is a good idea to test that lirc is receiving signals from the remote. Simply run

# irw

and press some keys on the remote. You should see some output like:

0043 00 ps SonyBDRemote
0043 01 ps SonyBDRemote

If you don't see any output, it is likely that your BD remote has not properly paired with your computer. Some people say that

# hidd --search

while holding down start+enter on the remote will pair the remote. However, that did not work for me. Instead, I downloaded cakemote.py, edited it and entered my remote's hardware address, run it and hold start+enter on the remote. This has successfully paired the remote every time for me. irw should now print output when you press keys on the remote.

Some people may need to pair the remote each time the computer boots.

According to this bluez mailing list post, bluez-gnome can be used to permanently pair the device with your computer.

Configure Applications

# ln -s ~/.lircrc ~mythtv/.mythtv/lircrc

~mythtv/.lircrc

include ~/.lirc/mythtv

Mythtv

Some editing of mythtv key bindings required for the lircrc below through Utilities/Setup → Edit Keys
Context 	Action 	Original Setting 	New Setting 	Note
Global 	EJECT 	<none> 	Ctrl+4 	Eject Removable Media
JumpPoints 	Main Menu 	<none> 	Ctrl+1 	Main Menu
JumpPoints 	Program Guide 	<none> 	Ctrl+2 	Program Guide
JumpPoints 	TV Recording Playback 	<none> 	Ctrl+3 	TV Recording Playback
TV Playback 	SPEEDDEC 	J 	Ctrl+J 	Decrease the playback speed (match with SPEEDINC)
TV Playback 	SPEEDINC 	U 	Ctrl+U 	Increase the playback speed (avoid miskey for TV Frontend→DETAILS)
TV Playback 	STRETCHDEC 	<none> 	Ctrl+9 	Decrease time stretch speed
TV Playback 	STRETCHINC 	<none> 	Ctrl+0 	Increase time stretch speed
TV Playback 	TOGGLECC608 	<none> 	Ctrl+8 	Toggle VBI CC


~mythtv/.lirc/mythtv

##########
# LIRC mappings for mythtv

# Need to edit key for Global->EJECT
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = eject
    config = Ctrl+4
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = audio
    config = +
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = angle
    config = W
end

# Need to edit key for desired captioning behavior, e.g.,
# TV Playback->TOGGLECC608      Toggle VBI CC
# TV Playback->TOGGLECC708      Toggle ATSC CC
# TV Playback->NEXTCC           Next of any captions
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = subtitle
    config = Ctrl+8
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = clear
    config = Backspace
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = time
    config = F8
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num1
    config = 1
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num2
    config = 2
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num3
    config = 3
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num4
    config = 4
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num5
    config = 5
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num6
    config = 6
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num7
    config = 7
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num8
    config = 8
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num9
    config = 9
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = num0
    config = 0
end

#begin
#    prog   = mythtv
#    remote = SonyBDRemote
#    button = red
#    config = XXX
#end

#begin
#    prog   = mythtv
#    remote = SonyBDRemote
#    button = green
#    config = XXX
#end

#begin
#    prog   = mythtv
#    remote = SonyBDRemote
#    button = blue
#    config = XXX
#end

#begin
#    prog   = mythtv
#    remote = SonyBDRemote
#    button = yellow
#    config = XXX
#end

# Need to edit key for TV Frontend->DETAILS
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = display
    config = U
end

# Need to edit key for JumpPoints->Main Menu
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = topmenu
    config = Ctrl+1
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = popup
    config = M
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = return
    config = Esc
end

##########

# Need to edit key for JumpPoints->TV Recording Playback
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = ps
    config = Ctrl+3
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = select
    config = Return
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = start
    config = Space
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = triangle
    config = M
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = circle
    config = Esc
end

# Need to edit key for JumpPoints->Program Guide
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = square
    config = Ctrl+2
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = cross
    config = I
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = up
    repeat = 1
    delay  = 4
    config = Up
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = down
    repeat = 1
    delay  = 4
    config = Down
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = left
    config = Left
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = right
    config = Right
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = enter
    config = Return
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = l1
    config = Home
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = r1
    config = End
end

# Need to edit key for TV Playback->STRETCHDEC
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = l2
    config = Ctrl+9
end

# Need to edit key for TV Playback->STRETCHINC
begin
    prog   = mythtv
    remote = SonyBDRemote
    button = r2
    config = Ctrl+0
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = l3
    config = [
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = r3
    config = ]
end

##########

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = play
    config = Space
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = stop
    config = Esc
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = pause
    config = P
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = scanrev
    config = <
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = scanfwd
    config = >
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = prev
    config = Q
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = next
    config = Z
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = steprev
    config = Left
end

begin
    prog   = mythtv
    remote = SonyBDRemote
    button = stepfwd
    config = Right
end

Linux MythTV Networked Bluetooth Remote

This module follows the work of MythControl on source forge and Antion Starikov's work for the PS3 BD remote driver. The two code bases are combined into a single element.

The file can be downloaded at: myth-btremote

The setup is the same as the standard LIRC interface, apart from the LIRC configuration, except that within the archive is a file for compiling/installing the driver, and also a set of files that are listed above, i.e. /etc/myth_btremote.conf, /etc/init.d/myth-btremoted which are useful for registering the daemon as a service.

The configuration file for the remote looks like :

#enter 
#ps 
#select 
#l3 
#r3 
#start 
#up 
#right 
#down 
#left 
#l2 
#r2 
#l1 
#r1 
#triangle 
#circle 
#cross 
#square 
num1 key 1
num2 key 2
num3 key 3
num4 key 4
num5 key 5
num6 key 6
num7 key 7
num8 key 8
num9 key 9
num0 key 0
return key escape 
#clear 
#eject 
#topmenu 
#time 
#prev 
#next 
#play 
#scanrev 
#scanfwd 
#stop 
#pause 
#popup 
#steprev 
#stepfwd 
#subtitle 
#audio 
#angle 
#display 
#blue 
#red  
#green 
#yellow 


All that is needed is to uncomment a line as you decide which key you want to use, and you just assign an action that is supported by the network interface List of supported commands

Mac OS X

Not so much for free support yet

Remote Buddy

Features virtual keyboard; support for keyspan, ps3bd, wiimote; ~$20/single license, less for more

Remote Buddy - Product Page

WiiLi - GNU Linux Port to Wii: Remote Buddy


DarwiinRemote

Cocoa app to receive/data Nintendo Wii Remote

SourceForge - Source

Hiro Blog - Announcing DarwiinRemote

WiiLi - GNU Linux Port to Wii: DarwiinRemote