Предистория. Подарил тёщще на новый год цифровик - Canon PowerShot A480 - попрощще, лишь бы снимал. Третье тысячелетие, а она с мыльницей плёночной рассекает =) К вечеру 1 января, вылезла проблема - цифровик был передан в руки жене, а та захотела смотреть/ковырять фотки в нём на компе... Подрубаем к компу, и видим стандартную для Canon картинку:Jan 7 18 :03 :56 dc7700p kernel : ugen4.3 : <Canon Inc.> at usbus4
Ладно. Это решаемо - топаем в порты и ставим:
dc7700p$ cd /usr/ports/
dc7700p$ make search name =gphotofs
Port: fusefs-gphotofs-0 .4 .0_1
Path: /usr/ports/graphics/fusefs-gphotofs
Info: Mount PTP camera as a file system
Maint: pav@FreeBSD.org
B-deps: fusefs-libs-2 .7 .4 gettext-0 .18 .1 .1 glib-2 .26 .1_1 jpeg-8_3
libexif-0 .6 .18_1 libgphoto2-2 .4 .10 .1 libiconv-1 .13 .1_1 libltdl-2 .2 .10
pcre-8 .11 perl-5 .10 .1_3 pkg-config-0 .25_1 python26-2 .6 .6
R-deps: fusefs-kmod-0 .3 .9 .p1.20080208_7 fusefs-libs-2 .7 .4
gamin-0 .1 .10_4 gettext-0 .18 .1 .1 gio-fam-backend-2 .26 .1 glib-2 .26 .1_1
jpeg-8_3 libexif-0 .6 .18_1 libgphoto2-2 .4 .10 .1 libiconv-1 .13 .1_1
libltdl-2 .2 .10 pcre-8 .11 perl-5 .10 .1_3 pkg-config-0 .25_1 python26-2 .6 .6
WWW: http://gphoto.sourceforge.net/proj/gphotofs/
Port: sysutils/fusefs-gphotofs
Moved:
Date : 2009 -10 -05
Reason: Removed
dc7700p$ cd /usr/ports/graphics/fusefs-gphotofs
dc7700p$ make install clean
Пробуем примонтировать цифровик:
dc7700p$ gphotofs /mnt
dc7700p$ df -h | grep mnt
/dev/fuse0 0B 0B 0B 0% /mnt
dc7700p$ ll /mnt/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 store_00010001
dc7700p$ ll /mnt/store_00010001/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 DCIM
dc7700p$ ll /mnt/store_00010001/DCIM/
total 0
drwxr-xr-x 2 root wheel 0B 1 янв 1970 100CANON
dc7700p$ ll /mnt/store_00010001/DCIM/100CANON/
total 9434
-rw-r--r-- 1 root wheel 2 ,0M 18 дек 11 :10 IMG_0001.JPG
-rw-r--r-- 1 root wheel 2 ,6M 31 дек 21 :42 IMG_0002.JPG
-rw-r--r-- 1 root wheel 2 ,7M 31 дек 21 :42 IMG_0003.JPG
-rw-r--r-- 1 root wheel 2 ,0M 7 янв 15 :13 IMG_0004.JPG
dc7700p$
Чё-то виднеется. На этом можно было бы и остановится. Но, жене в консоль негоже втыкать. Порылся в панельке управления KDE4 - цифровик такой в списках есть, вот тока цепляться не хочет. Толи нехватает чё-то, толи совсем помойко-ориентированные стали они. Ладно. Коммунисты не ищут лёгких путей. Есть sh , есть devd - больше ничё не надо. Для начала включаем дебаг и рестартуем devd :
dc7700p$ grep devd /etc/rc.conf
devd_flags="-d -D"
dc7700p$ /etc/rc.d/devd restart
devd not running?
Starting devd.
Parsing /etc/devd.conf
setting scsi-controller-regex=(aac|adv|adw|aha|ahb|ahc|ahd|aic
|amd|amr|asr|bt|ciss|ct|dpt|esp|ida|iir|ips|isp|mlx|mly|mpt|ncr
|ncv|nsp|stg|sym|trm|wds)[0 -9 ]+
Parsing files in /etc/devd
Parsing /etc/devd/asus.conf
Parsing /etc/devd/uath.conf
Parsing files in /usr/local/etc/devd
Подрубаем аппарат, наблюдаем такой девайс на экране
Processing event '? at bus=1 hubaddr=1 port=4 devaddr=3 interface=0 vendor=0x04a9 product=0x31bf devclass=0x00 devsubclass=0x00 sernum="F7D1136708674498A2950C137682C518" release=0x0001 intclass=0x06 intsubclass=0x01 on uhub4' Pushing table setting bus=1 setting hubaddr=1 setting port=4 setting devaddr=3 setting interface=0 setting vendor=0x04a9 setting product=0x31bf setting devclass=0x00 setting devsubclass=0x00 setting sernum=F7D1136708674498A2950C137682C518 setting release=0x0001 setting intclass=0x06 setting intsubclass=0x01 setting bus=uhub4 Processing nomatch event Testing bus=uhub4 against ^pccard[0-9]+ Testing bus=uhub4 against ^uhub[0-9]+ Executing 'logger Unknown USB device: vendor 0x04a9 product 0x31bf bus uhub4' Popping table
Изучение devd.conf подсказывает мысль - править конфиг не надо, достаточно создать инклюд. Что и делаем. Рисуем такой файл (на самом деле, это примерно третий вариант - в первых двух внешнего скрипта не было, просто монтировался цифровик и на рабочем столе создавался симлинк. Была обнаружена проблема, что KDE не всегда корректно его понимала... Причина не понятна, да и красоты хотелось - чтоб значок был какой нужно) - vendor/product/release - из вышеприведённого лога:
dc7700p$ cat /usr/local/etc/devd/canon.conf
# mount canon photo using gphotofs
attach 100 {
match "vendor" "0x04a9";
match "product" "0x31bf";
match "release" "0x0001";
action "/root/scripts/canon.A480.sh attach;";
};
# umount when dettach
detach 100 {
match "vendor" "0x04a9";
match "product" "0x31bf";
match "release" "0x0001";
action "/root/scripts/canon.A480.sh dettach;";
};
dc7700p$
Плюс дополнительный скрипт, который занимается красивостями - и не забываем сделать его исполняемым:
dc7700p$ cat /root/scripts/canon.A480.sh
#!/bin/sh
# цепляем цифровик
if [ x$1 = "xattach" ]
then
# монтируем
/usr/local/bin/gphotofs -o allow_other /mnt;
# ставим права, на всякий случай
/bin/chmod 775 /mnt;
# перебираем всех пользователей
cd /home/ && ls |
{
while read user
do
# file path
file ="/home/$user /Desktop/Canon.A480.desktop"
# create file link
echo '[Desktop Entry]' >> $file
echo 'Comment[ru]=' >> $file
echo 'Comment=' >> $file
echo 'Exec=/usr/local/kde4/bin/dolphin /mnt' >> $file
echo 'Icon=camera-photo' >> $file
echo 'Name[ru]=Canon.A480' >> $file
echo 'Name=Canon.A480' >> $file
echo 'StartupNotify=true' >> $file
echo 'Terminal=false' >> $file
echo 'TerminalOptions=' >> $file
echo 'Type=Application' >> $file
echo 'X-KDE-SubstituteUID=false' >> $file
# set permissions
chown $user $file
chmod 755 $file
done
}
exit 0 ;
fi
# отцепляем цифровик
if [ x$1 = "xdettach" ]
then
/sbin/umount -f /mnt;
cd /home/ && ls |
{
while read user
do
cd /home/$user /Desktop && \
rm -f /home/$user /Desktop/Canon.A480.desktop
done
}
exit 0 ;
fi
echo "Usage: `basename $0 ` {attach|dettach}"
Далее, убираем дебаг, рестартуем devd и пробуем. Должно работать.
Источник: http://www.lissyara.su/articles/freebsd/hardware/mount_canon_powershot_using_gphotofs/