Hey Guys,
Thanks to all of this I've been able to get nearly a perfect setup for my Mythtv box. I ended up installing Ubuntu 9.10 as it made the bluetooth setup a lot easier.
Below is a very simple script I made so that when you first boot the machine you run this in a root terminal (I'm sure you could do it any other number of ways too.). Before I get ahead of myself let me just say at what state you should be at before using it.
After your remote is paired and is functioning just how you like it. When you remove the battery it will remote it from /proc/bus/input/devices, then you put the battery in it returns with the same event number.
Now all this script does is check for it being present in that devices list and perform an action and wait for it to go away and perform another action.
Edit: What I should have said is that you could easily adapt this for xbmc as well. Replacing the mythfrontend with the command to run xbmc.
Also I've updated the script to be smarter. It automatically updates the hardware.conf for lirc with the lastest event handler given to the remote. (Assuming it's the last thing to reconnect)
Out of my own preference this is what happens:
Starting with a remote with the battery out:
1. Detect remote is connected
2. Update hardware.conf with new event handler
3. restart lirc to start using the remote
4. start mythfrontend --service
5. forcefully turn on the display (LCD Monitor)
6. Start detecting if remote has been disconnected
7. Dectect the remote is disconnected
8. Stop lirc
9. kill mythfrontend.real
10. forcefully turn off the display
11. start detecting if the remote is connected
Code:
#!/bin/bash
# get first discovery
tail /proc/bus/input/devices | grep -i ps3 > /dev/null
discovery=$?
# if the discovery = 1 the remote is not attached
# if the discovery = 0 the remote is attached
remote_discovery()
{
if [ "$discovery" -eq 1 ]
then
while [ "$discovery" -eq 1 ]
do tail /proc/bus/input/devices | grep -i ps3 > /dev/null
discovery=$?
xset dpms force off
sleep 1
done
enabled=1
take_action
else if [ "$discovery" -eq 0 ]
then
while [ "$discovery" -eq 0 ]
do tail /proc/bus/input/devices | grep -i ps3 > /dev/null
discovery=$?
sleep 1
done
enabled=0
take_action
fi
fi
}
remote_found()
{
echo "Remote Found - Restarting lirc and running mythfrontend"
eventnum=`tail /proc/bus/input/devices | grep Handlers | awk '{print $3}'`
sed -i "s/^REMOTE_DEVICE.*$/REMOTE_DEVICE=\"\/dev\/input\/$eventnum\"/" /etc/lirc/hardware.conf
/etc/init.d/lirc restart
xset dpms force on
sleep 1
(gksudo -u akiko '/usr/bin/mythfrontend --service') &
remote_discovery
}
remote_lost()
{
echo "Remote Lost - Stopping lirc"
/etc/init.d/lirc stop
killall -9 mythfrontend.real
xset dpms force off
remote_discovery
}
take_action()
{
case $enabled in
1 ) remote_found;;
0 ) remote_lost;;
esac
}
remote_discovery
exit 0
To use it just copy the above into a file called something like ps3_remote_finder.sh
Run: chmod +x ps3_remote_finder.sh
Then in a root terminal: /<path to the file/ps3_remote_finder.sh
You will need to leave the window open, I like to so that I can check if it has been working as expected.
Hopefully someone finds this useful.
Cheers,
Cory