HOWTO: Workaround MythTV’s screwy shutdown / reboot / logout behaviour when running as a desktop application

There are issues with running MythTV as a desktop application, which essentially breaks the regular desktop shutdown/reboot/logout controls (i.e. in Gnome) while MythTV is running in the background.

Apparently, MythTV is designed to catch the SIGQUIT signal that the OS sends when you click shutdown/reboot/logout in Gnome. It then asks ‘Are you sure you want to quit?’ and waits, keeping the computer running, rather than forcing the app to quit and shutting down the computer.

This is a real pain if you have a dual screen set-up and MythTV running in the background (i.e. on a second xserver connected to the tv) while you use the first as a regular desktop. So here’s a solution I’ve put together in order to regain use of the logout/reboot/shutdown controls.

Summary

So here’s an outline of the solution. Note, this guide is designed and tested on Ubuntu Gutsy since that’s what I’m running at the moment. If you want to use it on another distribution/version, you’ll have to figure out the differences on your own. Updates welcome though, so please get in touch if you have any better ways of doing things.

If you disable the prompt to Exit from within MythTV, when you click logout/reboot/shutdown, MythTV quits, but the computer doesn’t shut down (don’t ask me why.. this is just how MythTV behaves). In this situation however, messages appear in /var/log/daemon.log indicating that a logout/shutdown/reboot button has been pressed. All I’ve really done, is write a perl script which tails the daemon.log, and when it finds a message indicating a button has been pressed, it forces the computer to execute the action which was pressed. This script needs to be run when the computer starts up, and the computer pretty much regains normal behaviour.

Steps

1) Configure MythTV not to prompt you with a ‘Are you sure you want to quit?’ message. If this isn’t done, MythTV just waits on the SIGQUIT signal, and nothing appears in the daemon.log so the script won’t work.

From within MythTV you can find this option here:

Utilities/Setup -> Setup -> General -> General -> Confirm Exit

2) Install the libfile-tail-perl package to provide the perl libraries which are required by the script to tail the log:

$ sudo apt-get install libfile-tail-perl

3) Right-click and ‘Save Link As…’ the following script to a location on your filesystem. Some people like /usr/local/bin, it’s up to you though, I personally like ~/.scripts, so I’m going to use that in the following examples.

4) Add the ‘poweroff’ and ‘reboot’ commands to your /etc/sudoers file. Edit the file by running the following at the command-line:

$ sudo gedit /etc/sudoers

And add the following 2 lines, replacing ‘username’ with the user you will be logging in with:

username ALL=NOPASSWD: /sbin/poweroff
username ALL=NOPASSWD: /sbin/reboot

5) Configure script to run at startup. In order o allow the log-out option to work, it needs to be added to the user’s session Start-up Programs (rather than the super-user rc.local). This can be done by going to the following location:

System -> Preferences -> Sessions

Advertisements