RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Монтирование фотоаппарата Canon через gphotofs [2011]
Предистория. Подарил тёщще на новый год цифровик - Canon PowerShot A480 - попрощще, лишь бы снимал. Третье тысячелетие, а она с мыльницей плёночной рассекает =) К вечеру 1 января, вылезла проблема - цифровик был передан в руки жене, а та захотела смотреть/ковырять фотки в нём на компе... Подрубаем к компу, и видим стандартную для Canon картинку:
Jan 718: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
Чё-то виднеется. На этом можно было бы и остановится. Но, жене в консоль негоже втыкать. Порылся в панельке управления KDE4 - цифровик такой в списках есть, вот тока цепляться не хочет. Толи нехватает чё-то, толи совсем помойко-ориентированные стали они. Ладно. Коммунисты не ищут лёгких путей. Есть sh, есть devd - больше ничё не надо. Для начала включаем дебаг и рестартуем devd:
Изучение 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 и пробуем. Должно работать.