我有一个脚本,当 incrond 看到监视目录中的更改时,它将被执行。脚本中只有几个可用的环境变量,其余的都被 incrond 清除了。因此,当您想要执行依赖于 X 变量(例如 $DISPLAY)的某些操作时,这就会成为一个问题。所以我想知道是否有可能从脚本内部获取变量 $DISPLAY,而无需从用户 shell 进行查询
答案1
要获取正在运行的进程的环境变量,您需要查看文件系统environ
中的文件proc
。 在您的例子中,它是:
user@host:~$ strings /proc/$(pidof -s Xorg)/environ
XORGCONFIG=/etc/X11/xorg.conf
UPSTART_INSTANCE=
LANG=de_CH.UTF-8
DISPLAY==:0
TERM=linux
PWD=/
UPSTART_JOB=gdm
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
答案2
使用 systemd 登录管理器(有点慢):
#!/bin/bash
user=bac0n
# Cannot find how multiple session is presented.
session=($(loginctl show-user --value -p Sessions $user))
# Get display from the first array element.
display=$(loginctl show-session --value -p Display $session)
echo $display