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
Here are the advantages
- Inexpensive (< $25 USD)
- Reasonable layout (51 buttons with separate arrows/seeking controls)
- Radio Frequency operation (better range, non-line-of-sight)
- Bluetooth pairing - multiple remotes don't interfere, no picking channels to use
Note: Some remotes (such as that pictured, have a "back" label on the 'cross'/X key, others have it on the "circle"/O
Linux
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.
uinput kernel module method
HOW-TO_Setup_PS3_BD_Remote - A wiki based on the above xbmc.org forum thread.
I strongly recommend that you use this method. 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.
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
# 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=15
#
#
#
# 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 # TIMER = 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_F2 # L2
# 0x51 = KEY_F3 # L3
0x5b = KEY_F11 # R1 = volume up
0x59 = KEY_PAGEUP # R2 = move up one page in watch recordings/EPG
0x52 = KEY_PAGEDOWN # R3 = move down one page in watch recordings/EPG
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)
0x33 = KEY_COMMA # SCAN BACK = decrease scan forward speed / play backwards; playback speed; 3x, 5, 10, 20, 30, 60, 120, 180
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
0x30 = KEY_HOME # PREVIOUS = commercial skip previous
0x38 = KEY_ESC # STOP = back/escape/cancel
0x31 = KEY_END # NEXT = commercial skip next
# 0x60 = KEY_COMMA # SLOW/STEP BACK = jump back (default 10 minutes)
0x39 = KEY_P # PAUSE = play/pause
# 0x61 = KEY_DOT # SLOW/STEP FORWARD = jump forward (default 10 minutes)
0xff = KEY_MAX
A reboot is required to load the uinput kernel modules.
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
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.
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 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