firefox &
など、SSHを介していくつかのプログラムを実行すると、エラーが発生します
Error: no display specified
各プログラムのstdout
を表示したまま、多くのディスプレイを開きたいです。
最初の質問:ディスプレイを指定して、多く表示されるプログラムを取得するにはどうすればよいですか?
Pablo Santa Cruzは、解決策として次のコードを提供します。私はこれを理解できません。
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
コマンドのyourmachine
およびyourdomain.com
とは何ですか?
Xの動作方法は、ネットワークプログラムの動作方法と同じです。特定のマシンで実行される記述のサーバー(この場合はXディスプレイサーバー)があり、そのサーバーに接続して情報を表示しようとするXクライアント(firefoxなど)があります。
多くの場合(「ホーム」マシン上で)、クライアントとサーバーは同じボックスで実行され、サーバーは1つしかありませんが、Xは十分に強力であるため、これを行う必要はありません。最初から組み込まれたサーバー/クライアント分離で構築されました。
これにより、惑星の途中で(テキストモードで)ボックスにログオンし、現在表示しているボックスがディスプレイサーバーであることを伝えたり、できれば、ウィンドウが突然ローカルに表示されるようになるなど、すばらしいことができます。
クライアントがユーザーと対話するためには、サーバーをfindする方法を知る必要があります。これを行うにはいくつかの方法があります。多くのクライアントでは、-display
または--display
オプションで指定できます。
xeyes -display paxbox1.paxco.com:0.0
ディスプレイが特に指定されていない場合、多くはDISPLAY
環境変数を使用します。この変数は他の変数と同様に設定できます。
DISPLAY=paxbox1.paxco.com:0.0; export DISPLAY # in .profile
export DISPLAY=paxbox1.paxco.com:0.0 # in your Shell
DISPLAY=paxbox1.paxco.com:0.0 firefox & # for that command (Shell permitting)
DISPLAY
変数の最初の部分は、ディスプレイサーバーマシンのアドレスです。他のIPアドレスと同じルールに従います。解決可能なDNS名(localhost
を含む)または特定のIPアドレス(192.168.10.55など)を指定できます。
2番目の部分はX固有です。 Xの「ディスプレイ」(Xサーバー)番号と使用する画面番号を提供します。最初の(ディスプレイ番号)は一般に、1つ以上の画面を含むが、単一のキーボードとマウス(つまり、1つの入力ストリーム)を持つデバイスのグループを指します。通常、画面番号はそのグループ内の特定の画面を示します。
例は次のとおりです。
+----------------------------------------+
|paxbox1.paxco.com| |
+-----------------+ |
| |
| +----------+----+ +----------+----+ |
| |Display :0| | |Display :1| | |
| +----------+ | +----------+ | |
| | | | | |
| | +-----------+ | | | |
| | |Screen :0.0| | | | |
| | +-----------+ | | | |
| | +-----------+ | | | |
| | |Screen :0.1| | | | |
| | +-----------+ | | | |
| | +-----------+ | | +-----------+ | |
| | |Screen :0.2| | | |Screen :1.0| | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | |Screen :0.3| | | |Screen :1.1| | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | | Keyboard | | | | Keyboard | | |
| | +-----------+ | | +-----------+ | |
| | +-----------+ | | +-----------+ | |
| | | Mouse | | | | Mouse | | |
| | +-----------+ | | +-----------+ | |
| +---------------+ +---------------+ |
| |
+----------------------------------------+
ここには、2台のディスプレイサーバーを備えた単一のマシン(paxbox1.paxco.com
)があります。最初の画面には4つの画面があり、2番目の画面には2つの画面があります。可能性は次のとおりです。
DISPLAY=paxbox1.paxco.com:0.0
DISPLAY=paxbox1.paxco.com:0.1
DISPLAY=paxbox1.paxco.com:0.2
DISPLAY=paxbox1.paxco.com:0.3
DISPLAY=paxbox1.paxco.com:1.0
DISPLAY=paxbox1.paxco.com:1.1
実際のウィンドウを表示する場所と、使用する入力デバイスによって異なります。
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
SSH経由で別のマシンに接続している場合、SSHでX-Forwardingを有効にすると、Xウィンドウが暗号化されてSSHトンネルを介してマシンに転送されます。 X転送を有効にするには、-X
をsshコマンドラインに追加するか、SSH構成ファイルでForwardX11 yes
を設定します。
X-Forwardingが正常にセットアップされたかどうかを確認するには(サーバーが許可していない可能性があります)、echo $DISPLAY
がlocalhost:10.0
のようなものを出力するかどうかを試してください。
試して
export DISPLAY=localhost:0.0
xorg-x11-xauthパッケージをインストールしてみてください。
私は同様の問題に遭遇したので、おそらくこの答えは誰かを助けるでしょう。
Error: no display specified
エラーの理由は、Firefoxが起動されているが、リモートホストで実行されているXサーバー(GUI)がないことです。 X11転送を使用して、リモートホスト上でFirefoxを実行できますが、ローカルホスト上で表示できます。 Mac OS Xでは、X11転送を使用するために XQuartz をダウンロードする必要があります。これがないと、$DISPLAY
変数が設定されないため、echo $DISPLAY
を試してみると空白になります。
今日も同様の問題に直面しました。それで、ここに簡単な解決策があります:マシンにSSHをしている間に、 Ctrl - Y。
ssh user@ip_address -Y
ログイン後、firefox &
と入力します。そして、あなたは行ってもいいです。
SSH経由で接続するときは、$ DISPLAYを手動で設定しないでください。SSH -X
経由で接続し、$ DISPLAYが空のままの場合、これは通常、暗号化されたチャネルを確立できなかったことを意味します。
パッケージxauth
またはxorg-x11-xauth
が欠落している可能性があります。次を使用して、リモートマシンにインストールしてください。
Sudo apt-get install xauth
または
Sudo apt-get install xorg-x11-xauth
その後、SSH接続を再起動します。 Xウィンドウの出力がローカルマシンに転送されるように、SSH -X
を使用することを忘れないでください。
次に、echo $DISPLAY
againを試して、$ DISPLAYがSSHデーモンによって自動的に設定されているかどうかを確認します。 IPアドレスとポートを含む行が表示されます。
経由でサーバーにログインする
ssh -X root@yourIP
/ etc/ssh/sshd_configファイルを編集し、この行を追加します。
X11UseLocalhost no
Sshdを再起動します。 CentOSの場合( ディストリビューションを確認 )
/sbin/service sshd restart
ディスプレイを確認してください
echo $DISPLAY
これが見えるはずです
yourIP:10.0
楽しい
firefox
CentOS 6.8でも同じ問題に直面しました。
yum reinstall xorg*
現在のセッションを終了し、mobiXtermなどのツールで別のセッションを開きます。セッションでX11転送がツールで有効になっていることを確認してください。
VNCを使用してX11をさらに理解します。ディスプレイを指定して多数表示されるプログラムを取得するには、DISPLAY = IP:DisplayNum.ScreenNumをエクスポートします。
例えば、
vncserver :2
vncserver -list
echo '$DISPLAY'=$DISPLAY
export DISPLAY=:2 # export DISPLAY=IP:DisplayNum or export DISPLAY=:DisplayNum for localhost; So that can vnc connect and see the vnc desktop :2 if $DISPLAY is not :2.
echo '$DISPLAY'=$DISPLAY