Có thể truy xuất quy trình / tiêu đề cửa sổ đang hoạt động trong Gnome không?


28

Tôi cần một giải pháp để nhận thông tin cửa sổ đang hoạt động (tập trung) hiện tại trên máy tính để bàn Gnome 2. Tôi chủ yếu quan tâm đến quá trình chạy tiêu đề cửa sổ và cửa sổ đó.

Có thể không?

DUNG DỊCH:

Lấy tiêu đề cửa sổ:

xwininfo -root -children | grep $(printf '%x\n' $(xdotool getwindowfocus)) | grep -oEi '"[^"]+"' | head -1

Lấy tên quy trình:

ps -e | grep $(xdotool getwindowpid $(xdotool getwindowfocus)) | grep -v grep | awk '{print $4}'

hoặc là:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

Câu trả lời:


17

Bạn có thể sử dụng xdotool , một công cụ tự động hóa cửa sổ X đa năng.

focused_window_id=$(xdotool getwindowfocus)
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")

(Tôi không biết sự khác biệt giữa tập trung và hoạt động là gì.)

(Tôi nghĩ wmctrl có thể làm điều này, nhưng dường như là không.)


26

Nó đơn giản như thế này:

xdotool getactivewindow getwindowname

Chúc may mắn hy vọng nó làm việc cho bạn!


Điều này hoạt động, bất cứ ai có thể giải thích tại sao nó đã bị hạ cấp?
lfzawacki

7

Đơn giản hơn (IMO) so với giải pháp của OP (tức là không có ps, grepawk), để có được tên quy trình:

cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm

Hoặc nếu bạn muốn kết thúc dòng:

echo $(cat /proc/$(xdotool getwindowpid $(xdotool getwindowfocus))/comm)

Vâng, cat /proc/là tốt đẹp (và nhanh hơn nhiều, vì nó không liên quan đến việc gặt hái toàn bộ psđầu ra). Tôi đã thêm nó vào giải pháp trong phần thân câu hỏi, vì vậy người dùng trong tương lai sẽ có thể tìm thấy nó.
Rogach

4

Hãy thử lệnh xwininfo, http://www.xfree86.org/4.2.0/xwininfo.1.html , nó chắc chắn trả về tiêu đề cửa sổ và theo như quá trình, vâng ...

X đã gán cho nó một ID và trở thành PID chính của cửa sổ và cũng sẽ che giấu nó theo mặc định, vì vậy, giả sử rằng Gnome có NET_WM_PID được hỗ trợ, vì bản vá này từ năm 2001 cho thấy nó có, http://mail.gnome.org/ lưu trữ / gtk-devel-list / 2001-Tháng 10 / Spy00238.html , sau đó chúng tôi có thể xem lại bài đăng này, http://www.mail-archive.com/devel@xfree86.org/msg05809.html , nơi tác giả viết một chương trình C ngắn để chuyển đổi ID cửa sổ thành PID, voila.


Nhưng dường như điều đó xwininfođòi hỏi tôi phải tự chọn cửa sổ cần thiết. Tôi hy vọng có một cách để có được cửa sổ tập trung từ bash.
Rogach

Một cái gì đó như trong, `xwininfo -root -children | grep -oEi 'Id cửa sổ: (? [0-9a-zA-Z] +) | grep -oEi '(? 0-9a-zA-Z)' - chỉnh sửa: ngón tay của tôi bị trượt, regex của tôi cho id cửa sổ rất tệ. kiểm tra trang web khác này để tham khảo khác nhau: deefgoat.com/software/riheads/How_it_works.html
rhoyerboat

Lệnh này chỉ cung cấp id cửa sổ "root" chứ không phải id hoạt động :(
Rogach

1

Tôi biết câu hỏi đã cũ, nhưng tôi cảm thấy xpropcũng nên được đề cập ở đây. Nó có sẵn trong X. Nó có thể được sử dụng theo cách tương tác:

  1. xpropvà chọn cửa sổ bạn muốn bằng con trỏ chuột, sau đó
  2. WM_NAMEcung cấp cho bạn tiêu đề của cửa sổ, _NET_WM_PIDcung cấp cho pid

Hoặc bạn có thể trực tiếp cho biết xpropcửa sổ nào bạn cần bằng cách vượt qua -idhoặc -nametùy chọn. Sử dụng awkbạn có thể lấy id cửa sổ đang hoạt động và chuyển nó trở lại xpropnhư thế (lấy từ đây ):

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}")

Cuối cùng, bằng cách sử dụng Công cụ yêu thích của bạn ™ (ví dụ grephoặc sed), bạn có thể tìm ra các giá trị cần thiết. Ví dụ cho pidđầu ra của lệnh trên có thể được dẫn đến sed:sed -nE 's/^_NET_WM_PID.*= ([0-9]+)/\1/p'

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.