Как запустить скрипт при монтировании конкретной флешки?

Попробуйте этот плагин для Chrome. Он позволяет изменить размер флеш-элемента веб-страницы в соответствии с размером окна Chrome, на той же странице или в новой вкладке.

45
задан 19.05.2020, 09:51

7 ответов

Существует гораздо более приятное решение с systemd . Вы создаете сервис, который зависит от ваших медиа, например: /etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/home/you/bin/triggerScript.sh

[Install]
WantedBy=media-YourMediaLabel.mount

Затем вам нужно запустить / включить сервис:
sudo systemctl start your.service
[117 ] sudo systemctl enable your.service

После того, как mount systemd запустит ваш триггерный скрипт. Преимущество перед правилом udev заключается в том, что скрипт действительно запускается после монтирования, а не после добавления системного устройства.

Вариант использования : у меня есть зашифрованный раздел, который я хочу сделать резервную копию автоматически. После добавления устройства я должен ввести пароль. Если я подключил скрипт резервного копирования к udev, он попытается запустить его в тот момент, когда я набираю пароль, что не получится.

Ресурс: Сценарии с udev

Примечание: Вы можете найти свой блок устройства с: sudo systemctl list-units -t mount

0
ответ дан 19.05.2020, 09:51

Другой способ получить значения для ATTRS {idVendor} и ATTRS {idProduct} (протестировано в Ubuntu 12.04):

  1. Найдите, где смонтирован ваш usb:

    [ 110]

    это показывает что-то вроде следующего:

    /dev/sdb on /media/SOMEDIR type vfat ...
    
  2. Используйте udevadm для получения информации об этом устройстве:

    udevadm info -q all -n /dev/sdb | grep -E -i -w '.*VENDOR_ID.*|.*MODEL_ID.*'
    

    вывод должен быть примерно таким: :

    E: ID_MODEL_ID=001a
    E: ID_VENDOR_ID=002b
    
  3. Теперь используйте идентификатор модели для ATTRS {idProduct} и идентификатор поставщика для ATTRS {idVendor}

    ACTION=="add", ATTRS{idVendor}=="002b", ATTRS{idProduct}=="001a" ...
    
0
ответ дан 19.05.2020, 09:52

У ответа @ sumid есть проблема. Вы не должны не запускать службу. Вам просто нужно включить его.

файл: /etc/systemd/system/your.service

[Unit]
Description=My flashdrive script trigger
Requires=media-YourMediaLabel.mount
After=media-YourMediaLabel.mount

[Service]
ExecStart=/any_path_even_inside_the_mount_point/script.sh

[Install]
WantedBy=media-YourMediaLabel.mount

Затем включите службу:

sudo systemctl enable your.service

Вот и все.

Примечание: Вы можете найти свой медиальный ярлык с помощью: sudo systemctl list-units -t mount

Примечание2: Если служба каким-либо образом перестала работать (например, скрипт не является исполняемым), ваша точка монтирования изменится на <old_mount_point_name>1 при следующем подключении USB-устройства. Чтобы решить эту проблему, вам просто нужно выполнить sudo systemctl reset-failed

0
ответ дан 19.05.2020, 09:52

Начните с поиска вашего устройства в lsusb. Запишите идентификатор (например, 0a81:0101)

Создайте новый файл правил udev в /etc/udev/rules.d/ через sudoedit /etc/udev/rules.d/100-mount-videos.rules и добавьте туда новое правило, например:

ACTION=="add", ATTRS{idVendor}=="0a81", ATTRS{idProduct}=="0101", RUN+="/home/your_username/bin/mount_videos.sh"

Обратите внимание, как Я использовал идентификатор из lsusb.

Тогда вам просто нужно написать скрипт для выполнения работы. Простая команда монтирования должна работать. Вам может понадобиться команда sleep 5, чтобы дождаться инициализации файловой системы (если вы оставите gnome для основного монтирования - но вы можете сначала смонтировать его, а затем вам может не потребоваться режим сна). [1111 ]

Дополнение от Аллана: Долгосрочные сценарии могут блокировать «все дальнейшие события для этого или зависимого устройства». Моя страница руководства Mint также утверждает: «Долгосрочные задачи должны быть немедленно отсоединены от самого процесса события». Не дается совет о том, где получить навык, чтобы сделать это.

Ответ от Оли: Оберните это так: https://askubuntu.com/a/106359/449

0
ответ дан 19.05.2020, 09:53
0
ответ дан 19.05.2020, 09:53

Если вы не хотите вмешиваться в контроль файлового менеджера (nautilus, konquerer, gnome и т. Д.) Над монтированием и размонтированием вашего устройства, я советую не идти по пути udev.

Вместо этого используйте udisks-glue , если ваша система использует udisks (почти все это делают).

После установки просто создайте файл конфигурации ~/.udisks-glue.conf в своем домашнем каталоге, например, так.

Мой следующий пример обновляет данные GPS-Assist на моей камере каждый раз, когда я подключаю SD-карту.

filter BT16EXTREME {
  optical = false
  partition_table = false
  usage = filesystem
  label = BT16EXTREME
}
match BT16EXTREME {
  post_mount_command = "/home/bernhard/update-gps-assist-data.pl %mount_point"
}

После этого просто убедитесь, что udisks-glue запускается при загрузке или входе в систему. То есть через приложения запуска gnome

0
ответ дан 19.05.2020, 09:53

В «Наутилусе» в меню «Редактирование»> «Установки»> «Мультимедиа» вы можете выбрать «другое действие», а не «команду costum». для различных видов средств массовой информации, которые будут выполнены. К тому времени USB-накопитель уже смонтирован, но я полагаю, что вы все равно можете связать его (с помощью команды costum) с папкой, в которой вы хотите, чтобы накопитель появился. Я не мог сказать, проще ли это или лучше, чем использовать udev.

0
ответ дан 19.05.2020, 09:54
  • 1
    команда носит костюм? или костюм? – John Papa 19.05.2020, 09:54

Теги

Похожие вопросы