82

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

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

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 

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

4

12 に答える 12

76

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

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

編集

一部の人々は、xset$DISPLAYが有効な X サーバーを指していないと判断する前に (多くの場合、トランスポートが tcp/ip の場合)、厄介な時間停止することがあります。もちろん、修正はタイムアウトを使用して、一時停止を受け入れやすい状態に保つことです。たとえば、1 秒です。

if ! timeout 1s xset q &>/dev/null; then
    ⋮
于 2012-08-15T07:52:41.157 に答える
17

$DISPLAY は標準的な方法です。これは、ユーザーがどの X サーバーを使用するかについてプログラムと通信する方法です。

于 2009-03-12T01:38:21.400 に答える
6
xprop -root &> /dev/null 

...これは、「X-able」状況をテストするための、試行錯誤したコマンドです。そして、X を実行しているシステム上に存在することがほぼ保証されています。もちろん、とにかく見つからない場合、コマンドは失敗します。そのため、存在しない場合でも、X も存在しないとほぼ想定できます。(これが、> の代わりに &> を使用する理由です)

于 2014-10-27T15:56:44.903 に答える
4

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

于 2016-04-03T05:12:52.680 に答える
0

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

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

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

于 2016-10-17T10:21:05.347 に答える