使用 sudo 通知发送在 python 脚本 运行 中不起作用
Notify-send not working in python script run with sudo
我正在编写 python 具有 sudo 权限的 运行 脚本。在某些时候,我想向用户发送通知。我注意到 notify-send 不能以 root 用户身份工作,所以我尝试通过 su $SUDO_USER -c notify-send ...
以实际用户身份 运行 它,但这也不起作用。
以下第一个函数在 运行 没有 sudo 权限的情况下有效。当 运行 使用 sudo 时,None 个可以工作。知道为什么吗?
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)
经过一番研究,我找到了解决方案:
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)
我正在编写 python 具有 sudo 权限的 运行 脚本。在某些时候,我想向用户发送通知。我注意到 notify-send 不能以 root 用户身份工作,所以我尝试通过 su $SUDO_USER -c notify-send ...
以实际用户身份 运行 它,但这也不起作用。
以下第一个函数在 运行 没有 sudo 权限的情况下有效。当 运行 使用 sudo 时,None 个可以工作。知道为什么吗?
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)
经过一番研究,我找到了解决方案:
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)