Spa*_*awk 12 users sudo gnome-keyring
我正在尝试定期重新启动一些程序(mail-notification
和stalonetray
),因为它们似乎经常死机。我想设置在 NetworkManager 重新连接时重新启动它们。因此,我让它们由 中的脚本触发/etc/NetworkManager/dispatcher.d/
。
我可以创建一个脚本,如下所示。
#!/bin/bash
sudo -u foo_user pkill mail-notificati -x
sudo -u foo_user DISPLAY=:0 mail-notification &
Run Code Online (Sandbox Code Playgroud)
如果我直接以用户身份运行它,效果很好。但是,如果我从 root 的脚本调用它,它就会失败。系统提示我输入密码mail-notification
;它无法读取 Gnome 密钥环。
我怎样才能以foo_user
各种方式运行这个程序?
alm*_*ste 12
要以其他用户身份运行命令,您可以使用以下命令:
runuser -u user -- command
只能由 root 使用以作为另一个用户运行命令。
不需要身份验证。
不创建日志消息。
存在权限限制和问题。
su - user -c command
任何用户都可以使用。
需要作为目标用户进行身份验证。在或
中创建消息。/var/log/auth.log
/var/log/secure
sudo -u user command
可由具有 root 权限的用户或文件中的用户使用sudoers
。
需要以当前用户(您)身份进行身份验证。在或
中创建消息。/var/log/auth.log
/var/log/secure
pkexec --user user command
任何用户都可以使用。
需要作为目标用户进行身份验证。在或
中创建消息。
替代 GUI 工具,例如或。/var/log/auth.log
/var/log/secure
gksu
gksudo
如果您想以其他用户身份运行 GUI 应用程序,则需要首先允许目标用户连接到您的显示器:
xhost +si:localuser:user
然后使用runuser
///运行该应用程序,
然后使用阻止后续连接:su
sudo
pkexec
xhost
xhost -si:localuser:user
如果您想从不是从 GUI 启动的进程与 GUI 进行交互,则需要设置一些环境变量:至少DISPLAY
,如果它不在默认位置,并且对于许多现代环境来说,也XAUTHORITY
可能需要设置一些环境变量。您需要设置的DBUS_SESSION_BUS_ADDRESS
程序。
但解决您的问题的更可靠方法是不从 NetworkManager 重新启动这些程序。除了成功启动它们的困难之外,您还需要担心您是否已经登录,以及是否可能有其他用户和其他显示需要考虑,等等。相反,终止这些程序,但不要重新启动它们。在正常会话中,不要直接启动它们,而是从主管启动它们,如果它们死了,主管会重新启动它们。我认为 systemd 包含此功能(但我不知道如何使用它);或者您可以使用专用的管理程序,例如monit、supervise、\xe2\x80\xa6
\n