Ssh üzerinden uzak makineden çalıştırılırken `` Protokol belirtilmedi '' hatası


11

Aşağıdaki gibi, sadece Grafik (GUI) Uygulamamı çalıştırmak için bir komut dosyası var.

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

Yerel makineden ( ./gui.sh) çalıştırdığımda mükemmel çalışıyor. Ama ssh ile uzak makineden çalıştırmaya çalıştığımda, aşağıdaki hatayı aldım.

[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]#    

Bilmiyorum, hangi protokolü soruyor ya da bir şey eksik mi? Doğrudan komut dosyası olmadan uygulamayı başlatarak denedim [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], ancak sonuç aynı. Ben gibi çeşitli kombinasyonları denedi ssh -Y, ssh -fYve daha ancak sonuç aynıdır!
İkincisi, başvurum için, öncelikle programın bulunduğu dizine gitmemiz gerekir.
Herhangi bir çözüm var mı?

Yanıtlar:


5

Seçeneğin anlamı -display 127.0.0.1:0.0bu guiprograma bağlıdır , ancak büyük olasılıkla “X ekranında 127.0.0.1:0.0 gösterilmesi” anlamına gelir. Bu, TCP üzerinden erişilen ilk yerel X ekranıdır. Bu iki nedenden dolayı neredeyse kesinlikle yanlıştır. İlk olarak, yerel X ekran olmalıdır :0değil, 127.0.0.1:0bir IP adresi de dahil olmak üzere TCP yerine yerel erişim geçmesi trafiğe neden çünkü. X sunucusunun TCP bağlantılarını kabul edip etmediğine bağlı olarak TCP'den geçiş çalışmayabilir. Olsa bile, yerel ekranların sahip olduğu optimizasyonları kaybedersiniz.

Kullanılacak ekran normalde DISPLAYortam değişkeni ile gösterilir ve bu değişken otomatik olarak doğru ayarlanma eğilimindedir. (Genellikle DISPLAYyanlış değere sahipseniz, bununla uğraştığınız içindir. Ana istisna screenveya kullanmaktır tmux.)

Programınız muhtemelen DISPLAYortam değişkeninin değerini arar , çünkü bu xlib çağrılarıyla otomatik olarak gerçekleşme eğilimindedir. Bu yüzden sadece aramalısınız ./gui, betiğiniz yararlı bir şey yapmaz. Programınız -displayargüman üzerinde ısrar ediyorsa , ortam değişkenini kullanmasını sağlayın:

./gui -display "$DISPLAY"

4

ssh -Yve ssh -Xiyi bir başlangıç ​​olmalı ama X sunucunuzu da yönlendirdiniz mi?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

aksi takdirde çalışmaz.

Kontrol edilmesi gereken başka bir şey, böyle bir şey göstermesi gereken DISPLAY değişkenidir:

$ echo $DISPLAY
$ localhost:10.0

sonra çalıştırıldı ssh -Y. Ben -Yveya ssh olmadan ssh ise aynı değişken boştur -X.

Arasındaki farklar -Xve -Yssh man sayfasını okuyun.


4

Bu videoda hatanın adım adım nasıl çözüleceği açıklanmaktadır. İzlemek istemiyorsanız aşağıdaki metni izleyin:

Protokol belirtilmedi hatası, "kullanıcı bir GUI uygulamasının nasıl başlatılacağını bilmiyor" ve "kullanıcının bir GUI uygulamasını başlatma izinlerine sahip olmadığını" belirtir. Videoda GUI uygulaması dbca.

Bu videonun ana parçası, xhost +uzak bir sistemden yerel sisteme bir GUI'yi uzaktan görüntüleme izinleri veren komutu çalıştırmaktır .


6
xhost +ekranınıza bağlanmak için herkese erişim sağlar. Tavsiye ederimxhost +local:[hostname or ip]
vimdude

Bu ve bu benim için hata sabit şeydir. +1
Yug Singh

1

Debian Jessie, ayrıca ekle:

export XAUTHORITY=/.Xauthority

xhost +sorunum düzeltildi (müşteri tarafında)
danger89

Bu yardımcı oldu, teşekkürler! XAUTHORITY'm /tmp/xauth-1000-_0iki ek X oturumu başlattıktan sonra bu dosya kayboldu - sadece üçüncüsü kaldı. Tüm pencereler için sorunu düzeltmek için geri ln -s ~/.Xauthority /tmp/xauth-1000-_0
yükledim

0

Aynı sorundan vuruldum DISPLAY ortam değişkenini değiştirerek çözdüm:

export DISPLAY=:0.0

için

export DISPLAY=:10
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.