$DISPLAY
現在ユーザーが開いているすべての変数を取得する方法は?一般的に言えば、:0
新しいディスプレイを開くと他の変数が設定されます。
$DISPLAY
それでは、ユーザーが利用できるすべての変数をどのようにキャプチャしますか?
答え1
DISPLAY
GNU/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-spec
X11ディスプレイターゲット環境で開始されたことを意味します。転送。some-display-spec
sshd
ssh
ただし、これはコマンドを実行するプロセスが必ずしもそのサーバーに接続してサービスを要求する(ユーザーと対話する)ことを意味するわけではありません。これは、おそらく他の方法(たとえば、端末エミュレータの仲介)でユーザーと対話するためです。 )。またはオーディオを介して...)またはユーザーとはまったく対話しないからです。 X11 サーバーに接続することもできますが、たとえば、$DISPLAY
//... オプションの一部を使用して別のサーバーに接続するように指示されるので、その変数を無視します。また、これらのオプションを使用すると、プロセスは環境に変数を追加することなくXサーバーに接続できます。-display
--display
-d
DISPLAY
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ディスプレイサーバーで作業したとき、ディスプレイサーバーから数千マイル/キロメートル離れたシステムでクライアントを実行することが可能でした。
したがって、ユーザーが使用できるすべてのディスプレイサーバーを一覧表示することはできません。特定の適用可能な標準セットがない限り。