GNU/Linux >> Belajar Linux >  >> Linux

Ssh – Buka Jendela Pada Layar X Jarak Jauh (mengapa "tidak dapat Membuka Layar")?

Sekali waktu,

DISPLAY=:0.0 totem /path/to/movie.avi

setelah ssh masuk ke desktop saya dari laptop saya akan menyebabkan totem memutar movie.avi di desktop saya.

Sekarang ini memberikan kesalahan:

No protocol specified
Cannot open display:

Saya menginstal ulang pemerasan Debian ketika sudah stabil di kedua komputer, dan saya kira saya merusak konfigurasi.

Saya telah mencari di Google tentang ini, dan seumur hidup saya tidak dapat mengetahui apa yang seharusnya saya lakukan.

(VLC memiliki antarmuka HTTP yang berfungsi, tetapi tidak senyaman ssh.)

Masalah yang sama muncul ketika saya mencoba menjalankan ini dari tugas cron.

Jawaban yang Diterima:

(Diadaptasi dari Linux:wmctrl tidak dapat membuka tampilan saat sesi dimulai melalui ssh+screen)

TAMPILAN dan OTORITAS

Program X membutuhkan dua informasi untuk terhubung ke layar X.

  • Itu membutuhkan alamat tampilan, yang biasanya :0 saat Anda masuk secara lokal atau :10 , :11 , dll. ketika Anda masuk dari jarak jauh (tetapi jumlahnya dapat berubah tergantung pada berapa banyak koneksi X yang aktif). Alamat tampilan biasanya ditunjukkan dalam DISPLAY variabel lingkungan.

  • Ini membutuhkan kata sandi untuk tampilan. Kata sandi tampilan X disebut kuki ajaib . Cookie ajaib tidak ditentukan secara langsung:cookie selalu disimpan dalam file otoritas X, yang merupakan kumpulan catatan dalam bentuk “tampilan :42 memiliki cookie 123456 ”. File otoritas X biasanya ditunjukkan dalam XAUTHORITY variabel lingkungan. Jika $XAUTHORITY tidak disetel, program menggunakan ~/.Xauthority .

Anda mencoba untuk bertindak di jendela yang ditampilkan di desktop Anda. Jika Anda satu-satunya orang yang menggunakan mesin desktop Anda, kemungkinan besar nama tampilannya adalah :0 . Menemukan lokasi file otoritas X lebih sulit, karena dengan gdm yang diatur di bawah pemerasan Debian atau Ubuntu 10.04, itu ada dalam file dengan nama yang dibuat secara acak. (Anda tidak memiliki masalah sebelumnya karena versi gdm sebelumnya menggunakan pengaturan default, yaitu cookie yang disimpan di ~/.Xauthority .)

Mendapatkan nilai variabel

Berikut adalah beberapa cara untuk mendapatkan nilai DISPLAY dan XAUTHORITY :

  • Anda dapat memulai sesi layar secara sistematis dari desktop Anda, mungkin secara otomatis di skrip login Anda (dari ~/.profile; tetapi lakukan hanya jika masuk di bawah X:uji apakah DISPLAY diatur ke nilai yang dimulai dengan : (yang harus mencakup semua kasus yang mungkin Anda temui)). Di ~/.profile :

    case $DISPLAY in
      :*) screen -S local -d -m;;
    esac
    

    Kemudian, di sesi ssh:

    screen -d -r local
    
  • Anda juga dapat menyimpan nilai DISPLAY dan XAUTHORITY dalam file dan mengingat nilainya. Di ~/.profile :

    case $DISPLAY in
      :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
    esac
    

    Dalam sesi ssh:

    . ~/.local-display-setup.sh
    screen
    
  • Anda dapat mendeteksi nilai DISPLAY dan XAUTHORITY dari proses yang berjalan. Ini lebih sulit untuk diotomatisasi. Anda harus mengetahui PID dari proses yang terhubung ke tampilan yang ingin Anda kerjakan, lalu dapatkan variabel lingkungan dari /proc/$pid/environ (eval export $(</proc/$pid/environ tr \0 \n | grep -E '^(DISPLAY|XAUTHORITY)=') ).

Terkait:Apakah ada frekuensi radio terbuka / tidak terbatas yang bebas untuk digunakan?

Menyalin cookie

Pendekatan lain (mengikuti saran oleh Arrowmaster) adalah tidak mencoba untuk mendapatkan nilai $XAUTHORITY di sesi ssh, tetapi untuk membuat sesi X menyalin cookie-nya ke ~/.Xauthority . Karena cookie dibuat setiap kali Anda masuk, tidak masalah jika Anda menyimpan nilai lama di ~/.Xauthority .

Mungkin ada masalah keamanan jika direktori home Anda dapat diakses melalui NFS atau sistem file jaringan lain yang memungkinkan administrator jarak jauh untuk melihat isinya. Mereka masih perlu terhubung ke mesin Anda, kecuali Anda telah mengaktifkan koneksi X TCP (Debian menonaktifkannya secara default). Jadi bagi kebanyakan orang, ini tidak berlaku (tidak ada NFS) atau tidak menjadi masalah (tidak ada koneksi X TCP).

Untuk menyalin cookie saat Anda masuk ke sesi X desktop Anda, tambahkan baris berikut ke ~/.xprofile atau ~/.profile (atau skrip lain yang dibaca saat Anda masuk):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

Pada prinsipnya ini tidak memiliki kutipan yang tepat, tetapi dalam contoh khusus ini $DISPLAY dan $XAUTHORITY tidak akan berisi metakarakter shell apa pun.


Linux
  1. Penanganan Ctrl-c Dalam Sesi Ssh?

  2. xhost+ :Cara Memperbaiki Kesalahan "Tidak Dapat Membuka Tampilan" Saat Meluncurkan GUI di Server Jarak Jauh

  3. Melewati variabel dalam perintah ssh jarak jauh

  1. Ssh – Mengapa Firefox Sangat Lambat Dibanding Ssh?

  2. Mengapa login SSH saya lambat?

  3. Koneksi SSH melalui Terowongan SSH Terbalik (Remote).

  1. Mengapa Saya Tidak Dapat Mengekspor Tampilan Linux?

  2. Izinkan Akses Ssh Jarak Jauh?

  3. Menggunakan SSH untuk membuka aplikasi di desktop