запуск скрипта при подключении usb
Определить подключение USB диска, и выполнить скрипт
Помогите, пожалуйста, решить задачу определения подключения USB флешки, и последующего запуска скрипта CMD, если на флешке присутствуют определенные папки и файлы.
Что конкретно нужно:
1. Опрашивать USB устройства с интервалом.
2. При обнаружении подключенного диска, проверить его соответствие по наличию определенных папок и файлов.
3. Если диск отвечает заданным требованиям, то выполнить ряд скриптов и программ.
4. Продолжать отслеживать подключение USB дисков.
5. Если подключился другой диск, выполнить для него пункты 2, 3.
6. Выполнить пункт 3 только один раз, но при отключении и повторном подключении флешки, так же выполнить пункт 3 однократно.
7. Не создавать на флешке никаких файлов для реализации пунктов 2, 3.
В общем, нужно следить за подключением флешек, и запускать скрипты один раз при подключении флешки.
Основная загвоздка в первом пункте.
Пока что моих мозгов хватило сделать следующее:
Но как двигаться дальше, что бы все отработало один раз и продолжило отслеживать подключение USB дисков, для меня не понятно. Я в этом деле не опытен.
Пункты 3-7 реализованы при помощи USB Safely Remove, и давно написанного скрипта для запуска всего остального. USB Safely Remove обнаруживает диск, и передает букву диска в мой батник в виде параметра. Но огромный минус этой программы то что она медлительная, и так же есть ряд других недостатков. Иногда она вылетает. Порой быстрей все сделать вручную касательно выполнения операций с флешкой.
Все это нужно по работе, для уменьшения рутины, а не для всякого взлома и иже с этим.
На текущем этапе нужен аналог USB Safely Remove только в виде скрипта CMD.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Как написать скрипт на флешке, который будет сам запускаться, при ее подключении на любой платформе (win, mac, lin)?
У меня есть куча sd и usb флешек, и иногда мои друзья любят их взять на короткое (очень продолжительное время), причем без моего ведома. И я вот через неделю не многу найти все свои флешки.
Я хочу написать скрипт, поместить его на флешку, и чтоб он сам запускался, при подключении флешки к пк. Скрипт простой, аля обычный GET запрос на какой нибудь мой example.com/flash_id=1. Таким образом, я буду знать, что моя флешка где-то «гуляет».
Таким образом, я буду знать, что моя флешка где-то «гуляет».
Никак.
Скрипт это программа, а программа сама не может запуститься, ее должен кто-то запустить.
Сама ОС или пользователь
Это надо задания операционной системе давать на запуск определенной программы при определенных событиях, иначе никак.
Гуглить про badusb.
Можно сделать флешку с дополнительной нагрузкой, то есть флешка будет представляться в системе и как флешка и как клавиатура и например посылая комбинацию кнопок запускать командную строку в которой выполнять заданную команду.
Само собой таки вещи считаются зловредными и антивирусы на это реагируют.
Короче, тут большое поле для полёта 🙂
P.S. Антивирусы могут на это ругаться.
Кто-то уже такое делал? Подскажите пожалуйста.
Билл Гейтс такое делал. Называлось Windows’95, Windows’98, Windows XP.
Наконец весь мир так завалило вирусней, что даже он убрал автозапуск по умолчанию.
И больше так никто не делал.
Выполнение скрипта при вставке флешки
Как я могу написать сценарий, который запускает событие?
Когда я вставляю флешку, Ubuntu монтирует ее и автоматически открывает Nautilus. Когда это происходит с определенной флешкой, я бы хотел открыть вторую вкладку с определенной папкой.
Я не думаю, что это можно сделать с помощью скрипта Nautilus, но как я могу сделать это с помощью скрипта Linux или расширения Nautilus?
1 ответ
Если вы запустите скрипт ниже в фоновом режиме, он проверит наличие подключенных томов. Если подключен один из определенных вами дисков, он автоматически откроет заданную папку в nautilus.
Небольшая проблема заключалась в том, что nautilus не поддерживает открытие каталога на новой вкладке из командной строки, только в новом окне. Это означает, что начальное окно, которое появляется, если вы вставляете USB-диск, должно быть изящно закрыто. Скрипт использует wmctrl чтобы сделать это, в тот момент, когда выбранная вами папка откроется.
Возможно, вам придется сначала установить его:
Сценарий
Как пользоваться
Скопируйте скрипт в пустой файл
Установите ваши диски и папки
В разделе заголовка скрипта измените строку:
где каждый кортеж представляет диск (имя) и папку внутри диска, которая должна быть открыта. Я оставил свои «тестовые» имена в качестве примера.
Если вы не уверены в точном названии вашего диска, запустите lsblk чтобы увидеть имя (без предшествующего пути к точке монтирования)
Сохранить скрипт как open_folder.py и запустите его командой:
Если все работает, как вы ожидали, добавьте его в свои приложения автозагрузки
Как это устроено
Другие файловые менеджеры
Я проверил это на pcmanfm (Lubuntu) и thunar (Xubuntu) и, как и ожидалось, в обоих случаях работает нормально.
Если вы хотите использовать его на Lubuntu или Xubuntu, измените строку:
Конечно, убедитесь wmctrl установлено
Скорее всего, это будет работать и на других файловых менеджерах.
Обобщенная версия скрипта
Версия скрипта выше специально для одной ситуации. Чтобы иметь возможность использовать сценарий в более широком диапазоне целей (для запуска любой команды при подключении определенного диска, например, для ее резервного копирования), может быть полезна приведенная ниже версия.
В этом случае в разделе заголовка скрипта кортежи представляют:
см. настройку «тест» в скрипте ниже.
Сценарий
Как пользоваться
Скопируйте скрипт в пустой файл
Установите ваши диски и команды
Сохранить скрипт как drive_run.py и запустите его командой:
Если все работает, как вы ожидали, добавьте его в свои приложения автозагрузки
Как запустить скрипт при монтировании конкретной флешки?
Есть ли способ запустить скрипт при подключении определенного USB-устройства?
Я храню свои видео на отдельном USB и хотел бы запустить скрипт, который бы монтировал папку видео на устройстве USB в папку в домашней папке.
Затем вам нужно запустить / включить сервис:
sudo systemctl start your.service
sudo systemctl enable your.service
После монтирования systemd запускает ваш триггерный скрипт. Преимущество перед правилом udev заключается в том, что скрипт действительно запускается после монтирования, а не после добавления системного устройства.
Вариант использования : у меня есть зашифрованный раздел, который я хочу сделать резервную копию автоматически. После добавления устройства я должен ввести пароль. Если я подключил скрипт резервного копирования к udev, он попытается запустить его в тот момент, когда я набираю пароль, что не удастся.
Создайте новый файл правил udev в /etc/udev/rules.d/ via sudoedit /etc/udev/rules.d/100-mount-videos.rules и добавьте туда новое правило следующим образом:
Дополнение от Аллана: Долгосрочные сценарии могут блокировать «все дальнейшие события для этого или зависимого устройства». Моя страница руководства Mint также утверждает: «Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события». Нет подсказок о том, где можно приобрести навык для этого.
Ответ от Оли: Оберните это так: https://askubuntu.com/a/106359/449
Другой способ получить значения для ATTRS
Найдите, где установлен ваш usb:
это показывает что-то вроде следующего:
Используйте udevadm, чтобы получить информацию об этом устройстве:
вывод должен быть что-то вроде:
Теперь используйте идентификатор модели для ATTRS
В Nautilus под Edit> Preferences> Media вы можете выбрать «другое действие», а не «costum command». для различных видов носителей, которые будут выполнены. К тому времени USB-накопитель уже смонтирован, но я полагаю, что вы все равно можете связать его (с помощью команды costum) с папкой, в которой вы хотите, чтобы накопитель появился. Я не мог сказать, проще ли это или лучше, чем использовать udev.
Если вы не хотите вмешиваться в контроль вашего файлового менеджера (nautilus, konquerer, gnome и т. Д.) За монтированием и размонтированием вашего устройства, я советую не идти по пути udev.
Вместо этого используйте udisks-glue, если ваша система использует udisks (почти все так делают).
После установки просто создайте файл конфигурации
/.udisks-glue.conf в вашем домашнем каталоге, как это.
Мой следующий пример обновляет данные GPS-Assist на моей камере каждый раз, когда я подключаю SD-карту.
После этого убедитесь, что udisks-glue запускается при загрузке или входе в систему. Т.е. через приложения запуска gnome
Использование правил udev для запуска скрипта при вставке USB
Я пытаюсь настроить скрипт для запуска при каждом подключении USB-устройства. Я создал файл /etc/udev/rules.d/90-local.rules и добавил следующее правило:
Проблема в том, что когда диск подключен, ничего не происходит. Сценарий, для целей отладки, настроен на отправку уведомления с уведомлением-отправкой, которое установлено и отлично работает с терминала.
Путь к сценарию правильный, так как я выполнил эту точную команду в терминале без проблем.
У меня такая же проблема. Это сработало для меня:
Кроме того, я не знаю, что такое SYSFS, но я бы предпочел использовать свойства ATTR.
notify-send требует доступа к вашей сеансовой шине DBus, которая не может быть по двум причинам:
Нет информации о сеансе. Когда скрипт запускается udev, он ничего не знает о том, где вы вошли в систему или вообще вошли в нее. Многопользовательское с X11 все еще сложно, но переключение пользователей работает как для X11, так и для консольных сессий. Многие люди также используют SSH, VNC и NX по сети.
Запрещено политикой DBus. Даже если ваш сценарий каким-то образом обнаружит ваш сеанс X11, он не сможет отправлять уведомления из-за запуска сценария root вместо вашей учетной записи пользователя.
Вместо этого вы можете попытаться сопоставить устройство по идентификатору производителя и продукта. Следующее пользовательское правило работает для меня:
Вы можете увидеть idVendor и idProduct в выводе lsusb или dmesg после подключения устройства.
Правило теперь тоже короче.
Возможно, вам может понадобиться добавить sleep внутри скрипта, чтобы дать USB-устройству возможность «успокоиться»? Например, модемы usb 3g, переключение режимов для получения / dev / ttyUSB для запуска и запуска ядром.