- Использование правил udev для запуска скрипта при вставке USB
- unixforum.org
- запуск скрипта при извлечении флешки
- запуск скрипта при извлечении флешки
- Re: запуск скрипта при извлечении флешки
- Re: запуск скрипта при извлечении флешки
- Использование правил udev для запуска скрипта при вставке USB
- 4 ответа
- Как написать скрипт на флешке, который будет сам запускаться, при ее подключении на любой платформе (win, mac, lin)?
- Linux и USB-устройства
- 1. Общие сведения о шине USB.
- 2. Поддержка USB-устройств в Linux
- 3. USB-мышь в Linux
- 4. Flash-диски
- 5. Цифровые фотоаппараты
- Замечания и дополнения от читателей.
Использование правил udev для запуска скрипта при вставке USB
Я пытаюсь настроить скрипт для запуска при каждом подключении USB-устройства. Я создал файл /etc/udev/rules.d/90-local.rules и добавил следующее правило:
Проблема в том, что когда диск подключен, ничего не происходит. Сценарий, для целей отладки, настроен на отправку уведомления с уведомлением-отправкой, которое установлено и отлично работает с терминала.
Путь к сценарию правильный, так как я выполнил эту точную команду в терминале без проблем.
У меня такая же проблема. Это сработало для меня:
Попробуйте скопировать ваш скрипт /usr/local/bin и изменить каталог в вашем .rules файле.
Кроме того, я не знаю, что такое SYSFS, но я бы предпочел использовать свойства ATTR.
Следующая строка содержит содержимое моего .rules файла:
notify-send требует доступа к вашей сеансовой шине DBus, которая не может быть по двум причинам:
Нет информации о сеансе. Когда скрипт запускается udev, он ничего не знает о том, где вы вошли в систему или вообще вошли в нее. Многопользовательское с X11 все еще сложно, но переключение пользователей работает как для X11, так и для консольных сессий. Многие люди также используют SSH, VNC и NX по сети.
( DISPLAY=:0 Будет работать половину времени, но это по — прежнему гадать , в лучшем случае .)
Запрещено политикой DBus. Даже если ваш сценарий каким-то образом обнаружит ваш сеанс X11, он не сможет отправлять уведомления из-за запуска сценария root вместо вашей учетной записи пользователя.
Вместо этого вы можете попытаться сопоставить устройство по идентификатору производителя и продукта. Следующее пользовательское правило работает для меня:
Вы можете увидеть idVendor и idProduct в выводе lsusb или dmesg после подключения устройства.
В ответ на ответ Алеха: Если вы также хотите отслеживать remove события, вам нужно искать переменную среды с именем ID_SERIAL . Он содержит идентификатор поставщика и продукта, разделенные подчеркиванием:
Правило теперь тоже короче.
Возможно, вам может понадобиться добавить sleep внутри скрипта, чтобы дать USB-устройству возможность «успокоиться»? Например, модемы usb 3g, переключение режимов для получения / dev / ttyUSB для запуска и запуска ядром.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
запуск скрипта при извлечении флешки
Модератор: Bizdelnick
запуск скрипта при извлечении флешки
Сообщение zshgm » 15.06.2009 11:54
Re: запуск скрипта при извлечении флешки
Сообщение Minton » 15.06.2009 13:16
«Настоящие мужчины используют поиск» ©Goodvin
Re: запуск скрипта при извлечении флешки
Сообщение zshgm » 15.06.2009 13:51
с помощью udevmonitor —env
при вытаскивании флешки вижу (действие remove происходит):
UDEV [1245059664.359228] remove@/block/sdb
UDEV_LOG=3
ACTION=remove
DEVPATH=/block/sdb
SUBSYSTEM=block
SEQNUM=1267
MINOR=16
MAJOR=8
PHYSDEVPATH=/devices/pci0000:00/0000:00:1d.7/usb5/5-7/5-7:1.0/host12/target12:0:0/12:0:0:0
PHYSDEVBUS=scsi
PHYSDEVDRIVER=sd
UDEVD_EVENT=1
ID_VENDOR=JetFlash
ID_MODEL=Transcend_32GB
ID_REVISION=8.07
ID_SERIAL=JetFlash_Transcend_32GB_4JRWAUI1
ID_TYPE=disk
ID_BUS=usb
ID_PATH=pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0
DEVLINKS=/dev/disk/by-id/usb-JetFlash_Transcend_32GB_4JRWAUI1 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0
DEVNAME=/dev/sdb
комбинировал различные варианты, событие add срабатывает всегда, а remove -никогда : /
Источник
Использование правил udev для запуска скрипта при вставке USB
Я пытаюсь настроить скрипт для запуска каждый раз, когда я подключаю USB-устройство. Я создал файл /etc/udev/rules.d/90-local.rules и добавил следующее правило:
Проблема в том, что когда привод подключен, ничего не происходит. Сценарий для целей отладки настроен на отправку уведомления с уведомлением-отправкой, которое установлено и отлично работает с терминалом.
Путь к скрипту правильный, поскольку я выполнил эту точную команду в терминале без каких-либо проблем.
4 ответа
notify-send требуется доступ к вашей шине сеанса DBus, которую она не может иметь по двум причинам:
Нет информации о сеансе. Когда вы начинаете с udev, ваш скрипт знает nothing о том, где вы вошли в систему, или если вы вообще вошли в систему. Многоместное использование X11 по-прежнему сложное, но пользовательская коммутация работает как для X11, так и для консольных сеансов. Многие люди также используют SSH, VNC и NX по сети.
( DISPLAY=:0 будет работать половину времени, но в лучшем случае это угадать .)
Отказано в политике DBus. Даже если ваш сценарий каким-то образом находит ваш сеанс X11, он не сможет отправлять уведомления из-за того, что сценарий запускается как root вместо вашего учетной записи пользователя.
Вместо этого вы можете попытаться сопоставить устройство с помощью идентификаторов поставщиков и продуктов. Для меня работает следующее настраиваемое правило:
Вы можете видеть idVendor и idProduct на выходе lsusb или dmesg после присоединения устройства.
В ответ на ответ Олега: Если вы также хотите отслеживать события remove , вам нужно искать переменную среды с именем ID_SERIAL . Он содержит идентификатор поставщика и продукта, разделенный символом подчеркивания:
Правило также короче.
Возможно, вам может понадобиться добавить в сценарий код sleep , чтобы дать устройству USB возможность «опуститься» вниз? Например, модемы usb 3g, режим переключения для получения /dev /ttyUSB для запуска и запуска ядра.
Источник
Как написать скрипт на флешке, который будет сам запускаться, при ее подключении на любой платформе (win, mac, lin)?
У меня есть куча sd и usb флешек, и иногда мои друзья любят их взять на короткое (очень продолжительное время), причем без моего ведома. И я вот через неделю не многу найти все свои флешки.
Я хочу написать скрипт, поместить его на флешку, и чтоб он сам запускался, при подключении флешки к пк. Скрипт простой, аля обычный GET запрос на какой нибудь мой example.com/flash_id=1. Таким образом, я буду знать, что моя флешка где-то «гуляет».
Написать скрипт, который делает GET запрос — просто, а вот как сделать, чтоб он запускался сам при подключении к пк?
- Вопрос задан 12 окт. 2020
- 1146 просмотров
Таким образом, я буду знать, что моя флешка где-то «гуляет».
Никак.
Скрипт это программа, а программа сама не может запуститься, ее должен кто-то запустить.
Сама ОС или пользователь
Это надо задания операционной системе давать на запуск определенной программы при определенных событиях, иначе никак.
Гуглить про badusb.
Можно сделать флешку с дополнительной нагрузкой, то есть флешка будет представляться в системе и как флешка и как клавиатура и например посылая комбинацию кнопок запускать командную строку в которой выполнять заданную команду.
Само собой таки вещи считаются зловредными и антивирусы на это реагируют.
Тут на самом деле интересная тема!
Хоть и говорят Вам, что нужно по-другому это делать (отчасти согласен), но способ со скриптом вполне имеет право на жизнь.
И вот тут придётся разделить на 2 части: 1. Социальная и 2. Техническая.
1. Социальная инженерия. Нужно сделать так, чтобы целевая аудитория (это придётся прикинуть кто в основном будет использовать флешку) захотела запустить этот файл. Назвать его как-нибудь. чтобы было интересно потенциальной аудитории, например «iq тест» (да, забавно, можно сделать вывод на весь экран картинки с «Е***ть ты лох!»). Короче, чтобы просто запустили его.
2. Технический. Нужно обеспечить чтобы этот файл запустился и на винде, и в линуксах. На флешке чаще всего exFAT, и флаг «x» (выполняемый) там как бы и нельзя поставить на файл, но если просто в консоли или другом скрипте указать выполнить файл — он выполнится (зависит ещё и от способа монтирования в конкретной системе, можно запретить запуск исполняемых оттуда). Собственно, далеко нетривиально сделать скрипт, чтобы один и тот же файл выполнялся и в винде и в линуксе, но МОЖНО (я так делал, не спрашивайте зачем). Гораздо проще сделать отдельно для винды и отдельно для линукса.
Прописать в автозагрузке — для винды autorun.inf в корне, ну и там прописать что и как запускать (да, автозапуск может быть отключен на компе, поэтому нужна проработка варианта 1).
В линуксах — есть (или была?) дыра в КДЕ и других оболочках, точнее даже это не совсем к оболочке относилось, что-то ещё там, но суть в том, что некоторые файловые менеджеры (Dolphin, например, который файловый менеджер по умолчанию в КДЕ) используют файлы .directory (скрытый по умолчанию), в которых можно прописывать (и они сами прописывают) режим просмотра, и другие данные. Так туда можно указать путь к значку, и вместо картинки показать на скрипт, при открытии папки (флешки, если в корень положить) будет этот скрипт выполнен. Но, кажется, это уже пофиксили обновлениями, но есть ещё разные способы и в линуксе, и в винде тоже, чтобы сработал нужный файл.
А уж как вызвать curl с нужными параметрами и как на сервере считать попадания — это уже сами думайте, не сложно.
Короче, тут большое поле для полёта 🙂
P.S. Антивирусы могут на это ругаться.
Кто-то уже такое делал? Подскажите пожалуйста.
Билл Гейтс такое делал. Называлось Windows’95, Windows’98, Windows XP.
Наконец весь мир так завалило вирусней, что даже он убрал автозапуск по умолчанию.
И больше так никто не делал.
Мог бы посоветовать просто отформатировать флешку в Ext2Fs, но если у вас ее берут без спроса и заигрывают — то ее и переформатируют с такой же легкостью. Еще вам же похвастаются, что «исправили проблему».
Источник
Linux и USB-устройства
(C) В.А.Костромин, kos @ rus-linux dot net
1. Общие сведения о шине USB.
У любого компьютера, выпущенного в последнее время, вы обязательно обнаружите либо на лицевой панели, либо на задней стенке разъем USB. Шина USB (Universal Serial Bus) первоначально была разработана для обеспечения легкого подключения компьютера к телефонным линиям и расширения числа портов. Первая версия стандарта (версия 1.0) была выпущена в январе 1996 года. Сейчас в основном используется версия 1.1. Устройства этой версии обычно помечены значком, изображенным на рис.1. Стандарт USB 1.1 вполне удовлетворяет всем требованиям при работе с низко-скоростными устройствами, вроде мышей и клавиатур, и даже с устройствами, работающими на средних скоростях, вроде Ethernet-адаптеров (10 Mbit/sec) или устройств бытовой электроники (таких, как цифровые камеры и MP3-плейеры), которые пересылают только несколько мегабайт данных. Но если на периферийное устройство или в обратном направлении необходимо пересылать большие объемы информации (примеры — жесткие диски, видеокамеры высокого разрешения, или одновременное использование нескольких сетевых адаптеров стандарта 100BaseT), то скорости, обеспечиваемые USB 1.1, уже недостаточны. Поэтому в 1999 году была разработана версия 2.0 стандарта USB, обеспечивающая более высокие скорости обмена данными. Значок, которым помечаются USB-устройства версии 2.0, изображен на рис. 2.
Рис. 1. Эмблема USB-устройств версии 1.1
Рис. 2. Эмблема USB-устройств версии 2.0
Современные компьютеры обычно имеют контроллер USB-шины, установленный на материнской плате. Для USB версии 1.1 было разработано два типа таких контроллеров, отличающихся интерфейсом взаимодействия с USB-устройствами: OHCI (Open Host Controller Interface) фирмы Compaq и UHCI (Universal Host Controller Interface) фирмы Intel. Оба типа имеют примерно одинаковые возможности и USB-устройства работают с обоими типами контроллеров. Аппаратная часть UHCI-контроллеров проще, а значит, они дешевле, но зато требуют более сложных драйверов, что увеличивает нагрузку на процессор. Версия 2.0 стандарта USB использует улучшенный вариант интерфейса — EHCI (Enhanced Host Controller Interface).
Стандарт USB предусматривает строгую иерархию устройств, управляемых основным хостом, и использование протокола master/slave для управления подключаемыми устройствами. На один USB-разъем могут быть последовательно подключены до 127 устройств. Но непосредственно подключать одно устройство к другому нельзя, поскольку питание таких устройств осуществляется по той же шине. Поэтому для подключения дополнительных устройств используются специальные хабы, обеспечивающие снабжение этих устройств необходимой энергией. В результате USB-устройства образуют как бы дерево, каждая не конечная вершина которого является хабом. Поскольку любой обмен данными инициируется только хостом, и периферийные устройства не могут начать взаимодействие, исключена возможность коллизий, вследствие чего снижается стоимость устройств. Правда, такое решение приводит к некоторому снижению производительности. В результате USB-устройства версии 1.1 могут работать в двух режимах: так называемом low speed, обеспечивающем скорость передачи данных до 1.5 Mбит/сек, и full speed, в котором скорость передачи данных может составлять 12 Мбит/сек. Это только теоретический предел, а реально производительность шины даже в идеальных условиях не превышает 8,5 Мбит/сек., а в среднем составляет около 2 Мбит/сек.
Интерфейс EHCI, используемый в устройствах версии 2, обеспечивает режим работы high speed, для которого скорость передачи данных может достигать 480 Мбит/сек. Для того чтобы USB-устройства могли обмениваться данными с такой скоростью, и хост-контроллер и само устройство должны соответствовать стандарту USB 2.0 и обеспечивать работу с интерфейсом EHCI. Однако хост-контроллеры 2.0 успешно работают с устройствами версии 1.1. И наоборот, вы вполне можете подключать устройства USB 2.0 к хосту (и к хабам) версии USB 1.1 и они будут прекрасно работать, но . со скоростью не более 12, а не 480 Мбит/сек.
В настоящее время разработан широкий спектр устройств, подключаемых по шине USB. Это клавиатуры, мыши, джойстики, игровые приставки, сканеры, модемы, принтеры, цифровые камеры, устройства хранения информации – дисководы гибких и жестких дисков, дисководы Zip, LS120 и CD-ROM. Очень перспективный и интересный класс таких устройств образуют накопители на основе Flash-памяти. Объем статьи не позволяет рассказать о каждом из этих типов устройств, так что ограничимся рассмотрением USB-накопителей (в частности Flash-дисков и цифровых фотокамер). Но вначале рассмотрим общие вопросы, что, надеюсь, позволит вам справиться и с другими типами устройств.
2. Поддержка USB-устройств в Linux
Для того чтобы работать с USB-устройствами под Linux, должны выполняться несколько условий. Во-первых, USB-устройства должны поддерживаться на аппаратном уровне, то есть на материнской плате должен быть установлен USB-контроллер. Определить его наличие можно по характерным разъемам, обычно расположенным на задней стенке системного блока. Тип интерфейса этого контроллера вы можете определить с помощью команды
[user]$ /sbin/lspci –v
Направьте вывод этой команды в файл и просмотрите результат. Для каждого из установленных у вас контроллеров вы найдете примерно такие строки:
00:1f.2 USB Controller: Intel Corp. 82801BA/BAM USB (Hub (rev 05) (prog-if 00 [UHCI])
Subsystem: Intel Corp. 82801BA/BAM USB (Hub
Flags: bus master, medium devsel, latency 0, IRQ 11
I/O ports at d000 [size=32]
Как видите, в моем компьютере стоит USB-контроллер с интерфейсом UHCI, а следовательно, версии 1.1.
Теперь перейдем к программной части. Как и для любой другой аппаратуры, у вас должна быть реализована поддержка USB в ядре. Если вы используете ядро, скомпилированное разработчиком, то такая поддержка, скорее всего, обеспечена. Полноценная поддержка USB версии 1.1 включается в ядро, начиная с версии 2.2.18. Если хост-контроллер вашего компьютера соответствует версии 2.0 стандарта USB, вы должны иметь ядро, версия которого не ниже 2.4.19, и использовать драйвер EHCI.
Если же вы сами компилируете ядро для своей системы, вы должны включить поддержку USB либо непосредственно в ядро, либо в подключаемые модули ядра. Для этого при компиляции надо задать следующие опции в секции поддержки USB (либо подключить соответствующие модули):
Поддержка USB (CONFIG_USB, usbcore.o)
Подключение USB-драйверов (выберите нужный драйвер из следующего списка):
ECHI HCD (CONFIG_USB_EHCI_HCD, ehci-hcd.o)
UHCI (CONFIG_USB_UHCI, usb-uhci.o)
OHCI (CONFIG_USB_OHCI, usb-ohci.o)
Поддержка USB-накопителей (CONFIG_USB_STORAGE, usb-storage.o).
Во-вторых, поскольку взаимодействие с USB осуществляется путем эмуляции SCSI, должны быть включена и поддержка SCSI-устройств, для чего должны быть включены следующие опции в секции поддержки SCSI (либо подключены указанные модули):
Поддержка SCSI (CONFIG_SCSI, scsi_mod.o)
Поддержка SCSI-дисков (CONFIG_BLK_DEV_SD, sd_mod.o)
SCSI generic support (CONFIG_CHR_DEV_SG, sg.o)
Включен опрос всех LUN на каждом SCSI-устройстве (CONFIG_SCSI_MULTI_LUN).
В третьих, в секции файловых систем должна быть включена поддержка файловых систем, используемых USB -устройствами:
DOS FAT (CONFIG_FAT_FS, fat.o)
MSDOS (CONFIG_MSDOS_FS, msdos.o)
VFAT (CONFIG_VFAT_FS, vfat.o)
Ну, и наконец, для конкретных типов устройств должна быть включена поддержка соответствующих устройств. Например, для клавиатуры, мыши, джойстика необходимо включить поддержку USB Human Interface Device (HID) , для сканера включить опцию USB Scanner support , для модема — USB Modem (CDC ACM) support , для принтера — USB Printer support , и так далее.
Для работы с USB-устройствами динамически генерируется виртуальная файловая система, являющаяся частью файловой системы /proc , и располагающаяся в каталоге /proc/bus/usb. Генерация такой системы выполняется из инициализационных скриптов при загрузке системы. В дистрибутиве Red Hat версии 9, например, такая генерация происходит при выполнении скрипта /etc/rc.d/rc.sysinit, в котором имеется следующая команда:
mount -t usbdevfs none /proc/bus/usb
Одновременно загружаются модули usbcore, usb-uhci, hid и производится инициализация usb-контроллеров.
В некоторых случаях монтирование может осуществляться путем прописывания в файле /etc/fstab строки вида:
none /proc/bus/usb usbdevfs defaults 0 0
или же путем выполнения от имени root-а команды:
[root]# mount -t usbdevfs none /proc/bus/usb
и запуска необходимых модулей командой modprobe.
Теперь давайте посмотрим, как в работающей системе проверить, обеспечена ли поддержка USB. Существует несколько точек, в которых отображаются такие сведения (я не могу гарантировать, что сумею перечислить все такие точки, но упомянутых достаточно для того, чтобы убедиться, что USB работает).
Начнем с файла /var/log/dmesg, содержащего протокол начальной загрузки. Проведите в нем поиск по шаблону “usb”. Я, например, увидел там строки, говорящие, что загружены драйверы usbdevfs и usb-uhci, поддерживаются два порта и драйвер hid (хотя у меня и мышь и клавиатура обычные, не-USB).
Запустив далее команду /sbin/lsmod, я увидел, что загружены модули usb-storage, usbcore, usb-uhci и hid.
Теперь давайте заглянем в каталог /proc/bus/usb. Его содержимое должно выглядеть примерно так:
dr-xr-xr-x 1 root root 0 Jan 26 10:40 001
-r—r—r— 1 root root 0 Jan 26 10:40 devices
-r—r—r— 1 root root 0 Jan 26 10:40 drivers
Если у вас более одного USB-контроллера, вы увидите соответствующее число подкаталогов с цифровыми именами 002, 003 и так далее. Если каталог /proc/bus/usb пуст, это означает, что виртуальная файловая система поддержки USB не смонтирована или смонтирована не в тот каталог. В каждом из каталогов 001, 002 и так далее у вас пока (до подключения к шине каких-то устройств) должно быть всего по одному файлу, имя которого тоже представлено трехзначным числом. Эти числа являются уникальными номерами USB-устройств, и пока что задают только номера контроллеров. Содержимое этих файлов нас пока не интересует.
Файл /proc/bus/usb/drivers содержит список зарегистрированных на данный момент драйверов (даже если драйвер не используется никаким устройством). Я у себя увидел в этом файле три строки:
Прежде чем рассматривать содержимое файла /proc/bus/usb/devices, давайте посмотрим, что происходит при подключении к USB-шине какого-то устройства. В Linux имеется программа /sbin/hotplug, основное назначение которой состоит в том, чтобы уведомлять приложения о существенных изменениях в системе, в первую очередь – об изменениях в составе аппаратных средств. Программа эта запускается из инициализационных скриптов (конкретно, в скрипте /etc/rc.sysinit). Когда вы подключаете USB-устройство к какому-либо порту, ядро обнаруживает это событие и изменяет файл /proc/bus/usb/devices. Соответственно, и при удалении устройства этот файл тоже изменяется. Следовательно, в нем в каждый момент времени содержится информация о каждом устройстве, подключенном в текущий момент времени к USB-шине.
Каждому конкретному устройству соответствует группа строк в файле /proc/bus/usb/devices , начинающаяся со строки, обозначенной буквой T:.
Отдельные строки содержат следующую информацию:
Строка, начинающаяся с буквы T:, задает топологию.
Bus указывает, к какой шине подключено устройство.
Lev указывает уровень устройства, начиная с уровня 00 для корневого хаба (root hub). Уровень 01 соответствует любому устройству, подключенному к корневому хабу, уровень 02 соответствует устройствам, подключенным к хабу уровня 01, и так далее.
Prnt указывает на устройство, являющееся родительским по отношению к данному (всегда 00 для корневого хаба и 01 для устройств, подключенных к корневому хабу).
Port — порт на родительском устройстве, начиная с 00 для первого порта каждого устройства.
Значения Prnt и Port уникальны в пределах одной шины.
Cnt показывает, какой номер имеет данное устройство на своем уровне в соответствии с порядком перечисления устройств данного уровня, начиная с номера 01 для первого устройства.
Dev# указывает номер устройства безотносительно к уровню. Этот номер уникален в пределах одной шины.
Spd указывает, с какой скоростью работает устройство в Мбит/сек. (возможные значения для версии 1.1 USB — 1.5 или 12).
MxCh показывает, сколько устройств может быть подключено к данному устройству; это число равно 00 для всех устройств, кроме хабов.
Driver показывает, какой драйвер используется для этого устройства; если указано none, значит никакого драйвера не используется.
Строки, начинающиеся с букв D: и P:, содержат информацию из спецификации устройства и сведения о производителе.
Самые интересные для нас строки (таких строк может быть несколько) начинаются с буквы S:. Эти строки содержат наименование известных системе устройств и имена их производителей.
Другие строки мы здесь подробно разбирать не будем, при желании вы можете найти такое описание в USB Guide, либо в файле linux/Documentation/usb/proc_usb_info.txt .
Для примера приведу вид файла /proc/bus/usb/devices на одном из компьютеров, у которого имелся один USB-порт, и никаких USB-устройств подключено не было:
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0000 ProdID=0000 Rev= 0.00
S: Product=USB UHCI Root Hub
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms
После подключения flash-диска в этом файле появились следующие дополнительные строки:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 9 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0ea0 ProdID=6803 Rev= 1.00
S: Product=Solid state disk
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=83(I) Atr=03(Int.) MxPS= 2 Ivl=1ms
Как видите, содержимое файла /proc/bus/usb/devices позволяет достаточно точно определить, о каких USB-устройствах известно вашей системе. Однако, понять записи в этом файле без дополнительных разъяснений довольно сложно. Помочь в их расшифровке вам может программа usbview (разработчик — Greg Froah-Hartman, сайт программы — http://usbview.sourceforge.net). На рисунке 3 приведен вид окна этой программы. Как видите, прочитать информацию о подключенном к системе flash-диске с ее помощью несколько проще. Причем, устройство обнаруживается этой программой сразу после его подключения.
Рис. 3. Окно программы usbview
На этом изложение общих вопросов закончено, и можно перейти к рассказу о конкретном опыте работы с некоторыми из USB –устройств. Я расскажу здесь о своем опыте работы в Linux с тремя типами устройств: мышью, цифровым фотоаппаратом и накопителем на основе flash-памяти.
3. USB-мышь в Linux
После подключения USB-мыши к разъему в файле /proc/bus/usb/devices появились строки
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c002 Rev= 1.20
S: Product=USB-PS/2 Mouse M-BA47
C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr= 50mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID) Sub=01 Prot=02 Driver=hid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
Курсор сразу же начал реагировать как на перемещения основной мыши, так и дополнительной, подключенной через USB. Никаких дополнительных усилий для обеспечения работоспособности USB-мыши не потребовалось. Причем в OpenOffice даже работало колесико, прокручивая страничку. На случай, если у вас все же возникнут какие-либо сложности, приведу некоторые дополнительные сведения о настройке USB- мышей, заимствованные мной из литературных источников.
Во-первых, проверьте, что ссылка с именем /dev/mouse указывает на правильный порт. Если у вас USB-мышь, то /dev/mouse должна указывать на /dev/input/mice.
Далее убедитесь, что существует файл /etc/sysconfig/mouse, и что в нем записано что-то вроде:
Первые две строки определяют, какой протокол будет использоваться, соответственно, в текстовом и графическом режимах. Третья строка нужна в случае, когда у вас двух-кнопочная мышь и третья кнопка эмулируется одновременным нажатием двух имеющихся кнопок.
Протокол — это чисто программная характеристика мыши. У мышей, подключаемых через последовательный порт, обычно работает протокол “Microsoft” а мыши типа PS/2 используют протокол »PS/2». Для USB- мыши в качестве протокола можно тоже указать »PS/2».
В последнее время появились мыши с колесиком, которые обеспечивают скроллинг (прокрутку) при вращении колесика и в силу этого очень удобны при работе с некоторыми программами (например, с текстовым редактором из пакета OpenOffice или браузером Mozilla). Колесико мыши заменяет одновременно 3-ю, 4-ую и 5-ую кнопки мыши (нажатие на колесико равносильно нажатию 3-ей кнопки, вращение в одном направлении – 4-ая кнопка, в другом – 5-ая). Использоваться скроллинг может только в графическом режиме, причем пакет XFree86 должен быть версии не ниже 3.3.2, и то скроллинг будет работать не в каждом приложении. Для USB- мышей с колесиком надо выбирать протокол “IMPS/2”.
Чтобы мышь корректно работала в графическом режиме, необходимо правильно задать секцию InputDevice в файле XF86Config-4. Вот пример соответствующей секции для мыши с колесиком, подключаемой через USB- порт:
Option «Device» «/dev/mouse»
Option «Protocol» «IMPS/2»
Option «ZAxisMapping» «4 5»
Option «Emulate3Buttons» «no»
Отмечу, что для мыши с колесиком последняя строка («Emulate3Buttons» «no») является обязательной.
После этого в графических средах KDE и GNOME скроллинг будет работать по умолчанию в большинстве приложений, например, в браузере Mozilla и офисном пакете OpenOffice.org. В отдельных приложениях (например, в текстовом редакторе Nedit) для использования скроллинга требуется произвести некоторые изменения в конфигурационных файлах приложения. Подробнее о том, какие дополнения и куда необходимо вписать, вы можете узнать на страничке Colas Nahaboo — http://koala.ilog.fr/colas/mouse-wheel-scroll/ .
4. Flash-диски
Вторым устройством, которое я попытался подключить через USB-разъем, был накопитель на основе энергонезависимой flash-памяти. Такие устройства часто называют flash-дисками, что, конечно, не верно, но думаю, что такое название приживется. Как оказалось, работа с такими устройствами в Linux осуществляется достаточно просто. После подключения flash-диска к разъему USB светодиод на нем начинает периодически мигать. После этого (если поддержка USB ядром имеется) можно просто смонтировать flash-диск командой:
[root]# mount –t vfat /dev/sda1 /mnt/usb
А если в файле fstab прописать строку вида
/dev/sda1 /mnt/usb vfat users,codepage=866, iocharset=koi8-r 0 0
то монтировать USB-диск смогут все пользователи простой командой
[user]$ mount /mnt/usb
Когда происходит обращение к этому диску, частота мерцания светодиода на нем повышается.
Внимание! Имейте в виду, что вынимать смонтированный flash-диск из разъема нельзя – после этого он может сразу перестать читаться. Необходимо предварительно размонтировать устройство, дождаться, пока мерцание снова станет более редким, и только после этого flash-диск можно отключать от разъема. Если вы все же умудрились «испортить» ваш flash-диск некорректным отключением, то имейте в виду, что его работоспособность можно восстановить с помощью специальных утилит, поставляемых разработчиком flash-диска (только обычно такие утилиты предназначены для использования под ОС Windows).
5. Цифровые фотоаппараты
Третьим типом USB-устройств, с которыми мне довелось поработать, был цифровой фотоаппарат Olympus C120. Я полагаю, что на сегодняшний день цифровые фотоаппараты вообще являются одним из самых распространенных типов устройств, подключаемых к компьютеру по шине USB. Существует три типа подключения таких устройств к компьютеру. Некоторые аппараты имеют кабель, подключаемый к USB-порту компьютера. Второй конец такого кабеля подключается непосредственно к фотоаппарату посредством специального разъема. Второй тип фотоаппаратов не имеет на корпусе разъема для подключения кабеля, зато снабжаются специальным адаптером, в который вставляется извлеченная из фотоаппарата карта памяти. Адаптер уже подключается к компьютеру и производится перенос файлов изображений на жесткий диск (или их отправка по электронной почте и так далее). И, наконец, третий тип подключения – это PCMCIA-адаптеры, которые тоже служат для переноса изображений с извлеченной из фотоаппарата карты памяти. Такие адаптеры обычно применяются только для работы с лэптопами. Поскольку мне приходилось иметь дело только с аппаратом, имеющим USB-разъем, то я буду рассматривать только случай камеры первого типа.
После того, как вы убедитесь, что ваше ядро поддерживает стандарт USB, подключите камеру к компьютеру через USB-порт (питание аппарата должно быть включено!) и убедитесь в том, ядро «видит» камеру. Судить об этом можно по тому, что в файле /proc/bus/usb/devices появятся строки, аналогичные тем, которые вы видите ниже:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 7 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=07b4 ProdID=0105 Rev= 1.00
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
Если камера не обнаружилась, необходимо проверить настройки «/proc/bus/usb» и «usbdevfs» (смотри раздел 2 выше). Если же ядро обнаружило камеру, то ее можно смонтировать точно так же, как монтировался flash-диск.
Некоторые дополнительные сложности могут возникнуть в том случае, если вы работаете попеременно с flash-диском и с цифровым фотоаппаратом. Если вначале была подключена камера, то даже после вполне корректного ее отключения подключить flash-диск у меня вначале не получалось. Как ни старался, команда mount выдавала такую ответную реакцию:
mount: /dev/sda1 is not a valid block device
Проблема разрешилась, когда я стал монтировать первое устройство как /dev/sda1, а второе — как /dev/sdb1. Найти такое решение мне помог файл /etc/sysconfig/hwconf. Этот файл формируется утилитой kudzu на этапе загрузки системы и содержит информацию об имеющемся в системе оборудовании. После одной из очередных перезагрузок я заметил, что устройство определилось как sdb, после чего мне удалось его смонтировать (в режиме суперпользователя). Ну а дальше уже нашлись и способы облегчения процедур монтирования.
В заключение раздела приведу два коротких замечания.
Первое: в состав некоторых дистрибутивов (например, ASPLinux версии 7.3) входит программа gPhoto, которая позволяет организовать работу с цифровыми фотоаппаратами и теми коллекциями фотографий, которые у вас накопятся вскоре после приобретения такого аппарата. Но осваивать работу с этой программой вам придется самостоятельно.
Второе: учитывая, что в имевшемся у меня цифровом фотоаппарате использовалась съемная карта flash-памяти, я полагаю, что с подключением к Linux-компьютеру выпускаемых для работы с такими картами специальных устройств, – картоводов, проблем тоже не возникнет, ибо подключение таких устройств к компьютеру производится обычно тоже по шине USB.
Если у вас имеются поправки и дополнения к этой статье, я готов опубликовать их здесь после получения от вас письма на адрес kos (at) rus-linux (dot) net.
Замечания и дополнения от читателей.
Здравствуйте. В своей статье вы рекомендуете, отмонтировать usb-накопители прежде чем вытаскивать их из разъёма, чтобы не были потеряны данные и испорчен накопитель. Но не сказали об опции монтирования «sync», которая, в общем-то, позволяет работать с такими устройствами более свободно и безопасно (с точки зрения забывчивости).
—
Лучшие пожелания, Андрей
Источник