Kesalahan `Tidak ada protokol yang ditentukan` saat menjalankan dari mesin jarak jauh melalui ssh

10

Saya memiliki skrip, cukup untuk menjalankan Aplikasi Grafis (GUI) saya, seperti di bawah ini.

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

Ketika saya menjalankannya dari mesin lokal ( ./gui.sh) itu berjalan dengan baik. Tetapi ketika saya mencoba menjalankannya dari mesin remote melalui ssh, saya mendapat error berikut.

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

Saya tidak tahu, protokol apa yang diminta atau saya kehilangan sesuatu? Saya mencoba langsung dengan memulai aplikasi, tanpa skrip [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], tetapi hasilnya sama. Saya sudah mencoba berbagai kombinasi suka ssh -Y, ssh -fYdan lebih banyak tetapi hasilnya sama!
Kedua untuk aplikasi saya, harus ada syaratnya, kita harus masuk dulu ke direktori tempat program itu berada.
Ada Solusi?

Tejas
sumber

Jawaban:

5

Arti dari opsi -display 127.0.0.1:0.0tergantung pada guiprogram itu, tetapi sangat mungkin bahwa itu berarti "tampilan pada tampilan X 127.0.0.1.1.0.0". Ini adalah tampilan X lokal pertama, diakses melalui TCP. Ini hampir pasti salah karena dua alasan. Pertama, tampilan X lokal seharusnya :0, bukan 127.0.0.1:0, karena termasuk alamat IP menyebabkan lalu lintas melewati TCP dan bukan akses lokal. Melewati TCP mungkin tidak berfungsi tergantung pada apakah server X menerima koneksi TCP. Bahkan jika itu terjadi, Anda kehilangan optimasi yang dimiliki oleh tampilan lokal.

Tampilan yang digunakan biasanya ditunjukkan oleh DISPLAYvariabel lingkungan, dan variabel itu cenderung disetel secara otomatis. (Biasanya, jika DISPLAYmemiliki nilai yang salah, itu karena Anda telah mengacaukannya. Pengecualian utama adalah penggunaan screenatau tmux.)

Program Anda mungkin memang mencari nilai DISPLAYvariabel lingkungan, karena itu cenderung terjadi secara otomatis dengan panggilan xlib. Jadi, Anda harus menelepon ./gui, skrip Anda tidak melakukan hal yang berguna. Jika program Anda bersikeras pada -displayargumen, buatlah itu menggunakan variabel lingkungan:

./gui -display "$DISPLAY"
Gilles 'SANGAT berhenti menjadi jahat'
sumber
4

ssh -Ydan ssh -Xharus menjadi awal yang baik tetapi apakah Anda meneruskan server X Anda juga?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

kalau tidak, itu tidak akan berhasil.

Hal lain yang perlu diperiksa adalah variabel DISPLAY yang akan menampilkan sesuatu seperti ini:

$ echo $DISPLAY
$ localhost:10.0

ini dijalankan setelah ssh -Y. Variabel yang sama kosong jika saya ssh tanpa -Yatau -X.

Untuk perbedaan antara -Xdan -Ybaca halaman manual ssh.

hashier
sumber
3

Video ini menjelaskan cara mengatasi kesalahan langkah demi langkah. Jika Anda tidak ingin menonton maka ikuti teks di bawah ini:

Kesalahan Tidak Ada protokol yang ditentukan menunjukkan bahwa "pengguna tidak tahu cara meluncurkan aplikasi GUI" dan "pengguna tidak memiliki izin untuk meluncurkan aplikasi GUI". Dalam video aplikasi GUI adalah dbca.

Bagian utama dari video ini adalah dalam menjalankan perintah xhost +yang memberikan izin pengguna untuk menampilkan GUI dari jarak jauh, ke sistem lokal.

Vishwanath gowda k
sumber
6
xhost +akan memberikan akses kepada siapa saja untuk terhubung ke layar Anda. Saya akan merekomendasikanxhost +local:[hostname or ip]
vimdude
Ini dan ini yang memperbaiki kesalahan saya. +1
Yug Singh
1

Debian Jessie, tambahkan juga:

export XAUTHORITY=/.Xauthority
ranzi
sumber
xhost +memperbaiki masalah saya (di sisi klien)
hazard89
Itu membantu, terima kasih! XAUTHORITY saya adalah /tmp/xauth-1000-_0tetapi setelah memulai dua sesi X tambahan file itu hilang - hanya yang ketiga tetap. Untuk memperbaiki masalah untuk semua windows saya mengembalikannya dengan:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle
0

Saya terkena masalah yang sama dengan saya mengatasinya dengan mengubah variabel lingkungan DISPLAY dari:

export DISPLAY=:0.0

untuk

export DISPLAY=:10
Faheem
sumber