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

时间:2009-03-12 01:00:47

标签: linux x11 xserver

有没有办法找出当前会话用户是否正在运行Xserver(在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 

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

12 个答案:

答案 0 :(得分:53)

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

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

答案 1 :(得分:17)

$ DISPLAY是标准方式。这就是用户如何与程序进行通信,了解使用哪个X服务器。

答案 2 :(得分:9)

我用

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

pgrep和$ DISPLAY是其他选择。

其他考虑因素:

su然后$ DISPLAY将不会被设置。改变程序运行环境的事情可能会导致这种情况无效。

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

答案 3 :(得分:8)

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

telnet 127.0.0.1 6000

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

答案 4 :(得分:6)

您可以使用xdpyinfo(可以通过apt-get install x11-utils安装)。

答案 5 :(得分:4)

xprop -root &> /dev/null 

...是我的尝试和用于测试“X-able”情况的真实命令。并且,它几乎可以保证在任何运行X的系统上运行,当然,如果没有找到命令就会失败,所以即使它不存在,你也可以假设没有X。 (这就是为什么我使用&amp;&gt;而不是&gt;)

答案 6 :(得分:3)

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
#

答案 7 :(得分:2)

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

答案 8 :(得分:1)

首先,您需要确保在服务器上正确安装基础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

答案 9 :(得分:1)

int main()
{
    vector<int> a = { 1,2,3,4,5,6 };  

    vector<int> b(&a[0], &a[5]);    // what's wrong?  Is it completely wrong this way?

    for (int i = 0; i < 6; i++) {
        cout << b[i] << endl;
    }
    return 0;
}

答案 10 :(得分:0)

这是用于检查的PHP脚本。

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

类似的命令也可以在shell脚本中使用。喜欢pidof命令。

答案 11 :(得分:0)

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。