有没有其他方法可以在不使用 shell 的情况下获取 DISPLAY 环境?

有没有其他方法可以在不使用 shell 的情况下获取 DISPLAY 环境?

我有一个脚本,当 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

相关内容