web-dev-qa-db-ja.com

SSH経由でリモートマシンから実行すると、「プロトコルが指定されていません」というエラーが発生する

以下のように、スクリプトを使用して、単にグラフィカル(GUI)アプリケーションを実行します。

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

ローカルマシン(./gui.sh)から実行すると、問題なく動作します。しかし、sshを介してリモートマシンから実行しようとすると、次のエラーが発生しました。

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

わからないのですが、どのプロトコルが要求しているか、何か不足していますか?スクリプト[ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""]なしでアプリケーションを起動して直接試しましたが、結果は同じです。 ssh -Yssh -fYなどのさまざまな組み合わせを試しましたが、結果は同じです。
2つ目のアプリケーションでは、最初にプログラムが配置されているディレクトリに移動する必要があるという条件があります。
解決策はありますか?

10
Tejas

オプション-display 127.0.0.1:0.0の意味は、そのguiプログラムによって異なりますが、「Xディスプレイ127.0.0.1:0.0に表示」を意味する可能性が高いです。これは、TCP経由でアクセスされる最初のローカルXディスプレイです。これはほぼ間違いなく2つの理由で間違っています。まず、ローカルXディスプレイは:0ではなく127.0.0.1:0である必要があります。これは、IPアドレスを含めると、トラフィックがローカルアクセスではなくTCPを通過するためです。通過する= TCPは、XサーバーがTCP接続を受け入れるかどうかによっては機能しない場合があります。受け入れても、ローカルディスプレイの最適化が失われます。

使用する表示は通常、DISPLAY環境変数で示され、その変数は自動的に正しく設定される傾向があります。 (通常、DISPLAYの値が間違っている場合は、それをいじっていたためです。主な例外は、screenまたはtmuxの使用です。)

プログラムはおそらくDISPLAY環境変数の値を検索します。これは、xlib呼び出しで自動的に行われる傾向があるためです。したがって、./guiを呼び出すだけで十分です。このスクリプトでは、何も役に立たないのです。プログラムが-display引数を要求する場合は、環境変数を使用するようにします。

./gui -display "$DISPLAY"

ssh -Yssh -Xは良いスタートですが、Xサーバーも転送しましたか?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

そうしないと機能しません。

チェックするもう1つのことは、次のようなDISPLAY変数です。

$ echo $DISPLAY
$ localhost:10.0

これはssh -Yの後に実行されました。 -Yまたは-Xなしでsshを実行すると、同じ変数が空になります。

-X-Yの違いについては、sshのmanページをご覧ください。

4
hashier

これ ビデオは、エラーを段階的に解決する方法を説明しています。見たくない場合は、以下のテキストに従ってください。

プロトコルが指定されていませんというエラーは、「ユーザーがGUIアプリケーションを起動する方法を知らない」、「ユーザーがGUIアプリケーションを起動する権限を持っていない」ことを示しています。ビデオでは、GUIアプリケーションはdbcaです。

このビデオの重要な部分は、リモートシステムからローカルシステムにGUIをリモートで表示する権限をユーザーに付与するxhost +コマンドを実行することです。

3

Debian Jessie、以下も追加:

export XAUTHORITY=/.Xauthority
1
ranzi

同じ問題に見舞われ、DISPLAY環境変数を次のように変更して解決しました。

export DISPLAY=:0.0

export DISPLAY=:10
0
Faheem