各ユーザーが使用できるすべての$ DISPLAY変数をキャプチャする方法

各ユーザーが使用できるすべての$ DISPLAY変数をキャプチャする方法

$DISPLAY現在ユーザーが開いているすべての変数を取得する方法は?一般的に言えば、:0新しいディスプレイを開くと他の変数が設定されます。

$DISPLAYそれでは、ユーザーが利用できるすべての変数をどのようにキャプチャしますか?

答え1

DISPLAYGNU/Linux ですべてのプロセスの環境変数値を取得するには、次のようにします。

LC_ALL=C sed -zn 's/^DISPLAY=//p' /proc/*/environ |
  LC_ALL=C sort -zu |
  tr '\0' '\n'

sedこの情報にアクセスするにはasを実行する必要がありますroot。通常のユーザーとして実行すると、そのユーザーとして実行されているプロセスに関する情報のみを取得できます。

環境文字列として渡されたコマンドは、グラフィックX11デスクトップセッションの一部として開始されたか、X11を要求したリモートクライアントからの要求で開始されたため、デフォルトのDISPLAY=some-display-specX11ディスプレイターゲット環境で開始されたことを意味します。転送。some-display-specsshdssh

ただし、これはコマンドを実行するプロセスが必ずしもそのサーバーに接続してサービスを要求する(ユーザーと対話する)ことを意味するわけではありません。これは、おそらく他の方法(たとえば、端末エミュレータの仲介)でユーザーと対話するためです。 )。またはオーディオを介して...)またはユーザーとはまったく対話しないからです。 X11 サーバーに接続することもできますが、たとえば、$DISPLAY//... オプションの一部を使用して別のサーバーに接続するように指示されるので、その変数を無視します。また、これらのオプションを使用すると、プロセスは環境に変数を追加することなくXサーバーに接続できます。-display--display-dDISPLAY


Xorg利用可能なX11ディスプレイがローカルで(、、...などを介して)提供されていることを確認するには、assshdパスを使用してXvncストリームタイプの抽象化またはunixドメインソケットを表示できます。/tmp/.X11-unix/X<number>

LC_ALL=C grep -Po '^(\S+ ){3}0*10000 (?1){3}@?/tmp/.X11-unix/X\K\d+$' /proc/net/unix |
  LC_ALL=C sort -u

tcp/localhost:0または、6000(表示用)からXサーバーを見つけることが期待される6000以上の合理的な数までのTCPポートで:

ss -nlt 'sport >= 6000 && sport < 6030'

いずれにせよ、特定のユーザーがこれらのサーバーに接続してディスプレイサービスを要求できるかどうかは、アクセス制御の構成方法によって異なります。これはさまざまな方法で実行でき、サーバーによって異なる場合があります。

特定のX11ディスプレイのライセンス設定を照会するには、次のようにします。

DISPLAY=that-display xhost

ただし、このコマンドが成功するにはディスプレイにアクセスする権限が必要なため、少し面倒です。

答え2

私はあなたの「に答えています。$DISPLAYユーザーが使用できるすべての変数をどのようにキャプチャできますか?」。

$DISPLAY他の場所に表示されるようにクライアントを常に設定する必要はありません。例えば、

xclock -display :2

アプリケーションがリモートディスプレイにアクセスすることもできます。

xclock -display 192.168.1.55:0

私が1990年代にXディスプレイサーバーで作業したとき、ディスプレイサーバーから数千マイル/キロメートル離れたシステムでクライアントを実行することが可能でした。

したがって、ユーザーが使用できるすべてのディスプレイサーバーを一覧表示することはできません。特定の適用可能な標準セットがない限り

関連情報