有没有办法找出当前会话用户是否正在运行Xserver(在Linux下)?
我开始做的事情如下:
ps -e | grep X
但这并不总是有效
我尝试的另一件事是检查$DISPLAY
变量
有没有其他方法来检查这个?
编辑:有人建议使用$ DISPLAY变量,但如果用户摆弄这个变量怎么办?如果他试图做某事并改变这个变量然后当我检查它时,它不再反映系统的准确状态.有没有具体的方法来做到总会得到正确的答案?
我发现它可以以编程方式完成:
#includeint 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服务器(如果有的话).
我用
pidof X && echo "yup X server is running"
pgrep和$ DISPLAY是其他选项.
其他考虑:
su然后$ DISPLAY将不会被设置.改变程序运行环境的事情会使这不起作用.
我不推荐ps -e | grep X因为这会找到procX,它不是X服务器.
我用来判断X是否正在运行的一个技巧是:
telnet 127.0.0.1 6000
如果它连接,你有一个X服务器正在运行,它接受入站TCP连接(这些天通常不是默认的)....
您可以使用xdpyinfo
(可以通过安装apt-get install x11-utils
).