以下是我认为我需要了解的其他问题:
来自非 X 会话?(意味着 root 没有登录到 X)
如果多人登录 X,我是否可以自动检测谁在哪个屏幕上,从而以编程方式检测我需要在哪个屏幕上启动应用程序?
我可以以用户身份启动应用程序吗?(好吧,我 99.999% 确定这是肯定的)
我可以检测 X 组的用户是否登录到 X 吗?
我正在使用带有 KDE/Awesome WM 的 Arch Linux。我正在尝试
notify-send与cron.
我试过设置DISPLAY/XAUTHORITY变量,并notify-send使用“sudo -u”运行,但都没有结果。
我能够从会话中以交互方式调用通知发送并获取通知。
FWIW,cron 作业运行良好,我通过将内容回显到临时文件进行了验证。只是“通知发送”不起作用。
代码:
[matrix@morpheus ~]$ crontab -l
* * * * * /home/matrix/scripts/notify.sh
[matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest
[matrix@morpheus ~]$ cat /tmp/crontest
testing cron
now tested notify-send
[matrix@morpheus ~]$
Run Code Online (Sandbox Code Playgroud)
如您所见,通知发送之前和之后的回声有效。
我也试过设置DISPLAY=:0.0
更新:我搜索了一些,发现需要设置DBUS_SESSION_BUS_ADDRESS。在使用我从交互式会话中获得的值对其进行硬编码后,屏幕上每分钟都会弹出一个小小的“你好”消息!
但问题是这个变量不是永久的,所以我会尝试那里建议的命名管道解决方案。
[matrix@morpheus ~]$ cat scripts/notify.sh
#!/bin/bash …Run Code Online (Sandbox Code Playgroud) 可能的重复:
在所有正在运行的 X 显示器上显示通知
作为 root,我试图在远程服务器上执行一个命令,向用户弹出一个消息窗口;问题是,如果没有 su - user(因为很多用户花费太多时间),如何获得任何用户的正确 DISPLAY 值?