Jika Anda ingin koneksi X diteruskan melalui SSH, Anda harus mengaktifkannya di sisi server dan sisi klien. (Tergantung pada distribusi, dapat diaktifkan atau dinonaktifkan secara default.) Di sisi server, pastikan bahwa Anda memiliki X11Forwarding yes
di /etc/sshd_config
(atau /etc/ssh/sshd_config
atau di mana pun file konfigurasi). Pada sisi klien, lulus -X
pilihan untuk ssh
perintah , atau meletakkan ForwardX11
di Anda ~/.ssh/config
.
Jika Anda menjalankan ssh -X localhost
, Anda harus melihat itu $DISPLAY
(mungkin) localhost:10.0
. Kontras dengan :0.0
, yang merupakan nilai ketika Anda tidak terhubung melalui SSH. (Bagian .0
mungkin dihilangkan; ini adalah nomor layar, tetapi beberapa layar jarang digunakan.) Ada dua bentuk tampilan X yang mungkin Anda temui:
- Tampilan lokal, tanpa apa pun sebelum
:
.
- Menampilkan TCP, dengan nama host sebelum
:
.
Dengan ssh -X localhost
, Anda dapat mengakses server X melalui kedua tampilan, tetapi aplikasi akan menggunakan metode yang berbeda: :NUMBER
mengakses server melalui soket lokal dan memori bersama, sedangkan HOSTNAME:NUMBER
mengakses server melalui TCP, yang lebih lambat dan menonaktifkan beberapa ekstensi.
Perhatikan bahwa Anda memerlukan bentuk otorisasi untuk mengakses server X, yang disebut cookie dan biasanya disimpan di belakang layar dalam file ~/.Xauthority
. Jika Anda menggunakan ssh untuk mengakses akun pengguna yang berbeda, atau jika distribusi Anda menempatkan cookie dalam file yang berbeda, Anda mungkin menemukan itu DISPLAY=:0
tidak berfungsi dalam sesi SSH (tetapi ssh -X
akan, jika diaktifkan di server; Anda tidak pernah perlu dipusingkan XAUTHORITY
saat melakukan ssh -X
). Jika itu masalah, Anda perlu mengatur XAUTHORITY
variabel lingkungan atau mendapatkan cookie pengguna lain .
Untuk menjawab pertanyaan Anda yang sebenarnya:
Tampilan lokal sesuai dengan soket masuk /tmp/.X11-unix
.
(cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
Remote display sesuai dengan port TCP terbuka di atas 6000; mengakses nomor tampilan N pada mesin M dilakukan dengan menghubungkan ke port TCP 6000 + N pada mesin M. Dari mesin M sendiri:
netstat -lnt | awk '
sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
}'
(Sisa dari poin ini hanya untuk kepentingan akademis.)
Dari komputer lain, Anda dapat menggunakan nmap -p 6000-6099 host_name
untuk menyelidiki port TCP terbuka dalam kisaran yang biasa. Saat ini jarang ada server X yang mendengarkan pada soket TCP, terutama di luar antarmuka loopback.
Sebenarnya, aplikasi lain bisa menggunakan port dalam jangkauan yang biasanya digunakan oleh server X. Anda dapat mengetahui apakah server X sedang mendengarkan dengan memeriksa program mana yang portnya terbuka.
lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
Jika itu menunjukkan sesuatu yang ambigu sshd
, tidak ada cara untuk mengetahui dengan pasti apakah itu server X atau kebetulan.
( DISPLAY=:0 yourapp & )
.