SSH経由でリモートコンピュータで実行すると「指定されたプロトコルなし」エラー

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 -Yなど様々な組み合わせを試してみましたssh -fYが、結果は同じです!
第二に、私のサポートのためには、まずプログラムがあるディレクトリを入力する必要があるという前提条件があります。
解決策はありますか?

答え1

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

プロトコルが指定されていませんエラーは、「ユーザーがGUIアプリケーションを起動する方法を知らない」と「ユーザーがGUIアプリケーションを起動する権限を持っていません」を意味します。映像の中のGUIアプリケーションはdbca

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

答え2

このオプションの意味はプログラム-display 127.0.0.1:0.0によって異なりますが、gui「Xディスプレイ127.0.0.1:0.0に表示」を意味する可能性があります。これは、TCPを介してアクセスされる最初のローカルXディスプレイです。これは2つの理由でほとんど間違いありません。まず、:0ローカル127.0.0.1:0XサーバーがTCP接続を許可するかどうかによって、TCPを介した接続が機能しないことがあります。これにより、メインディスプレイが持つ最適化機能が失われます。

使用するディスプレイは通常DISPLAY環境変数として表示され、この変数は自動的に正しく設定される傾向があります。 (通常、DISPLAY間違った値があると混乱したためです。主な例外はscreenorを使用することですtmux。)

DISPLAYxlibが呼び出されると自動的に発生する傾向があるため、プログラムは環境変数の値を見つけることができます。したがって、 を呼び出すと、./guiスクリプトは役に立つ操作を行いません。プログラムでこの-displayパラメーターを使用する必要がある場合は、環境変数を使用するようにしてください。

./gui -display "$DISPLAY"

答え3

ssh -Y良いスタートですが、ssh -XXサーバーも渡していますか?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

それ以外の場合は動作しません。

確認する必要があるもう1つはDISPLAY変数です。この変数は次のように読み取る必要があります。

$ echo $DISPLAY
$ localhost:10.0

これは後で実行されますssh -Y。 SSHを使用しない-Y場合、または同じ変数が空の場合-X

-Xとの違いについては、-Ysshのマニュアルページを読んでください。

答え4

私も同じ問題がありましたが、DISPLAY環境変数を変更して問題を解決しました。

export DISPLAY=:0.0

到着

export DISPLAY=:10

関連情報