如何获取默认的DISPLAY变量?

如何获取默认的DISPLAY变量?

创建新的 shell 会话时,DISPLAY会相应地设置该变量(可以是:0:1localhost:0等)。如果我不小心弄乱了DISPLAY变量,通常我希望将其重置为默认值(该值根据设置而变化)。

我的问题是,如何以编程方式(通过 bash 脚本)获取DISPLAY变量就像创建新 shell 时一样

其他问题/答案通常只涉及硬编码export DISPLAY=0:0或类似的东西,这不是我想要的(因为正确的DISPLAY变量可能不同)

我天真的尝试

bash -c 'echo $DISPLAY'

不起作用,因为子 shell 继承了当前的 shell 变量

答案1

你可以检查一下/proc/${pid}/environ。其中包含进程的初始环境。

这里,$$是正在运行的 shell 的 pid。另请注意,变量是用零字符分隔的。选项-ecat导致它打印不可打印的字符(如 nil 字符),并将sednil 字符的表示形式转换为换行符。

$ cat -e "/proc/$$/environ" | sed 's/\^@/\n/g' | grep DISPLAY
DISPLAY=:0.0

$ export DISPLAY=broken

$ cat -e "/proc/$$/environ" | sed 's/\^@/\n/g' | grep DISPLAY
DISPLAY=:0.0

答案2

我可以获得正确结果的一种方法DISPLAY是查询DISPLAY分配给gnome-terminal-server以下内容的变量

cat /proc/$(pidof "gnome-terminal-server")/environ | tr '\0' '\n' | grep ^DISPLAY=

相关内容