Команда "уведомить-отправить" не работает в супервизоре

Моя операционная система Manjora17.1.12, версия Python 3.7.0и версия руководителя 3.3.4, У меня есть скрипт Python, он просто показывает уведомление. Код является:

import os

os.system('notify-send hello')

Конфигурация супервизора:

[program:test_notify]
directory=/home/zz
command=python -u test_notify.py
stdout_logfile = /home/zz/supervisord.d/log/test_notify.log
stderr_logfile = /home/zz/supervisord.d/log/test_notify.log

Но когда я выполняю скрипт python с супервизором, он не показывает уведомление.

1 ответ

Решение

Нужные переменные среды должны быть установлены (DISPLAY & DBUS_SESSION_BUS_ADDRESS). Вы можете сделать это разными способами, в зависимости от ваших потребностей, например, например,

а) для каждого подпроцесса

import os

os.system('DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send hello')

б) в сценарии глобально

import os

os.environ['DISPLAY'] = ':0'
os.environ['DBUS_SESSION_BUS_ADDRESS'] = 'unix:path=/run/user/1000/bus'
os.system('notify-send hello')

в) в конфигурации супервизора для каждой программы

[program:test_notify]
;
; your variables
;
user=john
environment=DISPLAY=":0",DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"

В приведенных выше примерах есть пара предположений (вы можете изменить эти параметры соответствующим образом):

  • скрипт запускается как пользователь john
  • UID пользователя john 1000
  • уведомление появляется на дисплее:0

Чтобы запустить скрипт от имени root и показать уведомление обычному пользователю, используйте sudo, как описано в Arch wiki Desktop_notifications.

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