17 Sep

Automatically dumping your camera contents to the desktop

Bronwyn has recently become interested in computers – in particular, using them to communicate her interests to others with her hobbies.

In order to help her, I am trying to make things as simple as possible on this computer. That’s a damned pain, sometimes.

I am currently running Mandrake 10 on this machine, with a custom kernel. Mandrake comes with a patch to the kernel which makes automatic mounting for cameras a cinch, but the kernel I built does not.

So, I needed to build an automatic script for getting photos from the camera to the computer.

The following script is a modified version of Kevin Lyda’s mounting script. It loads your camera and dumps the contents to a directory on your KDE desktop. The directory is named with the date and time, so is unique, assuming you don’t mount and remount within seconds.

To use, create a /mnt/sda1 directory and place the following code in your /etc/hotplug/usb/usb-storage file:

#!/bin/sh

logger -t usb-storage "Starting"

case x"$ACTION" in

    xadd)
        # from usb/usbcam
        # new code, using GNU style parameters
        if [ -f /var/run/console.lock ]; then
            CONSOLEOWNER=`cat /var/run/console.lock`
        elif [ -f /var/lock/console.lock ]; then
            CONSOLEOWNER=`cat /var/lock/console.lock`
        else
            logger -t usb-storage No console owner found
            exit
        fi

        logger -t usb-storage "Mounting camera"
        mount -t vfat /dev/sda1 /mnt/sda1
        logger -t usb-storage "Camera mounted, copying files"

        # generate a unique-ish directory
        suffix=$(date +%Y.%m.%d-%H.%M)
        prefix="camera_"
        NEWDIR=$prefix$suffix

        mkdir /home/$CONSOLEOWNER/Desktop/$NEWDIR -p
        find /mnt/sda1/dcim -type f -print0 | xargs -0i mv '{}' /home/$CONSOLEOWNER/Desktop/$NEWDIR
        chown $CONSOLEOWNER.$CONSOLEOWNER /home/$CONSOLEOWNER/Desktop/$NEWDIR -R
        umount /mnt/sda1

        echo -e '07' > /dev/console; sleep 1
        echo -e '07' > /dev/console; sleep 1
        echo -e '07' > /dev/console

        test -d /var/run/usb || mkdir /var/run/usb
        ( echo '#!/bin/sh' ; echo rmmod usb-storage ) > $REMOVER
        chmod 755 $REMOVER
        ;;

esac

logger -t usb-storage "Finishing"