(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 dalam DISPLAY
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 cookie 123456
”. File otoritas X biasanya ditunjukkan dalam XAUTHORITY
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
dan XAUTHORITY
:
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 jika DISPLAY
diatur ke nilai yang dimulai dengan :
(yang harus mencakup semua kasus yang kemungkinan Anda miliki) untuk bertemu)). Di ~/.profile
:
case $DISPLAY in
:*) screen -S local -d -m;;
esac
Kemudian, di sesi ssh:
screen -d -r local
Anda juga bisa menyimpan nilai-nilai DISPLAY
dan XAUTHORITY
dalam file dan mengingat nilai-nilai tersebut. Di ~/.profile
:
case $DISPLAY in
:*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
esac
Dalam sesi ssh:
. ~/.local-display-setup.sh
screen
Anda bisa mendeteksi nilai dari DISPLAY
dan XAUTHORITY
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):
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 mengandung metacharacter shell.