現在のセッションユーザーが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
しかし、スクリプトの方法を探しています。
多くの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は、XサーバーではないprocXを検出します。
Xが実行されているかどうかを確認するために使用する1つのトリックは次のとおりです。
telnet 127.0.0.1 6000
接続する場合は、Xサーバーが実行されており、インバウンドを受け入れていますTCP接続(通常はデフォルトではありません)....
xdpyinfo
を使用できます(apt-get install x11-utils
経由でインストールできます)。
xprop -root &> /dev/null
...「X-able」の状況をテストするための私の試行された真のコマンドです。そして、Xを実行しているすべてのシステムで動作することはほぼ保証されています。もちろん、コマンドが見つからない場合は失敗します。 (だから>の代わりに&>を使用します)
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 #
xdpyprobe この目的のためのプログラムを書きました。 xset、xdpyinfo、およびその他の一般的なツールとは異なり、追加のアクションを実行せず(Xサーバーをチェックして終了する)、出力を生成しない場合があります(「-q」オプションを指定した場合)。
まず、基本的な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
if [[ $DISPLAY ]]; then
…
fi
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またはシステム上の適切なコマンドのみを変更できます。
これはPHPチェック用のスクリプトです。
$xsession = `pidof X`;
if (!$xsession) {
echo "There is no active X session, aborting..\n";
exit;
}
同様のコマンドは、シェルスクリプトでも使用できます。 pidofコマンドのように。