web-dev-qa-db-ja.com

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

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

Cannot open display:

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

14
Gaurav Agarwal

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

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

enter image description here

エラーが発生した場合、最小限のサーバーイメージがallowX-forwardingに設定されていないことがあるためです。その場合は、コメントしてください。解決のお手伝いをいたします。 Ubuntu/Debianを実行する多くの最小限のVPSでこれを実行しました。

14
ish

だからあなたはあなたの家のPCから(それを呼び出しましょうあなたのマシン)サーバーに(それを呼び出しましょうサーバー)viassh?マシン経由でサーバー上のグラフィカルウィンドウでプログラムを起動したいですか?それが正しい場合は、必ず読んでください。

プログラムを呼び出して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ウィンドウは、サーバー上で表示されるようにリモートマシンの画面にポップアップ表示されます。トリックは、X-トンネリングを有効にし、DISPLAY変数を右に設定するssh -Xのように「-X」オプションを使用することです。

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

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

サーバーの画面で

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

ssh user@server
DISPLAY=:0.0 gedit

:0.0の代わりに正しい値に置き換える必要がありますが、適切なX-screenで取得するには(サーバーに複数の画面が接続されている場合、またはその構成がやや特殊な場合のみ重要です)。

ここで動作しない最も一般的なシナリオは、サーバーに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を実行すると、特定のマシンのディスプレイ数と使用中の数字を確認できます。*その後、画面を使用可能にするように構成され、Xサーバーを実行する各コンピューターにはホスト名があります。 DISPLAY変数をDISPLAY=hostname:0.0に応じて設定することにより、同じネットワーク内の任意のマシンからホスト画面を使用できます。 -Xオプションを指定すると、Sshは賢明な方法でこれを行います。

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

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

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

17
con-f-use

con-f-useが言ったこと

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

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

0
xyious