linux-如何检查X服务器是否正在运行?
有没有办法找出当前会话用户是否正在运行Xserver(在Linux下)?
我从以下事情开始:
ps -e | grep X
但这并不总是有效
我尝试的另一件事是检查$DISPLAY变量
还有其他方法可以检查吗?
编辑:有人建议使用$ DISPLAY变量,但是如果用户摆弄这个变量怎么办? 如果他尝试执行某项操作并更改此变量,然后在我检查它时,它将不再反映系统的准确状态该怎么办?有没有特定的方法可以始终返回正确的答案?
我发现可以通过编程方式完成:
#include
int main()
{ exit(XOpenDisplay(NULL) ? 0 : 1); }
$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11
但是我正在寻找一种脚本方式。
Roman M asked 2019-11-06T09:28:50Z
12个解决方案
56 votes
我经常需要在运行许多X服务器的服务器上运行X命令,因此基于ps的答案不起作用。 自然,必须适当设置$DISPLAY。 要检查其是否有效,请在某些片段中使用xset q,例如:
if ! xset q &>/dev/null; then
echo "No X server at \$DISPLAY [$DISPLAY]" >&2
exit 1
fi
bobbogo answered 2019-11-06T09:29:08Z
17 votes
$ DISPLAY是标准方式。 这就是用户如何与要使用哪个X服务器的程序进行通信的方式。
Ken answered 2019-11-06T09:29:37Z
9 votes
我用
pidof X && echo "yup X server is running"
pgrep和$ DISPLAY是其他选项。
其他注意事项:
su则不会设置$ DISPLAY。 更改程序运行环境的操作可能会使此操作不起作用。
我不要求ps -e | grep X,因为它将找到procX,而不是X服务器。
Ian Kelling answered 2019-11-06T09:30:26Z
8 votes
我用来判断X是否正在运行的一个技巧是:
telnet 127.0.0.1 6000
如果连接成功,则说明您正在运行X服务器,并且该服务器正在接受入站TCP连接(这些天通常不是默认的)。
dicroce answered 2019-11-06T09:31:09Z
8 votes
您可以使用xdpyinfo(可以通过apt-get install x11-utils安装)。
shuckc answered 2019-11-06T09:31:34Z
4 votes
xprop -root &> /dev/null
...是我尝试过的真实命令,用于测试“ X-able”情况。 而且,几乎可以肯定它可以在任何运行X的系统上运行,当然,如果仍然找不到该命令,则该命令将失败,因此即使该命令不存在,您也可以假设没有X。 (这就是为什么我使用&>而不是>的原因)
osirisgothra answered 2019-11-06T09:32:01Z
3 votes
1)
# netstat -lp|grep -i x
tcp 0 0 *:x11 *:* LISTEN 2937/X
tcp6 0 0 [::]:x11 [::]:* LISTEN 2937/X
Active UNIX domain sockets (only servers)
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 -i x
6000/tcp open X11
#
vitaly.v.ch answered 2019-11-06T09:32:30Z
3 votes
我写了xdpyprobe程序就是为了这个目的。 与xset,xdpyinfo和其他常规工具不同,它不执行任何其他操作(仅检查X服务器并退出),并且可能不产生任何输出(如果指定了“ -q”选项)。
Alex Kost answered 2019-11-06T09:32:58Z
2 votes
首先,您需要确保在服务器上正确安装了基础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
注意:如果该行之前带有注释(#)或设置为no,请更新文件以匹配上述内容,然后重新启动ssh服务器守护程序(请注意此处-如果出错,则可能会将自己锁定在 服务器)
sudo /etc/init.d/sshd restart
现在,配置SSH应用程序以转发X11请求:
ssh -Y your_username@your_server.your_domain.com
Srijan Chaudhary answered 2019-11-06T09:33:50Z
1 votes
if [[ $DISPLAY ]]; then
…
fi
Serge Stroobandt answered 2019-11-06T09:34:09Z
0 votes
这是用于检查的PHP脚本。
$xsession = `pidof X`;
if (!$xsession) {
echo "There is no active X session, aborting..\n";
exit;
}
类似的命令也可以在shell脚本中使用。 就像pidof命令一样。
user3607430 answered 2019-11-06T09:34:42Z
0 votes
bash脚本解决方案:
if ! xset q &>/dev/null; then
echo "No X server at \$DISPLAY [$DISPLAY]" >&2
exit 1
fi
如果从另一个控制台(Ctrl + Alt + F?)或ssh登录,则不起作用。 对我来说,这个解决方案可以在我的Archlinux中使用:
#!/bin/sh
ps aux|grep -v grep|grep "/usr/lib/Xorg"
EXITSTATUS=$?
if [ $EXITSTATUS -eq 0 ]; then
echo "X server running"
exit 1
fi
您只能为Xorg或系统上的正确命令更改/ usr / lib / Xorg。
oml answered 2019-11-06T09:35:21Z