SSH経由でログインしたときに、リモートサーバーでグラフィカルアプリケーションを実行するにはどうすればよいですか?


14

geditUbuntu 12.04 Serverを実行しているAmazon EC2インスタンスに接続されているWindowsのSSHターミナルから実行しようとしていますが、このエラーが表示されます。

Cannot open display:

どうすれば修正できますか?

回答:


14

サイドでWindowsを使用しているため、WindowsでローカルXサーバーを実行するSSHクライアントが必要です。これにより、画面上のサーバーからグラフィカルアプリケーションをリモートで実行できます。

経験から、この機能が組み込まれた無料のMobaXTermをお勧めします。ダウンロードして試してください:

ここに画像の説明を入力してください

エラーが発生した場合、それ X サーバーへのX転送を許可するための最小サーバーイメージがセットアップされていない場合があるためです。その場合は、コメントしてください。解決のお手伝いをいたします。Ubuntu / Debianを実行する多くの最小限のVPSでこれを実行しました。


17

sshを使用して、自宅のPC(マシンと呼びましょう)からサーバー(サーバーと呼びましょう)に接続していますか?マシンを介してサーバー上のグラフィカルウィンドウでプログラムを起動したいですか?それが正しい場合は、必ず読んでください。

プログラムを呼び出して起動しますgeditが、プロセスはすべて同じです。グラフィカルウィンドウを表示する場所に応じて、右の見出しにスキップします。

マシンの画面上のウィンドウ

リモートマシンでgeditのウィンドウを表示して使用したいが、サーバーで起動したい場合、シェルセッションは次のようになります。

user@remote-machine:~$ ssh -X user@server
Last login: Tue Aug 14 13:47:04 2012 from clientXX
*******************************************************************************
M O T D (Message Of The Day)
*******************************************************************************
user@server:~$ gedit .bash_aliases 

** (gedit:7851): WARNING **: Could not load theme icon gtk-home: Icon 'gtk-home' not present in theme

(gedit:7851): Gtk-WARNING **: Attempting to store changes 

警告を気にしないでください、それらは正常です-geditウィンドウは、サーバー上で表示されるように、リモートマシンの画面にポップアップ表示されます。秘Theはssh -X、Xトンネリングを有効にし、DISPLAY変数を右に設定する「-X」オプションを使用することです。

これは、X11をサポートするSSHクライアントを使用しており、サーバーでXサーバーが実行されていることを前提としています(GUIを使用せずにXサーバーを実行しない場合もあります)。特にWindowsでは、ほとんどのWindowsターミナルプログラムにはXがないため、これは問題になる可能性があります。izxが述べたように、MobaXTermはX-Serverを備えたWindows用の多くのSSHクライアントの1つです。

ただし、X11がないサーバーの場合は、インストールする必要があります。

サーバーの画面上

次のようにgeditを呼び出して、サーバーの画面でインスタンスを開始することもできます。

ssh user@server
DISPLAY=:0.0 gedit

:0.0ただし、正しいXスクリーンに表示する代わりに、正しい値に置き換える必要があります(複数のスクリーンがサーバーに接続されている場合、またはその構成がやや特殊な場合にのみ重要です)。

ここで動作しない最も一般的なシナリオは、サーバーにX11-Serverがなく、モニターが接続されていないか、グラフィカルユーザーインターフェイスがなく、これを読んでいない場合です:D。

ちょっとした理論

私はこのには専門家だが、私はそれがうまくいくと思う方法は、各物理画面こと、すなわち、個々のコンピュータに接続されている各モニターでの形で実行されている番号を取得し0.01.02.0、...

この番号は、X-Window-System(別名X11)によって割り当てられます。これは、Unity、Gnome、KDEなどが構築できるネットワークと基本的なグラフィカルインターフェイスを提供するレイヤーです。

for x in /tmp/.X11-unix/X*; do echo ":${x##*X}"; done問題のマシンで実行することにより、特定のマシンのディスプレイの数と使用中の数字を確認できます。DISPLAY変数をに応じて設定することにより、同じネットワーク内の任意のマシンからホスト画面を使用できますDISPLAY=hostname:0.0-Xオプションを提供する場合、Sshは賢明な方法でこれを行います。

*注意:このforループよりも良い方法があると思います。

他のすべてが失敗した場合

シェルテキストエディターを使用します。vivimnanoそしてemacs最も一般的であり、それらの少なくとも一方がインストールされ、運用されます。それらのうちnano、最も簡単で最も自明です。


@coding crow:WindowsからSSHを使用している場合、それが機能するかどうかはクライアントに依存します。一部のクライアントはX11と通信せず、したがってX転送を行いません-一部のクライアントは正常に動作します。動作していない場合は、Windows用のSSHクライアントを変更するか、nano、vim、またはemacsを使用してください。
con-f-use

はい、私は反対票を得て、私のプロフィールでそれを見て、なぜコメントなど何もないのか疑問に思いました。それほど重要ではないので、あなたとは関係ありませんでした、ただ疑問に思いました-あなたが問題を解決してくれてうれしいです、私はここで少し助けになるかもしれません。
con-f-use

forループを少し変更しました:0 :0.0。表示アドレスのみを表示するようになりました。あなたがそれがあなたの望むものではないと思うなら、元に戻してください..
heemayl

0

con-f-useが言ったこと

基本的に、SSHを介して端末があり、GeditはGUIプログラムです。con-f-useの答えは、Linux GUIクライアントセッションから機能するようにします。

他のオプションは、nano、Vi、または他の多くのような非GUIエディターを使用することです。

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