如何检查X服务器是否正在运行?

90

有没有办法找出当前会话用户是否正在运行 X 服务器(在 Linux 下)?

我已经开始尝试以下内容:

ps -e | grep X 

但这并不总是有效。

我尝试的另一件事是检查$DISPLAY变量。

还有其他的检查方法吗?

编辑:

有些人建议使用$DISPLAY变量,但如果用户篡改了此变量怎么办?如果他尝试做某些事情并更改此变量,那么当我检查它时,它就不再反映系统的准确状态了。

是否没有特定的方法可以始终返回正确的答案?

我发现可以通过编程方式实现:

#include <X11/Xlib.h> 
int main()
    { exit(XOpenDisplay(NULL) ? 0 : 1);  } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

但我正在寻找一种脚本方式。


2
为什么“ps -e | grep X”不总是有效? - stephendl
3
为什么 $DISPLAY 没有作用? - Matthew Marshall
@stephendl:我发现在某些情况下,X正在运行,但用户通过没有X的终端连接。 @matthew:如果用户摆弄这个变量,它不再反映系统的实际状态怎么办? - RomanM
6
再挑剔一点,XOpenDisplay函数在内部使用DISPLAY环境变量。 - Anya Shenanigans
@RomanM:我建议您接受得票最多的答案,即使用“xset”的答案。 - jamadagni
显示剩余3条评论
12个回答

1
if [[ $DISPLAY ]]; thenfi

0

这是用于检查的 PHP 脚本。

$xsession = `pidof X`;
if (!$xsession) {
    echo "There is no active X session, aborting..\n";
    exit;
}

类似的命令也可以在shell脚本中使用,例如pidof命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接