Недавно купил себе цифровой фотоаппарат, и соотвественно встал вопрос как из него вытаскивать фотографии. Фотоаппарат Olympus Mju 700 Digital, на борту xD-Picture карточка объемом 1Гб. Соединяется c PC это чудо посредством интерфейса USB.
Моя система Slackware 11.0 kernel 2.6.20.
Итак cоединяем... На экране фотоаппарата появляется менюшка с выбором, что делать, жмем соединить с PC, после чего экран гаснет. Тааак смотрим, что мы имеем...Моя система Slackware 11.0 kernel 2.6.20.
$ uname -a Linux kmax 2.6.20 #3 SMP PREEMPT Sun Feb 11 22:18:20 MSK 2007 i686 pentium4 i386 GNU/LinuxВсе оказалось очень просто и не потребовало чтения манов и пересборки ядра...
$ sudo lsusb Bus 1 Device 2: ID 07b4:0118 Olympus Optical Co., Ltd Bus 1 Device 1: ID 0000:0000 Bus 4 Device 1: ID 0000:0000 Bus 2 Device 3: ID 0451:6060 Texas Instruments, Inc. Bus 2 Device 2: ID 046d:c286 Logitech, Inc. Bus 2 Device 1: ID 0000:0000 Bus 5 Device 1: ID 0000:0000 Bus 3 Device 1: ID 0000:0000
udev нашел нашел устройство, как видим.
$ lsmod Module Size Used by usb_storage 81216 0
Загрузился модуль usb_storage, значит ядро распознало фотоаппарат как устройство хранения USB, осталось только убедиться в этом.
$ sudo fdisk -l Disk /dev/sda: 200.0 GB, 200048565760 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 1 249 2000061 82 Linux swap /dev/sda2 * 250 1465 9767520 83 Linux /dev/sda3 1466 19701 146480670 83 Linux /dev/sda4 19702 24321 37110150 5 Extended /dev/sda5 19702 22133 19535008+ 83 Linux /dev/sda6 22134 24321 17575078+ 83 Linux Disk /dev/sdb: 200.0 GB, 200048565760 bytes 255 heads, 63 sectors/track, 24321 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 24320 195350368+ 7 HPFS/NTFS Disk /dev/sdc: 1048 MB, 1048481280 bytes 33 heads, 63 sectors/track, 985 cylinders Units = cylinders of 2079 * 512 = 1064448 bytes Device Boot Start End Blocks Id System /dev/sdc1 * 1 985 1023874+ 6 FAT16 Partition 1 has different physical/logical endings: phys=(984, 32, 63) logical=(984, 32, 56)
Так и есть:
Disk /dev/sdc: 1048 MB, 1048481280 bytes 33 heads, 63 sectors/track, 985 cylinders Units = cylinders of 2079 * 512 = 1064448 bytes
Теперь можно спокойно добавлять в fstab строчку типа:
dev/sdc1 /mnt/usb auto noauto,users,umask=022,nosuid,noexec,rw 0 0
И монтировать фотоаппарат командой mount /mnt/usb. Но всегда хочется чего-то большего. Тем более, что точно такой же командой я монтирую флэшку, и вычислять каждый раз какое же устройство сейчас флэшка, а какое фотоаппарат не удобно. Короче хочется, чтоб при подключении фотоаппарата создавалось устройство с уникальным именем, и еще чтоб оно само монтировалось. Это возможно. Для этого нам нужно воспользоваться возможностями предоставляемыми нам udev. Создаем в каталоге /etc/udev/rules.d файл с понятным нам названием. Пусть будет /digital_camera.rules.
Теперь необходимо выяснить какие параметры передает ядро юдеву:
udevinfo -a -p /block/sdc/sdc1
Вылезет куча инфы. В принципе по любому критерию можно построить правило для udev, лишь бы критерий был уникален. Я построил правило по критерию SYSFS{model} Само правило:
SYSFS{model}=="u700,S700 ", NAME="camera", ACTION=="add", RUN+="/etc/rc.d/rc.camera"Его надо записать в созданный нами файл. И желательно всем почитать man udev.
Теперь при каждом подключении фотоаппарата будет создаваться устройство /dev/camera и выполняться скрипт /etc/rc.d/rc.camera
Вот его незамысловатое содержимое:
#!/bin/sh mount /mnt/olympusКстати лежать этот скрипт должен вовсе не обязательно в /etc/rc.d
В файле /etc/fstab создадим запись:
/dev/camera /mnt/olympus auto noauto,users,umask=022,nosuid,noexec,rw 0 0И создадим точку монтирования /mnt/olympus.
Как не трудно заметить скрипт монтирует фотоаппарат. Остается создать симлинк этого каталога на рабочий стол и радоваться.