Có một lệnh để liệt kê tất cả các màn hình mở trên máy không?


76

Khi SSH cục bộ vào máy tính của tôi (đừng hỏi, đó là một cách giải quyết), tôi không thể khởi động các ứng dụng đồ họa mà không chạy:

export DISPLAY=:0.0

Nếu tôi chạy cái này trước và sau đó chạy một ứng dụng đồ họa, mọi thứ sẽ ổn. Nếu không, nó không hoạt động, không có màn hình để đính kèm.

Có một lệnh để liệt kê tất cả các màn hình có sẵn (nghĩa là: tất cả các giá trị có thể) trên một máy không?


Một cách sạch hơn để khởi chạy các ứng dụng từ một thiết bị đầu cuối là ( DISPLAY=:0 yourapp & ).
tộc

3
Để có được số hiển thị đó từ một tập lệnh dòng lệnh, hãy thử w. Thông tin thêm: liệt kê tên hiển thị X hiện có?
aexl

Câu trả lời:


80

Nếu bạn muốn kết nối X được chuyển tiếp qua SSH, bạn cần kích hoạt nó ở cả phía máy chủ và phía máy khách. (Tùy thuộc vào sự phân bố, nó có thể được kích hoạt hay vô hiệu hóa theo mặc định.) Về phía server, hãy chắc chắn rằng bạn có X11Forwarding yestrong /etc/sshd_config(hoặc /etc/ssh/sshd_confighoặc bất cứ nơi nào các tập tin cấu hình). Về phía khách hàng, chuyển -Xtùy chọn cho sshlệnh hoặc đặt ForwardX11vào của bạn ~/.ssh/config.

Nếu bạn chạy ssh -X localhost, bạn sẽ thấy đó $DISPLAYlà (có thể) localhost:10.0. Tương phản với :0.0, đó là giá trị khi bạn không được kết nối qua SSH. (Phần .0này có thể bị bỏ qua; đó là số màn hình, nhưng hiếm khi sử dụng nhiều màn hình.) Có hai dạng màn hình X mà bạn có thể gặp phải:

  • Hiển thị cục bộ, không có gì trước :.
  • TCP hiển thị, với tên máy chủ trước :.

Với ssh -X localhost, bạn có thể truy cập máy chủ X thông qua cả hai màn hình, nhưng các ứng dụng sẽ sử dụng một phương pháp khác: :NUMBERtruy cập máy chủ qua ổ cắm cục bộ và bộ nhớ dùng chung, trong khi HOSTNAME:NUMBERtruy cập máy chủ qua TCP, chậm hơn và vô hiệu hóa một số tiện ích mở rộng.

Lưu ý rằng bạn cần một hình thức ủy quyền để truy cập máy chủ X, được gọi là cookie và thường được lưu trữ phía sau hậu trường trong tệp ~/.Xauthority. Nếu bạn đang sử dụng ssh để truy cập tài khoản người dùng khác hoặc nếu bản phân phối của bạn đặt cookie vào một tệp khác, bạn có thể thấy rằng DISPLAY=:0nó không hoạt động trong phiên SSH (nhưng ssh -Xsẽ, nếu nó được bật trong máy chủ; bạn sẽ không bao giờ cần phải lộn xộn XAUTHORITYkhi làm ssh -X). Nếu đó là một vấn đề, bạn cần đặt XAUTHORITYbiến môi trường hoặc lấy cookie của người dùng khác .

Để trả lời câu hỏi thực tế của bạn:

  • Màn hình cục bộ tương ứng với một ổ cắm trong /tmp/.X11-unix.

    (cd /tmp/.X11-unix && for x in X*; do echo ":${x#X}"; done)
    
  • Màn hình từ xa tương ứng với các cổng TCP mở trên 6000; truy cập số hiển thị N trên máy M được thực hiện bằng cách kết nối với cổng TCP 6000 + N trên máy M. Từ chính máy M:

    netstat -lnt | awk '
      sub(/.*:/,"",$4) && $4 >= 6000 && $4 < 6100 {
        print ($1 == "tcp6" ? "ip6-localhost:" : "localhost:") ($4 - 6000)
      }'
    

    (Phần còn lại của gạch đầu dòng này chỉ có lợi cho học tập.)

    Từ một máy khác, bạn có thể sử dụng nmap -p 6000-6099 host_nameđể thăm dò các cổng TCP mở trong phạm vi thông thường. Ngày nay, hiếm khi có máy chủ X lắng nghe ổ cắm TCP, đặc biệt là bên ngoài giao diện loopback.

    Nói đúng ra, một ứng dụng khác có thể đang sử dụng một cổng trong phạm vi thường được sử dụng bởi các máy chủ X. Bạn có thể biết liệu máy chủ X có lắng nghe hay không bằng cách kiểm tra chương trình nào có cổng mở.

    lsof -i -n | awk '$9 ~ /:60[0-9][0-9]$/ {print}'
    

    Nếu điều đó cho thấy một cái gì đó mơ hồ như thế sshd, thì không có cách nào để biết chắc chắn đó là máy chủ X hay sự trùng hợp.


15

Màn hình là đối số đầu tiên Xorg. psSau đó bạn có thể grep Xorgra.

[braga@coleman 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

Bạn có thể sau đó awkvào bất cứ nơi nào bạn cần định dạng.


10
Điều này không phát hiện các màn hình được tạo bởi một máy chủ khác ngoài Xorg, ví dụ Xvnc .
cjm

5
ps aux |grep Xlàm việc tốt hơn cho tôi
tộc

6
whiển thị tất cả những người đã đăng nhập và hiển thị của họ.
Plenus Franckly

2
Lưu ý rằng đối số với Xorg là (ít nhất là bây giờ, trong năm 2016) là tùy chọn và (ít nhất là trên Fedora) thường không có, vì vậy phương pháp này không còn hoạt động nữa.
BRPocock

Nếu vì một lý do nào đó, chỉ cần thiết lập môi trường, var sẽ không hoạt động ... hãy thử chuẩn bị nó thành lệnh DISPLAY=:0 netsurf "https://medium.com/"... hoặc sử dụng export DISPLAY=:0để chia sẻ var với tiến trình, không chỉ là shell
Ray Foss

7
# 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

[Chỉnh sửa: Tôi đã chạy một ví dụ Xnest để xem liệu điều này có bắt được nó không - nó không; nó chỉ chụp các shell đăng nhập ('w' là viết tắt của 'who'). Quay lại bảng vẽ cho tôi.] [Chỉnh sửa: Tìm thấy nó:

$ ls /tmp/.X11-unix

X0 X2

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

]


1
Điều đó ... kỳ quặc ... tôi tự hỏi không có lời giải thích nào.
Fordi

(liên quan đến GDM chạy trên màn hình 1024 đối với tôi) Tôi không thể sao chép lại lần thứ hai. Lúc đó tôi đang dùng thử xrdp, cửa sổ chuyển tiếp X11 và một vài khách hàng VNC. Có vẻ như trong một cài đặt thông thường, GDM sẽ chạy trên X0 ... hoặc X1 nếu bạn nhấn nút "đăng nhập với tư cách người dùng khác" trên màn hình khóa. Phương pháp thứ hai của bạn đã làm việc cho tôi trên Fedora 23
Ray Foss

Tôi đã tìm thấy một cái gì đó trên Display 1024 bằng cách sử dụng lệnh của bạn, nhưng tôi thấy không có gì chạy ở đó ... bằng cách sử dụng ps xeww | grep DISPLAY=:1024bây giờ. Tôi đang chạy chrome-remote-desktop trên màn hình 20.
Ray Foss

wkhông hoạt động nếu không có ứng dụng nào đang chạy trên máy chủ x (bao gồm không có trình quản lý cửa sổ và không có máy tính để bàn). Nhưng ls /tmp/.X11-unixkhông làm việc.
12431234123412341234123

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

sẽ thực hiện công việc bằng cách liệt kê tất cả các HIỂN THỊ hiện tại. Ngoài ra, bạn có thể thấy các màn hình được chỉ định cho một người dùng cụ thể ($ usr) với:

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

Đó có phải là thứ hai có nghĩa là ps e -u $USER | grep -Po " DISPLAY=[\.0-9A-Za-z:]* " | sort -u?
Alexx Roche

0

Trong /tmpthư mục cũng có thể có .X??-lockcác tệp ??chỉ ra số phiên.

Bạn cần xóa chúng nếu bạn muốn sử dụng lại số phiên.

Bạn có thể thấy chúng bằng cách sử dụng ls -anhư các tệp thông thường bắt đầu bằng một .bị ẩn.


Đó là những phiên hiển thị?
phk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.