私のコンピューターにローカルでSSHを実行した場合(回避策です)、実行せずにグラフィカルアプリケーションを起動できません。
export DISPLAY=:0.0
これを最初に実行してからグラフィカルアプリケーションを実行すると、問題は解決します。そうでない場合、機能せず、接続するディスプレイがありません。
マシン上で利用可能なすべてのディスプレイ(すなわち、すべての可能な値)をリストするコマンドはありますか?
w
。詳細:既存のX表示名をリストしますか?
私のコンピューターにローカルでSSHを実行した場合(回避策です)、実行せずにグラフィカルアプリケーションを起動できません。
export DISPLAY=:0.0
これを最初に実行してからグラフィカルアプリケーションを実行すると、問題は解決します。そうでない場合、機能せず、接続するディスプレイがありません。
マシン上で利用可能なすべてのディスプレイ(すなわち、すべての可能な値)をリストするコマンドはありますか?
w
。詳細:既存のX表示名をリストしますか?
回答:
X接続をSSH経由で転送する場合は、サーバー側とクライアント側の両方で有効にする必要があります。(ディストリビューションによっては、それがデフォルトで有効にしたり無効にしたりすることができる。)サーバー側では、あなたが持っていることを確認してくださいX11Forwarding yes
に/etc/sshd_config
(または/etc/ssh/sshd_config
またはどこ設定ファイルがあります)。クライアント側で-X
、ssh
コマンドにオプションを渡すか、に入力ForwardX11
します~/.ssh/config
。
実行するとssh -X localhost
、それ$DISPLAY
が(おそらく)表示されるはずlocalhost:10.0
です。対比:0.0
あなたはSSHを介して接続していない値です。(この.0
部分は省略される場合があります。画面番号ですが、複数の画面はほとんど使用されません。)Xディスプレイには2つの形式があります。
:
。:
。ではssh -X localhost
、あなたは両方のディスプレイを通じて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)
リモート表示は、6000以上の開いているTCPポートに対応しています。マシン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ポートをプローブするために使用できます。最近では、特にループバックインターフェイスの外側で、XサーバーがTCPソケットをリッスンすることはほとんどありません。
厳密に言えば、別のアプリケーションがXサーバーが通常使用する範囲のポートを使用している可能性があります。どのプログラムがポートを開いているかを確認することで、Xサーバーがリッスンしているかどうかを確認できます。
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
それがのような曖昧なものを示している場合、sshd
それがXサーバーか偶然かを確実に知る方法はありません。
ディスプレイはへの最初の引数Xorg
です。ps
その後、grep Xorg
out できます。
[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
、このどこ形式にあなたがする必要があります。
ps aux |grep X
私にとってはうまくいきました
w
ログインしている全員とそのディスプレイを表示します。
DISPLAY=:0 netsurf "https://medium.com/"
かexport DISPLAY=:0
、シェルだけでなくプロセスと変数を共有してみてください
# 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
]
ps xeww | grep DISPLAY=:1024
今ではそれは奇妙です ディスプレイ20でもchrome-remote-desktopを実行しています。
w
xサーバーでアプリケーションが実行されていない場合(ウィンドウマネージャーやデスクトップがない場合)は機能しません。しかし、ls /tmp/.X11-unix
動作します。
では/tmp
フォルダもあるから可能.X??-lock
で、ファイル??
のセッション番号を示します。
セッション番号を再利用する場合は、これらを削除する必要があります。
ls -a
通常、aで始まるファイル.
は非表示になっているため、それらを使用して表示できます。
( DISPLAY=:0 yourapp & )
です。