コンピュータに開いているすべてのモニタを一覧表示するコマンドはありますか?

コンピュータに開いているすべてのモニタを一覧表示するコマンドはありますか?

SSHを介して自分のコンピュータにローカルに接続している場合(尋ねないでください。回避策です)、以下を実行しないとグラフィカルアプリケーションを起動できません。

export DISPLAY=:0.0

最初に実行してからグラフィックアプリケーションを実行すると、すべてが機能します。それ以外の場合は機能せず、接続するモニターはありません。

マシンで利用可能なすべてのディスプレイ(たとえば、すべての可能な値)を一覧表示するコマンドはありますか?

答え1

SSH経由でX接続を転送するには、サーバーとクライアント側の両方でそれを有効にする必要があります。 (ディストリビューションによってはデフォルトで有効またはX11Forwarding yes無効にすることができます.) サーバー側で/etc/sshd_config(または/etc/ssh/sshd_config設定ファイルがある場合はどこでも)、クライアント側は-X次のオプションを渡します。ssh注文するForwardX11または~/.ssh/config

を実行すると(おそらく)yesがssh -X localhost表示されます。一方、SSH経由で接続されていない場合の値です。 (この部分は省略可能です。画面番号ですが、複数の画面を使用する場合はほとんどありません。)$DISPLAYlocalhost:10.0:0.0.0

  • 古いコンテンツなしでローカルに表示されます:
  • TCPディスプレイ、:

を使用すると、ssh -X localhost2台のモニターを介してXサーバーにアクセスできますが、アプリケーションは:NUMBERローカルソケットと共有メモリーを介してサーバーにアクセスする方法と、低速で一部の拡張機能が無効なHOSTNAME:NUMBERTCPを介してサーバーにアクセスする方法など、さまざまな方法を使用します。

Xサーバーにアクセスするには、通常、裏面のファイルに保存されるCookieと呼ばれる認証形式が必要です~/.Xauthority。 SSHを使用して別のユーザーアカウントにアクセスしたり、ディストリビューションでCookieを別のファイルに保存したりすると、DISPLAY=:0SSHセッション内では機能しない可能性があります(ただし、ssh -Xサーバーで有効にすると機能します。決してXAUTHORITY行われません)。混乱が必要なときssh -X)。これが問題なら、必要なものXAUTHORITY環境変数の設定または他のユーザーのCookieをインポートする

実際の質問に答えるには:

  • ローカルディスプレイはのソケットに対応します/tmp/.X11-unix

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • リモートディスプレイは、開いているTCPポート6000以上に対応します。システムMのディスプレイ番号Nにアクセスするには、システムMのTCPポート6000 + Nに接続する必要があります。機械M自体から:

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (この箇条書きの残りの部分は学問的興味のためだけのものです。)

    他のシステムでnmap -p 6000-6099 host_name開いているTCPポートの一般的な範囲を調べることができます。現在、特にループバックインターフェイスの外部でTCPソケットを受信するXサーバーはほとんどありません。

    厳密に言えば、他のアプリケーションは、Xサーバーで一般的に使用されるポート範囲を使用できます。ポートが開いているプログラムを確認して、Xサーバーがリッスンしているかどうかを確認できます。

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    このようなあいまいな内容が表示された場合は、sshdXサーバーであるか、単なる偶然の一致であるかはわかりません。

答え2

yesの最初のパラメータを表示しますXorg。その後、それをps解決することができますXorg

[braga@coleman teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

awkその後、必要な形式に変換できます。

答え3

# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[編集:これがキャッチできることを確認するためにXnestのインスタンスを実行しました。しかし、ログインシェルだけをキャプチャしません(「w」は「who」の略です)。私の図面ボードに戻ります。 ] [編集:見つかりました:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]

答え4

この/tmpフォルダにはセッション番号を表す.X??-lockファイルも含まれています。??

セッション番号を再利用するには削除する必要があります。

ls -a正常に使用されていることがわかり、aで始まるファイルは.隠されています。

関連情報