У меня есть программа на C ++, которая обращается к флеш-накопителям USB. Работает на вставленной в данный момент флешке. Обычная программа на C ++ не выполняется, пока мы ее не запустим. Но я хотел, чтобы программа запускалась автоматически при установке флешки. Как я могу это сделать?
Для общего использования, Если требуется запустить программу для какого-либо устройства хранения данных USB. Используйте драйвер для соответствия правила.
Добавляют udev
, файл
sudo nano /etc/udev/rules.d/90-detect-storage.rules
правил Добавляет это правило
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram"
, Если Вы хотите, чтобы Ваша программа отличила диски, таким образом, это выполняет различные операции, используйте (можно передать ее порядковый номер или любой атрибут, который Вы любите):
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/pathto/yourprogram $env{ID_VENDOR_ID} $env{ID_MODEL_ID}"
Перезагрузка все правила
sudo udevadm control --reload-rules
Отключают и повторно включают Примечания флеш-накопителя
:
я использовал это правило только для тестирования, которые создают журнал, когда правило инициировано:
ACTION=="add", DRIVERS=="usb-storage", DRIVER=="sd", RUN+="/bin/sh -c 'echo $env{ID_VENDOR_ID} $env{ID_MODEL_ID} >> /home/username/Desktop/usb-storage.log'"
можно прокомментировать правила, которые Вы не хотите путем добавления #
к началу строки. Файл правил может содержать несколько правил.
Для проверки всего доступного env
переменные используйте:
ACTION=="add", DRIVERS=="usb-storage", RUN+="/bin/sh -c 'echo == >> /home/username/Desktop/usb-storage-env.log; env >> /home/username/Desktop/usb-storage-env.log'"
Для проверки на параметры для использования для соответствия правила работайте:
sudo udevadm info --name=/dev/sdb1 --attribute-walk
Ссылки:
Можно использовать udev
для выполнения команды albitrary. Заставить его работать, создать правило в /etc/udev/rules.d/
:
sudo nano /etc/udev/rules.d/my-usb-device.rules
И войдите:
ACTION=="add", ATTRS{idProduct}=="XXXX", ATTRS{idVendor}=="YYYY", RUN+="/location/of/my/command"
ПРИМЕЧАНИЕ: XXXX
и YYYY
значения будут приняты от lsusb
вывод.