Пользовательское уведомление от правила udev

Моя цель состоит в том, чтобы инициировать уведомление с пользовательскими действиями, когда определенное устройство хранения смонтировано. Уведомления сделаны в Python с pynotify

Я работаю lsusb для получения idVendor устройства и idProduct параметры и я создаем правило udev /etc/udev/rules.d/100-mount-notifybackup.rules с этим содержанием:

ACTION=="add", SUBSYSTEM=="block", ATTR{partition}=="*", ATTRS{idVendor}=="0xxx", ATTRS{idProduct}=="1xxx", TAG+="systemd", ENV{SYSTEMD_WANTS}+="notify_backup.service"

Когда внешнее устройство хранения данных присоединяется, правило запускает systemd сервис (/etc/systemd/system/notify_backup.service)

[Unit]
Description=notify backup

[Service]
User=your_user
Group=your_user
Type=oneshot
RemainAfterExit=no
ExecStart=/home/your_user/bin/notifybackup.sh

[Install]

этот сервис выполняется notifybackup.sh это запускает скрипт Python

#!/bin/bash

script_name=$0
script_full_path=$(dirname "$0")
/usr/bin/python -v $script_full_path/notify.py > /home/your_user/fileName.txt 2>&1

Сценарий Python:

import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify
from subprocess import call
#call('ls')
#Notify.init("App Name")
#Notify.Notification.new("Hi").show()

def ignore_cb():
    return None

Notify.init("Test Capabilities")
caps = Notify.get_server_caps()

if caps and 'actions' in caps:
    # We support actions, so add a button.
    notification = Notify.Notification.new("Can we use actions?", \
                                         "Yup, we sure do.")
    notification.add_action("ignore", "Ignore", ignore_cb)
else:
    notification = Notify.Notification.new("Can we use actions?", \
                                         "Nope, we don't support actions.")
notification.show()

Уведомление появляется, когда я запускаю скрипт удара, но это дает мне эту ошибку, когда я вставляю устройство хранения:

(process:9357): libnotify-WARNING **: 16:37:48.548: Failed to connect to proxy
Traceback (most recent call last):
  File "/home/gaia/bin/notify.py", line 23, in <module>
    notification.show()
GLib.Error: g-io-error-quark: Cannot autolaunch D-Bus without X11 $DISPLAY (0)

это пытается запустить скрипт Python в оболочке?

1
задан 30 September 2018 в 17:43

1 ответ

  • Как долгий процесс обучения для меня, я поддерживал такие взломы. Как тот для Вашего сценария, вероятно, нужно для адреса DBus.., см. этот ответ:

    Как приостановить воспроизведение VLC, когда наушники разъединяются?

  • Команды действия Udev выполняются в песочнице. Таким образом, это пропускает переменные настольной среды и сервисы. Таким образом, правила Udev не посещены, чтобы использоваться и подключаться непосредственно к GUI и Пользовательской среде.

    Чтобы быть завершенными, проверьте Википедию - Udev для ее целей.

    Я рекомендовал бы делать его тот же путь, как любой разработчик пользовательского приложения должен сделать.. Пользуйтесь библиотекой. Я не забочусь который: низкий уровень один для udev или высокого уровня как udisks2 (для DE GTK)...

  • При рассмотрении того взлома от предполагаемого проектирования системы Вы будете видеть, насколько ужасный это. Как низкоуровневая система могла передать на высоком уровне один!.

0
ответ дан 7 December 2019 в 23:05

Другие вопросы по тегам:

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