Tìm ra ứng dụng dưới chuột


11

Nó thường xảy ra với tôi, rằng một ứng dụng bật lên một câu hỏi và tôi tự hỏi cửa sổ này chính xác thuộc về ứng dụng nào, bởi vì nếu tôi nhìn vào Trình khởi chạy thì không có ứng dụng nào hiện có tiêu điểm (không có hình tam giác màu trắng ở bên phải của biểu tượng khi tôi tập trung cửa sổ tin nhắn)

Có cách nào để tìm ra sự thuộc về của một cửa sổ đang mở không?

Câu trả lời:


11

Sử dụng xdotool

Trước tiên hãy chắc chắn rằng xdotoolcó sẵn trên hệ thống của bạn:

sudo apt-get install xdotool

Lệnh sau sẽ in tên quy trình của cửa sổ hiện đang được lấy nét:

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

Để cho bản thân nhiều thời gian hơn để tập trung vào cửa sổ / nhấp vào nó, bạn có thể đặt trước một khoảng thời gian ngủ nhỏ:

sleep 5 && cat "/proc/$(xdotool getwindowpid "$(xdotool getwindowfocus)")/comm"

Tên quy trình sẽ được hiển thị sau một khoảng thời gian ngắn.


Sử dụng wininfo

Wininfo là một tiện ích đồ họa hiển thị nhiều thông tin khác nhau trên các cửa sổ và các thuộc tính của chúng, bao gồm cả PID (ID tiến trình) được liên kết với cửa sổ:

hình ảnh của PID trong wininfo

wininfo nên có sẵn trong kho chính thức:

sudo apt-get install wininfo

Khi đã xác định được PID của cửa sổ, bạn có thể tra cứu tên quy trình liên quan đến nó. Có nhiều cách khác nhau để làm điều này, ví dụ bằng cách xem /proc:

$ cat /proc/17002/comm
gnome-terminal

Đây sẽ là tên quá trình liên quan đến PID 17002.

Một cách thanh lịch hơn cho phép kiểm tra bối cảnh cây quy trình, như được đề xuất bởi @Rmano :

$ pstree -a -s -l -p -u 17002
init,1
  └─lightdm,1900
      └─lightdm,3202 --session-child 12 19
          └─lxsession,3307,glutanimate -s LXDE -e LXDE
              └─openbox,3362 --config-file /home/glutanimate/.config/openbox/lxde-rc.xml
                  └─gnome-terminal,17002
                      ├─bash,1841
                      ├─bash,2332
                      ├─bash,2424
                      │   └─pstree,2484 -a -s -l -p -u 17002
                      ├─gnome-pty-helpe,1840
                      ├─{gnome-terminal},1835
                      ├─{gnome-terminal},1836
                      ├─{gnome-terminal},1842
                      └─{gnome-terminal},2269

Tất nhiên, bạn cũng có thể kết hợp pstreevới xdotooltùy chọn ở trên (cảm ơn @ rubo77 vì đã chỉ ra điều này!):

sleep 2; pstree -spaul $(xdotool getwindowpid "$(xdotool getwindowfocus)")

Nguồn:

/unix//q/38867/29245

http://www

/superuser//q/632979/170160


1
+1 cho câu trả lời hay. Nếu PID là con của ứng dụng chính, bạn có thể đề xuất cách sử dụng ứng dụng pstree -a -s -l -p -u $PIDnày khá hay ...
Rmano

@Rmano: Ồ, thật là gọn gàng! Tôi đã thêm nó vào câu trả lời.
Glutimate

Các echo $()lệnh của bạn không cần thiết.
Tạm dừng cho đến khi có thông báo mới.

@DennisWilliamson Cảm ơn con trỏ. Đã chỉnh sửa.
Glutimate

1
xdotool getwindowpid "$(xdotool getwindowfocus)"xdotool getwindowfocus getwindowpid
Veedrac

2

Bạn có thể tạo một phím tắt bằng lệnh này:

zenity --info --text $(xprop $win_id WM_CLASS | cut -d" " -f4-)

1
Đó là một giải pháp rất hay, +1. Tuy nhiên, một vấn đề nhỏ hơn: nếu ứng dụng không gán WMCLASS thích hợp (thường là trường hợp với các hộp thoại khó hiểu), xprop sẽ không giúp ích được gì.
Glutimate

Bạn đã có một ví dụ cho một ứng dụng (cửa sổ bật lên) không hoạt động, cảm ơn bạn.
TuKsn

1
Tôi không có bất cứ điều gì cụ thể trong tay nhưng tôi nhớ có vấn đề với một số ứng dụng Java và các chương trình tối nghĩa khác không có bộ WMCLASS (hoặc được đặt thành một cái gì đó chung chung như java-window). Tôi đã gặp các loại vấn đề này một thời gian trước đây khi tôi đang cố gắng thực hiện các quy tắc dành riêng cho ứng dụng trong cấu hình trình quản lý cửa sổ của mình.
Glutimate

1
Bạn có quyền có một vấn đề tương tự với các ứng dụng tạo ra với QML / qt -> bugreports.qt-project.org/browse/QTBUG-29396
TuKsn

Làm thế nào để bạn tạo một phím tắt cho điều này? Tôi đã thử, như được hiển thị bên dưới, nhưng sự thoải mái không xuất hiện
rubo77

2

Bạn có thể sử dụng xpropđể lấy ID tiến trình của cửa sổ được nhấp:

xprop $win_id _NET_WM_PID

sau đó phân tích nó với pstree:

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)

Điều này bạn có thể chuyển hướng đến một cửa sổ thông tin văn bản với

pstree -spaul $(xprop $win_id _NET_WM_PID | cut -d" " -f3-)|zenity --text-info --title "pstree of clicked Window"

Tôi đã cố gắng tạo một phím tắt cho lệnh cuối cùng này (nếu bạn cần nó thường xuyên), nhưng vì một số lý do Điều này không hoạt động.


0

Với xdtool và yad được cài đặt, bạn có thể có một Ứng dụng GUI đẹp.

#!/bin/bash
while true; do cat "/proc/$(xdotool getwindowpid "$(xdotool 
getwindowfocus)")/comm"; sleep 1; echo -e '\f'; done | yad --no- 
buttons --no-focus --geometry 250x10 --fixed --text-info -- 
title="Active window" --listen
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.