Rom*_*n M 59 linux x11 xserver
有没有办法找出当前会话用户是否正在运行Xserver(在Linux下)?
我开始做的事情如下:
ps -e | grep X
Run Code Online (Sandbox Code Playgroud)
但这并不总是有效
我尝试的另一件事是检查$DISPLAY变量
有没有其他方法来检查这个?
编辑:有人建议使用$ DISPLAY变量,但如果用户摆弄这个变量怎么办?如果他试图做某事并改变这个变量然后当我检查它时,它不再反映系统的准确状态.有没有具体的方法来做到总会得到正确的答案?
我发现它可以以编程方式完成:
#include <X11/Xlib.h>
int main()
{ exit(XOpenDisplay(NULL) ? 0 : 1); }
$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11
Run Code Online (Sandbox Code Playgroud)
但我正在寻找一种脚本方式.
bob*_*ogo 57
我经常需要在运行许多X服务器的服务器上运行X命令,因此ps基础答案不起作用.当然,$DISPLAY必须适当设置.要检查它是否有效,请使用以下xset q某些片段:
if ! xset q &>/dev/null; then
echo "No X server at \$DISPLAY [$DISPLAY]" >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
Ken*_*Ken 17
$ DISPLAY是标准方式.这就是用户如何与程序进行通信,了解使用哪个X服务器(如果有的话).
我用
pidof X && echo "yup X server is running"
Run Code Online (Sandbox Code Playgroud)
pgrep和$ DISPLAY是其他选项.
其他考虑:
su然后$ DISPLAY将不会被设置.改变程序运行环境的事情会使这不起作用.
我不推荐ps -e | grep X因为这会找到procX,它不是X服务器.
我用来判断X是否正在运行的一个技巧是:
telnet 127.0.0.1 6000
如果它连接,你有一个X服务器正在运行,它接受入站TCP连接(这些天通常不是默认的)....
xprop -root &> /dev/null
Run Code Online (Sandbox Code Playgroud)
...是我尝试过的测试“X-able”情况的真实命令。而且,它几乎可以保证在任何运行 X 的系统上,当然,如果没有找到该命令就会失败,所以即使它不存在,您也几乎可以假设没有 X。(这就是我使用 &> 而不是 > 的原因)