如何在取消设置DISPLAY时以编程方式查找DISPLAY的当前值? (用于crontab)

Modified on: Sat, 09 Jun 2018 07:44:23 +0800

我有一个通过cron运行的脚本来更改桌面墙纸。我可以通过导出DISPLAY变量来实现它。

但问题是我担心脚本应该适用于所有系统。 如何在不使用$ DISPLAY的情况下找到X服务器设置的DISPLAY值?

那么如何以编程方式找到DISPLAY的正确值。我只有在DISPLAY=:1时才能使它工作。将其设置为":0"使脚本以

退出

No protocol specified
Cannot open display.
作者:,Ashhar Hasan

最佳答案

你不能确定。你必须做出假设。

假装您是cron,并且您面临最糟糕的情况:一天有多个用户登录,每个用户都在运行多个X会话。你必须猜测用户(很容易,我们正在执行他们的crontab)和用户的X会话之一。

如果我们想假设用户从tty运行一个且只有一个X会话,并获得该会话的$DISPLAY值,我们可以使用w

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     tty1                      16:32    7:15   0.21s  0.19s -zsh
user     tty2     :1               15:52   48:13   2:17   0.08s /sbin/upstart
user     pts/3    :1               16:19    0.00s  0.66s  0.00s w

例如,我在tty1上登录,在tty2(我正在运行X会话)和pts / 3(我正在运行命令的终端)登录。

进行一些解析:

% w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}'
:1

所以,假设以上所有:

0 0 * * * DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}') command

cron执行command并将$DISPLAY设置为在tty的$DISPLAY为用户找到的值。

作者:,kos

相关问答

添加新评论