Я использую Linux Mint 13 MATE и пытаюсь настроить уведомления при подключении / отключении устройств.
Прежде всего, я нашел пакет udev-notify , но, к сожалению, он почти не работает для меня: он работает очень мало времени (1-2 минуты), а затем, если я подключаю / отключаю любое устройство, он вылетает:
Traceback (most recent call last):
File "./udev-notify.py", line 319, in <module>
notification.show()
glib.GError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name :1.1061 was not provided by any .service files
Я не нашел никакого решения, поэтому пришлось его удалить. (также подал отчет об ошибке )
Удивительно, но я не нашел подобных утилит. Затем я попытался написать правила udev, которые должны соответствовать всем устройствам. Я добавил новый файл /etc/udev/rules.d/notify.rules
:
ACTION=="add", RUN+="/bin/bash /home/dimon/tmp/device_plug.sh"
ACTION=="remove", RUN+="/bin/bash /home/dimon/tmp/device_unplug.sh"
И два сценария:
device_plug.sh:
#!/bin/bash
export DISPLAY=":0"
notify-send "device plugged"
/usr/bin/play -q /path/to/plug_sound.wav &
device_unplug.sh:
#!/bin/bash
export DISPLAY=":0"
notify-send "device unplugged"
/usr/bin/play -q /path/to/unplug_sound.wav &
Это работает, но работает очень глупо. Мои вопросы:
- Как получить фактическое название подключенного устройства, так же, как я вижу в
lsusb
выводе? В настоящее время я только что получил уведомления, такие как «подключен» и «отключен», и я не могу найти, как я могу получить имя устройства в своем правиле udev (Если я могу, то я передам его в свой сценарий как параметр) - В настоящее время слишком много уведомлений активировано. Скажем, когда я подключаю флешку, я получаю около 15 уведомлений! Но, если я запускаю
lsusb
, подключенный USB-накопитель отображается как одно устройство. Так что, похоже, мне нужно добавить еще несколько аргументов в фильтр правил, но я не могу это выяснить. - Возможно, есть какое-то лучшее решение для уведомлений о подключении / отключении устройства? Пожалуйста, предложите, если вы что-то знаете.
источник
pyudev
для получения уведомлений и не требует дополнительных скриптов/etc/udev
.Добавьте следующие строки перед строками визуальных уведомлений, чтобы дать сценарию представление о том, на каком экране X он должен запускаться
notify-send
(или в любом другом приложении X):Конечно, вы должны изменить вторую строку в соответствии с вашей рабочей средой (или менеджером отображения). Эта строка отлично работает для Ubuntu 16.04, которая использует Unity в качестве рабочего стола и Lightdm в качестве диспетчера отображения.
(из этого поста )
источник