![]() |
Модераторы: powerfox, ZeeLax |
![]() ![]() ![]() |
|
nickless |
|
||||||||||||||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 41 Всего: 181 |
Речь пойдёт о дигитальных камерах с USB-интерфейсом, которые распознаются в линуксе как внешний носитель (USB storage device), на примере "Pentax Optio M30".
Скачивание фотографий с этой камеры происходит обычно примерно так:
Цель: автоматизировать процесс до невозможности, т.е.:
udev Udev это динамический настраиваемый мэнеджер устройств, его задача - следить за физическими устройствами в системе и отображать их в папке /dev. Это позволяет показывать в /dev только те устройства, которые действительно подключены к компьютеру, а так же даёт много других преймуществ, о которых вам с удовольствием расскажет гугль и этот сайт. Вот некоторые вещи, которые позволяет делать udev:
udev-правила Udev является стандартом начиная с ядра 2.6.13 и используется во всех современных дистрибутивах. Всё, что делает udev, настраивается с помощью так называемых правил (udev rules), которые находятся в /etc/udev/rules.d/. Все правила из этой папки читаются в алфавитном порядке, их принято именовать
где ХХ это двузначное число. Основные правила находятся в файле 50-udev.rules. Во всех дистрибутивах (на счет LFS не уверен ![]() План следующий: написать правило для udev, которое распознаёт нужную камеру, называет соответствующее устройство /dev/camera и запускает скрипт, который монтирует её, копирует фотографии попутно создавая папки основываясь на информации в exiv и после этого демонтирует камеру. Всё это в сопровождении прогресс-диалога из kdialog. Идентификация камеры и написание правила В каждом файле правил есть много отдельных правил и условных переходов по типу goto. Синтакс довольно прост, каждое правило состоит из ключей, разделённых запятыми. Часть ключей (match keys) отвечают за идентификацию устройства, часть (assignment keys) за действия, предпринимаемые в таком случае. Примеры проверочные ключей: KERNEL=="sd?", SUBSYSTEM=="block", ATTRS{idVendor}=="0a17" Примеры ключей присваивания: NAME="pentax", GROUP="plugdev", OPTIONS+="last_rule" Действия выполняются только если все проверки верны. Набор ключей, относящихся к одному и тому же правилу должен быть на одной строке. Т.е.
Советую посмотреть на другие правила из /etc/udev/rules.d/, там достаточно примеров. Почитать про синтакс можно еще сдесь (кстати очень полезная статья) и в udev(8) Набрать ключей для идентификации камеры можно с помощью программы udevinfo, например
Имейте ввиду, что вместе можно использовать только те ключи, которые относятся к одному устройству (они разделены пустой строкой). В моём случае нужные мне аттрибуты (ID производителя и продукта, которые так же можно посмотреть в lsusb) не доступны в конечном разделе /dev/sdb1, по этому я пишу их в переменную окружения, и это прекрасно работает:
Правила можно проверить программой udevtest, лучше всего подключить камеру, и не отключая её писать правила, проверяя их udevtest-ом. Перевести название устройства в путь, нужный udevtest можно тем же udevinfo:
Скрипт Моя камера называет фотографии "imgp1234.jpg", а видеоролики "imgp1234.mov", причем удалённые файлы не используются по второму разу. Я хочу сортировать файлы по дням, которые записаны в картинках. Эту информацию можно прочитать программой exiv2
Моя камера использует файловую систему FAT32 и один раздел, udev-правила создают ноды /dev/camera и /dev/camera1. Скрипт создаёт нужные папки, и копирует туда фотографии и видеоролики, если таких файлов в папках еще нет. Видеоролики не содержат данных exiv, по этому они копируются в папку, на основании информации из предидущей картинки. Прогресс-диалог создаётся программой kdialog и показывается первому пользователю из списка в NOTIFY_USERS. Все пользователи из этого списка должны иметь bin/ папку KDE с kdialog в PATH.
Мой скрипт может работать не правильно с другими камерами, советую сначала протестировать его. Удачи. З.Ы. Все действия производились на Gentoo, ядро 2.6.22-gentoo-r5 udev version 114 Exiv2 0.13 KDE: 3.5.7 KDialog: 1.0 Это сообщение отредактировал(а) nickless - 29.8.2007, 02:51 Присоединённый файл ( Кол-во скачиваний: 6 ) ![]() -------------------- ![]() Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||||||||||||
|
|||||||||||||||
![]() ![]() ![]() |
Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |