Уведомление-отправка не работает в скрипте Python, запускаемом с помощью sudo - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу скрипт на 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 Ответ

0 голосов
/ 16 февраля 2019

Итак, после небольшого исследования я нашел решение:

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)
...