My wife called me up at work:
- "I'm on a tight schedule, I need to get some work done and the kid is making me crazy; can she watch a DVD on your computer?"
- "Yeah sure, just insert the disc into the external drive, and I'll start the movie for you..."
So we're not beyond
brain washing
our offspring, but that's not the point. You're probably wondering why my wife would make such a call - can't she do that herself? isn't it just a matter of inserting the disc and let the operating system do its thing? and why use a computer instead of a TV/DVD set in the first place?
I'll start with the second question: our only TV is in another room, and our daughter preferred staying around her mom. As for the first question: normally you'd be right, if my computer would only be running Window$ or Linux with a Desktop Manager like
GNOME or
KDE, but it does not. I'm using
awesome as my
Window Manager, with no
Desktop Manager, so I have to reinvent a few wheels sometimes.
So I went ahead, connected to my home computer via
ssh, with a clear concept of the future: I'll just launch a media player from the command line to play the DVD, and ask my wife to take over and select the right DVD menu option. It took me several long minutes, during which both wife and daughter became impatient, before I was forced to admit failure. I did promise them to sort it out later. My wife was less than happy, and was rather verbal about it.
I ended up writing a script that uses
HAL utilities to detect the type of media in the optical drive in order to launch the relevant playback application. The optical disc may be a video DVD, audio CD, or a data disc containing multimedia files in its root directory. The script also
disables the GNOME screensaver during playback, and re-enables it when done.
It's not automatic, i.e. one has to manually run the script in order to start playback. I did, however, add a key binding to
awesome so that my wife can launch the script herself, if she so wishes, by pressing
Mod4+Shift+d (
Mod4 refers, by default, to the Winodws-logo key on normal PC keyboards). I'm using version 2.3 of
awesome, so this translates to the following lines in
~/.awesomerc:
key {
modkey = {"Mod4", "Shift"}
key = "d"
command = "spawn"
arg = "exec ~/bin/dvd.sh"
}
And here's the script
~/bin/dvd.sh itself:
#! /bin/bash
gconftool-2 --set -t boolean /apps/gnome-screensaver/idle_activation_enabled false
device="${1:-/dev/scd0}"
udi=$(hal-find-by-property --key block.device --string $device | \
while read u ; do \
[[ "$(hal-get-property --udi $u --key block.is_volume)" == "true" ]] && \
[[ "$(hal-get-property --udi $u --key volume.is_disc)" == "true" ]] && \
[[ "$(hal-get-property --udi $u --key volume.disc.is_blank)" == "false" ]] && \
echo $u ; \
done)
if [[ "$udi" != "" ]]; then
if [[ "$(hal-get-property --udi $udi --key volume.disc.has_audio)" == "true" ]]; then
DISPLAY=:0 sound-juicer --device $device --play
elif [[ "$(hal-get-property --udi $udi --key volume.disc.is_videodvd)" == "true" ]]; then
DISPLAY=:0 xine -f dvd:///$device
elif [[ "$(hal-get-property --udi $udi --key volume.disc.has_data)" == "true" ]]; then
if [[ "$(hal-get-property --udi $udi --key volume.is_mounted)" == "false" ]]; then
pmount $device
fi
DISPLAY=:0 xine -f "$(hal-get-property --udi $udi --key volume.mount_point)"
pumount $device
fi
fi
gconftool-2 --set -t boolean /apps/gnome-screensaver/idle_activation_enabled true
Notes:
- The script accepts, as a command line argument, an optional device path to use instead of the default /dev/scd0 (the path to my external LG DVD re-writer
).
- The prefix DISPLAY=:0 is used to ensure that playback starts on the default display on my home machine.
- xine is used for video playback, but that's a matter of personal taste.
- pmount is used to mount removable storage devices, but mount is also fine, as long as /etc/fstab has a correct entry for the drive in question, e.g.:
/dev/scd0 /media/cdrom1 udf,iso9660 user,noauto 0 0
- It's necessary to unmount a data disc after playback, so that it can be manually ejected from the drive.
All together now:
"Daisy, Daisy..."[30 Oct 2008]
UPDATE: fixed script to ignore blank media in drive.