Dahulu kala,
DISPLAY=:0.0 totem /path/to/movie.avi
setelah ssh ke desktop saya dari laptop saya akan menyebabkan totem untuk bermain movie.avi
di desktop saya.
Sekarang ini memberikan kesalahan:
No protocol specified Cannot open display:
Saya menginstal ulang Debian memeras ketika berjalan stabil di kedua komputer, dan saya kira saya melanggar konfigurasi.
Saya sudah meneliti ini, dan tidak bisa seumur hidup saya mencari tahu 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 pekerjaan cron.
totem
tidak menemukan cookie X Anda, dan Anda perlu mengaturXAUTHORITY
ke nilai yang tepat, yaitu nilai dalam sesi reguler Anda di desktop Anda. Baca Linux: wmctrl tidak dapat membuka tampilan ketika sesi dimulai melalui layar ssh + untuk beberapa latar belakang; juga lihat jawaban terkait Sebagai root dapatkah saya meluncurkan program grafis di desktop pengguna lain? .$XAUTHORITY
di~/.Xauthority
seperti semua orang mengharapkan hal itu terjadi.Jawaban:
(Diadaptasi dari Linux: wmctrl tidak dapat membuka tampilan saat sesi dimulai melalui layar ssh + )
DISPLAY dan OTORITAS
Program X memerlukan dua informasi untuk dapat terhubung ke tampilan X.
Perlu alamat tampilan, yang biasanya
:0
ketika Anda login secara lokal atau:10
,,:11
dll. Ketika Anda login jarak jauh (tetapi jumlahnya dapat berubah tergantung pada berapa banyak koneksi X yang aktif). Alamat tampilan biasanya ditunjukkan dalamDISPLAY
variabel lingkungan.Perlu kata sandi untuk tampilan. Kata sandi tampilan X disebut cookie ajaib . Cookie ajaib tidak ditentukan secara langsung: cookie selalu disimpan dalam file otoritas X, yang merupakan kumpulan catatan dari bentuk “display
:42
has cookie123456
”. File otoritas X biasanya ditunjukkan dalamXAUTHORITY
variabel lingkungan. Jika$XAUTHORITY
tidak diatur, gunakan program~/.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 tampilan tersebut
:0
. Menemukan lokasi file otoritas X lebih sulit, karena dengan gdm yang diatur di bawah Debian squeeze atau Ubuntu 10.04, file tersebut berada dalam file dengan nama yang dibuat secara acak. (Anda tidak punya masalah sebelumnya karena versi sebelumnya dari gdm menggunakan pengaturan default, yaitu cookie yang disimpan di~/.Xauthority
.)Mendapatkan nilai-nilai variabel
Berikut adalah beberapa cara untuk mendapatkan nilai
DISPLAY
danXAUTHORITY
:Anda dapat secara sistematis memulai sesi layar dari desktop Anda, mungkin secara otomatis di skrip login Anda (dari
~/.profile
; tetapi lakukan hanya jika masuk di bawah X: tes jikaDISPLAY
diatur ke nilai yang dimulai dengan:
(yang harus mencakup semua kasus yang kemungkinan Anda miliki) untuk bertemu)). Di~/.profile
:Kemudian, di sesi ssh:
Anda juga bisa menyimpan nilai-nilai
DISPLAY
danXAUTHORITY
dalam file dan mengingat nilai-nilai tersebut. Di~/.profile
:Dalam sesi ssh:
Anda bisa mendeteksi nilai dari
DISPLAY
danXAUTHORITY
dari proses yang berjalan. Ini lebih sulit untuk diotomatisasi. Anda harus mengetahui PID dari suatu proses yang terhubung ke tampilan yang ingin Anda kerjakan, kemudian dapatkan variabel lingkungan dari/proc/$pid/environ
(eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
¹).Menyalin cookie
Pendekatan lain (mengikuti saran dari Arrowmaster ) adalah untuk tidak mencoba mendapatkan nilai
$XAUTHORITY
dalam sesi ssh, tetapi sebaliknya membuat sesi X menyalin cookie-nya~/.Xauthority
. Karena cookie dihasilkan setiap kali Anda masuk, itu tidak masalah jika Anda menyimpan nilai-nilai basi~/.Xauthority
.Mungkin ada masalah keamanan jika direktori rumah Anda dapat diakses melalui NFS atau sistem file jaringan lainnya yang memungkinkan administrator jarak jauh untuk melihat isinya. Mereka masih harus 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 bukan masalah (tidak ada koneksi X TCP).
Untuk menyalin cookie ketika Anda masuk ke sesi X desktop Anda, tambahkan baris berikut ke
~/.xprofile
atau~/.profile
(atau skrip lain yang dibaca saat Anda masuk):¹ Pada prinsipnya ini tidak memiliki kutipan yang tepat, tetapi dalam contoh khusus ini
$DISPLAY
dan$XAUTHORITY
tidak akan mengandung metacharacter shell.sumber
~/.xprofile
yang seharusnya hanya dijalankan selama X login dan membuatnya membuat / memperbarui~/.Xauthority
dengan info yang benar. Apakah tautan simbolik sudah cukup?~/.Xauthority
.xauth extract - $DISPLAY | xauth -f "$HOME/.Xauthority" merge -
dalam~/.xprofile
menyelesaikan kasus $ DISPLAY's multi?Saya memecahkan masalah ini dengan menambahkan
untuk
~/.xprofile
. Saya tidak tahu apakah ini sepenuhnya aman (saya akan sangat tertarik untuk mendengar apa yang dipikirkan orang yang lebih berpengetahuan), tapi saya menduga itu jauh lebih baik daripada mematikan kontrol akses (denganxhost +
) seperti yang umumnya disarankan ketika Anda google untuk masalah ini.sumber
localuser
alamat yang ditafsirkan server sepenuhnya aman. Debian bahkan melakukan ini secara default sebagai bagian dari proses masuk (dalam/etc/X11/Xsession.d/35x11-common_xhost-local
). Lihat halaman manual Xsecurity untuk lebih jelasnya.xhost +
mungkin cukup dalam banyak kasus ...xhost(1)
danXsecurity(7)
untuk dokumen). Dengan sendirinya, perintah ini tidak mengizinkan segala jenis akses jarak jauh atau penerusan X11 (yang biasanya lebih disukai mekanisme "kue ajaib"xhost
).Kamu butuh
export DISPLAY=:0.0
sumber
Bekerja untuk saya, debian wheezy -> ubuntu trusty.
Catatan: dalam hal ini server tidak menjalankan manajer tampilan, ini adalah mesin virtual 'tanpa kepala' tanpa kartu grafis atau monitor terpasang.
Layar X pada laptop menunjukkan output xterm yang berjalan di server.
Debug menggunakan:
strace
akan menumpahkan banyak detail berdarah tentang apa yang dilakukannya, Anda harus bisa menebak di mana ia macet - menunggu koneksi atau apa pun.Dalam satu baris ..
sumber