web-dev-qa-db-ja.com

Xサーバーが実行されているかどうかを確認する方法は?

現在のセッションユーザーがXserverを実行しているかどうかを確認する方法はありますか(Linuxの場合)?

私は次のようなことから始めました:

ps -e | grep X 

しかし、これは常に動作しません

そしてもう1つ試したのは、$DISPLAY変数

これを確認する他の方法はありますか?

編集:一部の人々は$ DISPLAY変数を使用することを提案しましたが、ユーザーがこの変数をいじったらどうなりますか?彼が何かをしようとしてこの変数を変更し、それをチェックすると、システムの正確な状態が反映されなくなったとしたらどうでしょう。常に正しい答えを返す特定の方法はありませんか?

このようにプログラムで実行できることがわかりました。

#include <X11/Xlib.h> 
int main()
    { exit(XOpenDisplay(NULL) ? 0 : 1);  } 

$ gcc -o xprobe xprobe.c -L/usr/X11R6/lib -lX11 

しかし、スクリプトの方法を探しています。

52
Roman M

多くのXサーバーを実行しているサーバーでXコマンドを実行する必要があることが多いので、psベースの回答は機能しません。当然、$DISPLAYは適切に設定する必要があります。それが有効であることを確認するには、次のようなフラグメントでxset qを使用します。

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

$ DISPLAYは標準的な方法です。これは、使用するXサーバーがある場合、ユーザーがプログラムと通信する方法です。

17
Ken

私が使う

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

pgrepと$ DISPLAYは他のオプションです。

その他の考慮事項:

suの場合、$ DISPLAYは設定されません。実行中のプログラムの環境を変更することにより、これが機能しなくなる可能性があります。

Ps -eを推奨しない| grep Xは、XサーバーではないprocXを検出します。

9
Ian Kelling

Xが実行されているかどうかを確認するために使用する1つのトリックは次のとおりです。

telnet 127.0.0.1 6000

接続する場合は、Xサーバーが実行されており、インバウンドを受け入れていますTCP接続(通常はデフォルトではありません)....

8
dicroce

xdpyinfoを使用できます(apt-get install x11-utils経由でインストールできます)。

6
shuckc
xprop -root &> /dev/null 

...「X-able」の状況をテストするための私の試行された真のコマンドです。そして、Xを実行しているすべてのシステムで動作することはほぼ保証されています。もちろん、コマンドが見つからない場合は失敗します。 (だから>の代わりに&>を使用します)

4
osirisgothra

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 -i x 
 6000/tcp open X11 
#
3
vitaly.v.ch

xdpyprobe この目的のためのプログラムを書きました。 xset、xdpyinfo、およびその他の一般的なツールとは異なり、追加のアクションを実行せず(Xサーバーをチェックして終了する)、出力を生成しない場合があります(「-q」オプションを指定した場合)。

2
Alex Kost

まず、基本的な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

次に、X11要求を転送するようにSSHアプリケーションを構成します。

ssh -Y your_username@your_server.your_domain.com
1
if [[ $DISPLAY ]]; then 
  …
fi
1

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

/ usr/lib/Xorgは、Xorgまたはシステム上の適切なコマンドのみを変更できます。

0
oml

これはPHPチェック用のスクリプトです。

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

同様のコマンドは、シェルスクリプトでも使用できます。 pidofコマンドのように。

0
user3607430