it-swarm-id.com

Apakah ada perintah untuk mencantumkan semua tampilan terbuka pada mesin?

Ketika SSH secara lokal masuk ke komputer saya (jangan tanya, ini solusinya), saya tidak bisa memulai aplikasi grafis tanpa menjalankan:

export DISPLAY=:0.0

Jika saya menjalankan ini terlebih dahulu dan kemudian menjalankan aplikasi grafis, semuanya berjalan lancar. Jika tidak, itu tidak berfungsi, tidak ada tampilan untuk dilampirkan.

Apakah ada perintah untuk mendaftarkan semua tampilan yang tersedia (yaitu: semua nilai yang mungkin) pada mesin?

78
Naftuli Kay

Jika Anda ingin koneksi X diteruskan melalui SSH, Anda harus mengaktifkannya di sisi server dan sisi klien. (Tergantung pada distribusinya, mungkin diaktifkan atau dinonaktifkan secara default.) Di sisi server, pastikan Anda memiliki X11Forwarding yes Di /etc/sshd_config (atau /etc/ssh/sshd_config atau di mana pun file konfigurasi berada). Di sisi klien, berikan opsi -X Ke perintah ssh , atau masukkan ForwardX11 di Anda ~/.ssh/config .

Jika Anda menjalankan ssh -X localhost, Anda akan melihat bahwa $DISPLAY Adalah (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 pernah Anda temui:

  • Tampilan lokal, tanpa apa pun sebelum :.
  • TCP menampilkan, 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 bahwa DISPLAY=:0 Tidak berfungsi dalam sesi SSH (tetapi ssh -X akan, jika diaktifkan di server; Anda tidak perlu repot dengan XAUTHORITY saat melakukan ssh -X)). Jika itu masalah, Anda perlu mengatur variabel lingkungan XAUTHORITY atau untuk mendapatkan pengguna lain cookie .

Untuk menjawab pertanyaan Anda yang sebenarnya:

  • Tampilan lokal sesuai dengan soket di /tmp/.X11-unix.

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • Tampilan jarak jauh berhubungan dengan membuka TCP port 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 seperti sshd, tidak ada cara untuk mengetahui dengan pasti apakah itu server X atau kebetulan.

Layar adalah argumen pertama ke Xorg. Anda dapat ps lalu grep Xorg keluar.

[[email protected] teste_geom]$ ps aux | grep Xorg
root      1584  5.3  1.0 156628 41708 tty1     Rs+  Jul22  22:56 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-a3kSKB/database -nolisten tcp vt1
braga     9110  0.0  0.0 109104   804 pts/1    S+   00:26   0:00 grep --color=auto Xorg

Anda kemudian dapat awk ini ke dalam format apa pun yang Anda perlukan.

16
Vitor Py
# Show all active login shells, with displays
$ w -oush

trunc-us tty1                      23:02  -bash
trunc-us tty7     :0                4days /sbin/upstart --user
trunc-us pts/4    :0                      w -oush

# Capture the Display part
$ w -oush | grep -Eo ' :[0-9]+'

 :0
 :0

# only unique lines
$ w -oush | grep -Eo ' :[0-9]+' | uniq

 :0

# trim off the leading space
$ w -oush | grep -Eo ' :[0-9]+' | uniq | cut -d \  -f 2

[Sunting: Saya menjalankan instance Xnest untuk melihat apakah ini akan menangkapnya - tidak; hanya menangkap shell login ('w' adalah kependekan dari 'who'). Kembali ke papan gambar untuk saya.] [Sunting: Ditemukan:

$ ls /tmp/.X11-unix

X0 X2

$ ls /tmp/.X11-unix | tr 'X' ':'
:0
:2

]

7
Fordi
ps e | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u

akan melakukan pekerjaan dengan mendaftar semua TAMPILAN saat ini. Anda juga dapat melihat tampilan yang ditetapkan untuk pengguna tertentu ($ usr) dengan:

ps e -u $usr | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u
4
lenroc

Dalam /tmp folder juga bisa ada .X??-lock file dengan ?? menunjukkan nomor sesi.

Anda perlu menghapus ini jika Anda ingin menggunakan kembali nomor sesi.

Anda dapat melihatnya menggunakan ls -a seperti biasa, file dimulai dengan . disembunyikan.

0
user177936