Уведомление-отправка не работает в скрипте Python, запускаемом с помощью sudo
Я пишу скрипт на python, который запускается с разрешениями sudo. В какой-то момент я хотел бы отправить уведомление пользователю. Я заметил, что notify-send не работает как пользователь root, поэтому я попытался запустить его как фактический пользователь, выполнив su $SUDO_USER -c notify-send ...
, но это тоже не работает.
Первая из следующих функций работает при запуске без прав sudo. Никто из них не работает, когда работает с sudo. Есть идеи почему?
def notify(message):
subprocess.run(['notify-send', '-i', 'utilities-terminal', 'Notification Title', message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
def notifySudo(message):
subprocess.run(['su', os.environ['SUDO_USER'], '-c', 'notify-send', '-i', 'utilities-terminal', 'Notification Title', message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
1 ответ
Решение
После небольшого исследования я нашел решение:
import os
def notify(title, message):
userID = subprocess.run(['id', '-u', os.environ['SUDO_USER']],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True).stdout.decode("utf-8").replace('\n', '')
subprocess.run(['sudo', '-u', os.environ['SUDO_USER'], 'DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/{}/bus'.format(userID),
'notify-send', '-i', 'utilities-terminal', title, message],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)