Câu trả lời:
Tôi đã đưa ra lệnh này sau nhiều lần tìm kiếm và thử:
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'
Một mẫu của đầu ra là:
DISPLAY=:0 (unity-files-dae)
DISPLAY=:0 (unity-music-dae)
DISPLAY=:0 (unity-lens-vide)
DISPLAY=:0 (zeitgeist-daemo)
DISPLAY=:0 (zeitgeist-fts)
DISPLAY=:0 (zeitgeist-datah)
DISPLAY=:0 (cat)
DISPLAY=:0 (unity-scope-vid)
DISPLAY=:0 (unity-musicstor)
DISPLAY=:0 (dconf-service)
DISPLAY=:0 (gdu-notificatio)
DISPLAY=:0 (telepathy-indic)
DISPLAY=:0 (mission-control)
DISPLAY=:0 (goa-daemon)
DISPLAY=:0 (VBoxXPCOMIPCD)
DISPLAY
trong mỗi tập tin. Các tệp đó thực sự đang trong quá trình chạy, vì vậy mọi tệp có chứa từ đó DISPLAY
có nghĩa là quá trình này đang sử dụng nó. Bạn không thể có được tên quy trình đầy đủ vì tên trong đầu ra là tên tệp được thành lập ion /proc
nên đơn giản là bạn không thể biết nhiều hơn tên được cung cấp.
Với một sửa đổi nhỏ đối với tập lệnh Maythux, chúng ta cũng có thể nhận được PID của các quy trình bằng cách sử dụng biến HIỂN THỊ.
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '[0-9]* (.*)' $file/stat; done | sed 'N;s/\n/\t/' |column -t |sort -n -k2
Đầu ra là:
DISPLAY=:0 590 (lxsession)
DISPLAY=:0 645 (unclutter)
DISPLAY=:0 705 (gvfsd)
DISPLAY=:0 710 (gvfsd-fuse)
DISPLAY=:0 727 (openbox)
DISPLAY=:0 729 (lxpolkit)
DISPLAY=:0 732 (lxpanel)
DISPLAY=:0 734 (pcmanfm)
DISPLAY=:0 772 (menu-cached)
DISPLAY=:0 781 (gvfs-udisks2-vo)
DISPLAY=:0 791 (gvfs-gphoto2-vo)
DISPLAY=:0 795 (gvfs-mtp-volume)
DISPLAY=:0 799 (gvfs-afc-volume)
DISPLAY=:0 804 (gvfs-goa-volume)
DISPLAY=:0 816 (gvfsd-trash)
DISPLAY=:0 21053 (npm)
DISPLAY=:0 21102 (sh)
DISPLAY=:0 21103 (sh)
DISPLAY=:0 21104 (node)
DISPLAY=:0 21110 (electron)
DISPLAY=:0 21112 (electron)
DISPLAY=:0 21149 (electron)
DISPLAY=:0 21154 (electron)
DISPLAY=:0 21180 (rec)
Đó là một số kịch bản dòng lệnh khá tiện lợi! Tôi sẽ tạo một bản sao ở kịch bản đó trong trường hợp tôi phải hack nó để tìm thứ khác.
Lý tưởng nhất là tất cả các quy trình hiện tại tương ứng với các chương trình mà bạn thực hiện trên máy cục bộ, đăng nhập bài đăng, sẽ mang cùng một biến hiển thị như bảng điều khiển pts (thiết bị đầu cuối giả) đầu tiên của bạn.
Chẳng hạn, khi bạn mở phiên đầu cuối đầu tiên (gnome-terminal) và chạy lệnh who hoặc w, bạn sẽ thấy một số đầu ra như thế này:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
hoặc một số người có thể trông như thế này (nhưng không phải trường hợp của bạn)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
sử dụng trình quản lý hiển thị ánh sáng nếu biến HIỂN THỊ được đặt khác nhau để thực hiện đăng nhập vỏ (ví dụ: 0,0), thì biến môi trường cho HIỂN THỊ sẽ mang lại biến hiển thị giống như biến hiển thị sau đăng nhập của pts mở đầu tiên (: 0,0), nhưng biến chủ, khi đăng nhập, vẫn sẽ là (: 0).
Bằng cách lặp lại biến HIỂN THỊ hoặc chạy bộ được đặt thành ít hơn như hiển thị bên dưới:
:~$ echo $DISPLAY
hoặc là
:~$ set | less
bạn cũng có thể kiểm tra biến số hiển thị hiện tại của phiên và xem nó được đặt thành gì, để thực hiện đăng nhập shell. Về cơ bản, biến hiển thị của các quá trình bạn thực hiện, sẽ có cùng biến hiển thị với pts mở đầu tiên của bạn, đăng nhập.
Đầu ra của tập lệnh mà bạn đã đăng, cho thấy rằng các pts mở đầu tiên của bạn sẽ có cùng biến hiển thị với thông tin đăng nhập của người quản lý hiển thị của bạn, trong trường hợp này: 0.
Bây giờ cho ví dụ thứ hai, đầu ra sẽ trông giống như thế này:
DISPLAY=:0.0 (gvfs-udisks2-vo)
DISPLAY=:0.0 (zeitgeist-daemo)
DISPLAY=:0.0 (zeitgeist-fts)
DISPLAY=:0.0 (zeitgeist-datah)
DISPLAY=:0.0 (gvfs-mtp-volume)
DISPLAY=:0.0 (gvfs-gphoto2-vo)
DISPLAY=:0.0 (gvfs-afc-volume)
DISPLAY=:0.0 (geyes_applet2)
DISPLAY=:0.0 (indicator-apple)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (python)
DISPLAY=:0.0 (gvfsd-trash)
DISPLAY=:0.0 (indicator-keybo)
DISPLAY=:0.0 (gvfsd-burn)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (gnome-terminal)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (sed)
Ngoài ra để đọc thêm, bạn có thể xem các trang man cho ptmx
$ man ptmx
Điều này có thể cho bạn một cái nhìn sâu sắc về mối quan hệ chủ-nô của các thiết bị đầu cuối giả.
Tôi hi vọng cái này giúp được!
Ngoài ra, bạn đã nhận được kịch bản đó ở đâu?