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

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

我开始的事情如下:

ps -e | grep X 

但这并不总是有效

还有一件事我试着检查$DISPLAYvariables

有没有其他的方法来检查这个?

编辑:有人build议使用$ DISPLAYvariables,但如果用户摆弄这个variables呢? 如果他试图做某件事情并改变这个variables,那么当我检查它时,它不再反映系统的准确状态。 有没有具体的方式来做到这一点,总是会返回正确的答案?

我发现它可以通过编程来完成:

 #include <X11/Xlib.h> int main() { exit(XOpenDisplay(NULL) ? 0 : 1); } $ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

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

我经常需要在运行多个X服务器的服务器上运行X命令,因此基于ps的答案不起作用。 自然, $DISPLAY必须适当设置。 要检查这是否有效,请在以下片段中使用xset q

 if ! xset q &>/dev/null; then echo "No X server at \$DISPLAY [$DISPLAY]" >&2 exit 1 fi 

$ DISPLAY是标准的方法。 这就是用户如何与使用哪个X服务器的程序进行通信(如果有的话)。

我用来判断X是否运行的一个技巧是:

telnet 127.0.0.1 6000

如果它连接,你有一个X服务器运行,并接受入站TCP连接(通常不是默认这些天)….

我用

 pidof X && echo "yup X server is running" 

pgrep和$ DISPLAY是其他选项。

其他考虑:

那么$ DISPLAY将不会被设置。 改变程序运行环境的东西可以使这个不起作用。

我不推荐ps -e | grep X,因为这将找到procX,这不是X服务器。

运行xdpyinfo并查看它是否返回零

1)

 #netstat -lp | grep -ix
 tcp 0 0 *:x11 *:* LISTEN 2937 / X          
 tcp6 0 0 [::]:x11 [::]:* LISTEN 2937 / X          
主动UNIX域套接字(仅限服务器)
 unix 2 [ACC] STREAM LISTENING 8940 2937 / X @ / tmp / .X11-unix / X0
 unix 2 [ACC] STREAM LISTENING 8941 2937 / X /tmp/.X11-unix/X0
 #

2)nmap

 #nmap localhost | grep -ix
 6000 / tcp打开X11
 #
 xprop -root &> /dev/null 

…是我尝试过的真正的命令来测试一个“X能”的情况。 而且,它几乎保证在任何运行X的系统上,当然,如果命令失败了,那么即使它不存在,也可以假定没有X。 (这就是为什么我使用&>而不是>)

首先,您需要确保您的服务器上正确安装了基础X11软件包:

 rpm -qa | grep xorg-x11-xauth 

如果不是的话,请安装所有软件包:

 sudo yum install xorg-x11-xauth xterm 

确保openssh服务器配置为转发x11连接:

 edit file : vim /etc/ssh/sshd_config X11Forwarding yes 

注意:如果该行前面有一个注释(#)或设置为否,则更新文件以匹配上面的内容,然后重新启动您的ssh服务器守护进程(请小心 – 如果发生错误,您可能会将自己锁定服务器)

 sudo /etc/init.d/sshd restart 

现在,配置SSH应用程序来转发X11请求:

 ssh -Y your_username@your_server.your_domain.com 

我写了xdpyprobe程序是专门用于这个目的。 与xset,xdpyinfo和其他常规工具不同,它不会执行任何额外的操作(只检查X服务器并退出),并且可能不会产生任何输出(如果指定了“-q”选项)。

这是用于检查的PHP脚本。

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

类似的命令也可以在shell脚本中使用。 像pidof命令一样。

 if [[ $DISPLAY ]]; then … fi