X11転送を有効にしてsshした後にXプログラムを開くときの「ディスプレイを開けない」エラーを修正するにはどうすればよいですか?


111

Mac(OS X 10.6.8)でX11アプリ(XQuartz 2.3.6、xorg-server 1.4.2-apple56)を起動しxhost +、X11でターミナルを開いてを実行した後ssh -Y、Ubuntu 10.04 VM(VMwareで実行)融合)。gedit .bashrc(たとえば)実行すると、次のようになります。

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY 何も返しません。

しかしssh -Y、Ubuntu 11.04マシンを使用すると、gedit .bashrc動作します。 echo $DISPLAY「localhost:10.0」を返します。

私はexport DISPLAY=localhost:10.0自分のVMにsshedしてから実行gedit .bashrcしてみましたが、次のようになりました:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

2つの異なるUbuntuマシンの構成で何が違うのでしょうか?それは、一方が機能し、もう一方が機能しない理由を説明しますか?

更新:下のコメントでZoredacheが示唆したように、私は走りましたsudo apt-get install xbase-clientsが、私は同じ問題を抱え続けています。


2
Ubuntu 10.04ボックスには、X11用の適切なツールがインストールされていますか?xbase-clientsをインストールします(まだインストールされていない場合)。
ゾレダチェ

私はそれをインストールしましたが、まだ同じ問題があります。(上記参照。)
ダリルスピッツァー

3
接続時に-vvオプションをsshに渡すと、詳細なデバッグメッセージが出力される場合があります。接続中にX11転送に関するいくつかのコメントが表示されます。
ゾレダチェ

1
@jcrawfordorあなたはX11Forwardingubuntuのものをチェックしました、そしてあなたはあなたがxbase-clientsインストールしており、あなたがssh接続を作っているターミナルのmacでXappsを起動できることを確認しました。(それは確認$DISPLAYsshを実行する端末に設定されているから
マンウェ

1
私のケースでは、MacOSののXQuartzのバージョンをアップグレードするだけの問題だった
Waruna Ranasinghe

回答:


47

サーバーのsshd_config(通常は/etc/ssh/sshd_config)を確認し、X11Forwardingオプションが次の行で有効になっていることを確認します

X11Forwarding yes

X11Forwardingが指定されていない場合、チェックできるDebianマシンのデフォルトはnoです。


4
別のUbuntu VMをセットアップした後、xbase-clientsをインストールし、X11Forwardingを有効にする必要があることを発見しました。両方を含めるように回答を更新してください。受け入れます。
ダリルスピッツァー

1
面白い。少なくとも今朝行った10.04の新規インストールでは、X11Forwardingがデフォルトで有効になりました。Ubuntuの連中は再びデフォルトをいじる必要があります。
ゾレダチェ

28
@DerfK、私のシステムではまだ私は、ようなエラーを取得しています既に存在して「はいX11Forwarding」にGtk-WARNING **::開くことができません表示:(:8381 geditの)このような場合には
AJ

1
Debianでは、パッケージxauthをインストールしてから再度ログインする必要がある場合があります。
コント

これは私のために働い$ sshのユーザ名@ホスト名-Y
MarcoZen

60

xhost +から:リモートサーバーでGUIを起動中に「ディスプレイを開くことができません」エラーを修正する方法

回答:この記事に記載されているxhostの手順に従うことで、「ディスプレイを開けません」エラーを修正できます。

クライアントがxhost +を使用して任意のホストから接続できるようにします

次のコマンドを実行してアクセス制御を無効にします。これにより、クライアントが任意のホストから接続できるようになります。

$ xhost +

アクセス制御が無効、クライアントは任意のホストから接続できます

X11転送を有効にする

sshの実行中に、オプション-Xを使用してX11転送を有効にします。

$ ssh username@hostname -X

-Yオプションを使用して、信頼できるX11転送を有効にします。

$ ssh username@hostname -Y

そのホストでGUIアプリケーションを開きます

上記で説明したようにリモートホストへのssh接続を開いた後、GUIアプリケーションを開くことができます。GUIアプリケーションは問題なく開くことができます。

それでも「ディスプレイを開けません」というエラーが表示される場合は、下に示すようにDISPLAY変数を設定します。

$ export DISPLAY='IP:0.0'

注:IPは、GUIアプリケーションを表示するローカルワークステーションのIPです。


11
IP =はGUIを取得するローカルワークステーションのIPであることに
PCoder

3
OS Xで同様の問題がある場合は、XQuartzがインストールされていることも確認してください。インストールされていない場合、これらの修正は役に立たない。(OPの質問は、彼がXQuartzを持って示し、これは、私があったように同様の問題を有するものにサイドノートよりある)
ドーランAntenucci

3
実行xhost +は非常に安全ではないため、使用しないでください。Stefan Roginが述べたように、攻撃者はホストからXSessionに接続し、入力したものすべてを読み取り、表示される画面を変更することさえできます。
ジリスラフ

最後のものはexport Display=IP:0.0私のためにそれをやった
javadbaを

18

Mac OS XからUbuntu VMにログインするときにもこの問題が発生しました-何らかの理由で表示変数の「localhost」が気に入らないようです。したがって、harrymcが提案するように、IPを手動で設定します。

export DISPLAY="127.0.0.1:10.0"

その後、X11プログラムで問題ないはずです。localhostと127.0.0.1は同等であることをOSに伝える必要はないようですが、少なくとも動作します。


これは私のために働いた。localhostが機能しなかった理由は何ですか?
アレックス

2
ビンゴ!私はしばらくの間その問題に悩まされていました...私はSSHで接続し、Gtkプログラムを起動できませんでした(ただし、「xeyes」のようなプレーンなX11は機能していました)。DISPLAYは正しかった。実際、「localhost」の解像度はそうではありませんでした!DISPLAY = 127.0.0.1:10.0、またはDISPLAY = :: 1:10.0を手動で設定すると機能します。/ etc / hostsを編集しても効果がないようです。DNSが正しく構成されています( "dig localhost" correclty report 127.0.0.1 and :: 1)したがって、GtkのX11接続のDNS解決(gtk?gdk?glib?other?)のバグのようです。
パブロサラチャガ14

1
Beagle Bone BlackのDebianインストールで、/ etc / hostがroot以外の誰にも読めるように設定されていませんでした。これにより、ここで報告される症状が発生しました。/ etc / hostsをすべての人が読み取り可能にし、正常に機能しました。
ダニエル

13

CentOS KVMサーバーでこの問題が発生しました。「xauth」プログラムがありませんでした。


1
これは私の最小のDebianインストールで助けてくれました、ありがとうございました!
binOr

9

argで実行しときにしばらくしてこの問題が発生した場合-X。または単にForwardX11/ etc / ssh / ssh_configで実行し$ ssh username@hostname -Y、を実行して信頼できるX11フォワーディングを有効にします。正確な原因はわかりませんが、-Xセキュリティを強化するために、しばらくすると一部の機能が期限切れになると推測しています。

これは私がオンラインで見つけたものです:

ssh -X remotemachineを使用すると、リモートマシンは信頼されていないクライアントとして扱われます。したがって、ローカルクライアントはリモートマシンにコマンドを送信し、グラフィカル出力を受け取ります。コマンドがセキュリティ設定に違反している場合は、代わりにエラーが表示されます。

ただし、ssh -Y remotemachineを使用すると、リモートマシンは信頼できるクライアントとして扱われます。この最後のオプションは、セキュリティの問題を引き起こす可能性があります。他のグラフィカル(X11)クライアントはリモートマシンからデータを盗聴することができ(スクリーンショットを作成し、キーロギングやその他の厄介なことをする)、それらのデータを変更することさえ可能です。

これらのことについてもっと知りたい場合は、XsecurityマンページまたはX Security拡張仕様を読むことをお勧めします。さらに、/ etc / ssh / ssh_configのオプションForwardX11およびForwardX11Trustedを確認できます。

ソース:


6

Macでテストしたばかりですが、他のシステムでも問題ない場合があります。

  1. クライアントがxhost +を使用して任意のホストから接続できるようにします

    $ xhost +

  2. X11ディスプレイをサポートする環境が必要です

    [Macシステム] X11 for mac https://www.xquartz.org/をインストールします

  3. ssh-serverにx11ディスプレイを転送させる必要があります

    更新/etc/ssh/sshd_configして設定しX11Forwarding yes、sshサーバーを再起動します

  4. -Xパラメータを使用してsshセッションをx11表示に転送する必要があります

    $ ssh -X user @ ip

  5. PyCharmでX11アプリを開く方法は?
    • X11ディスプレイをサポートするsshセッションを開きます(このセッションを保持することを忘れないでください)
    • echo $DISPLAYそのsshセッションで実行する
    • DISPLAYPyCharmの環境変数を設定します

1
なぜこれが違うのか、なぜ他の答えよりも優先されるべきなのか?簡単な編集でできるか説明してください。できます!!
ピンプジュースIT

@McDonaldのおかげで、詳細が更新されました。

4

UXTERMまたはXTERMを実行するときは、単に発行します

export $DISPLAY 

変数はそこにあります。次に、設定してエクスポートします。


4

/etc/ssh/sshd_config次のものを入れなければなりませんでした。

X11UseLocalhost no

むしろ、それを「はい」に設定します。デフォルトが「NO」の場合は奇妙ですWindowsでXMingでputtyを使用しているユーザー。Fedoraではなくsshを使用しています。時々それは私たちに与え始めます

error can't open display localhost

通常、サーバーを再起動すると修正されますが、これは愚かなことです。上記をsshd行い、サーバーでサービスを再起動し、新しい接続が正常に機能するようになりました。


2

また、Solaris 10でこの問題が発生し、リスナーが設定されていないことがわかりました。

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true

1

CentOS 6.5では、/ etc / hostsをいじった後、リモートXプログラムへのアクセスが突然失われました。空の$ DISPLAY変数と同じ症状(手動での設定/エクスポートのヘルプなし)。

実際のホスト名を指す127.0.0.1エントリが必要です。実際、順序も関連しているようです(最後に置くと機能しません...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

これを修正すると、xeyes、xclock、その他のXテストおもちゃが再び機能するようになりました。したがって、必要なvirt-managerもオンラインに戻りました。


1

セットアップでxフォワーディングを妨げる素晴らしいしゃっくりを見つけました:ファイアウォールがlocalhostからのすべての接続をブロックしているため、トンネルに到達できません


1

Konsoleを使用している場合は、Xfceターミナルなどの別のターミナルエミュレータに切り替えて、rootを使用して再試行してください。


1

ターミナル$ ssh username @ hostname -Xを開きます

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY = "127.0.0.1:10.0"すべてが機能するはずです。


ありがとう。DISPLAY='localhost:10.0'動作していないときに私の特別なケースで動作します。
xpt

1

このセットアップは私のために機能します:

ローカル(Windows 10上の64ビットCygwin) DISPLAY=:0

サーバー(Amazon EC2 RHEL 7.6) DISPLAY=:10.0

これらの設定は、タスクバーの「X applications menu on:0」をクリックし、System Tools> Terminalを選択することで見つかりました


0

多くのフラストレーションの後、彼の/ etc / hostファイル内のサーバーのホスト名のエントリが間違っていることがわかりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.