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経由で接続されていない場合の値です。 (この部分は省略可能です。画面番号ですが、複数の画面を使用する場合はほとんどありません。)$DISPLAY
localhost:10.0
:0.0
.0
- 古いコンテンツなしでローカルに表示されます
:
。 - TCPディスプレイ、
:
。
を使用すると、ssh -X localhost
2台のモニターを介してXサーバーにアクセスできますが、アプリケーションは:NUMBER
ローカルソケットと共有メモリーを介してサーバーにアクセスする方法と、低速で一部の拡張機能が無効なHOSTNAME:NUMBER
TCPを介してサーバーにアクセスする方法など、さまざまな方法を使用します。
Xサーバーにアクセスするには、通常、裏面のファイルに保存されるCookieと呼ばれる認証形式が必要です~/.Xauthority
。 SSHを使用して別のユーザーアカウントにアクセスしたり、ディストリビューションでCookieを別のファイルに保存したりすると、DISPLAY=:0
SSHセッション内では機能しない可能性があります(ただし、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}'
このようなあいまいな内容が表示された場合は、
sshd
Xサーバーであるか、単なる偶然の一致であるかはわかりません。
答え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で始まるファイルは.
隠されています。