Làm cách nào để tìm vị trí (trên màn hình) của một cửa sổ trên dòng lệnh?


19

Tôi đang cố gắng viết một đoạn script nhỏ để giúp quản lý các cửa sổ của mình thông qua các phím tắt.

Để làm những gì tôi muốn, tôi cần có thể tìm vị trí và kích thước hiện tại của cửa sổ "hoạt động" (tập trung). Theo vị trí, ý tôi là tọa độ X, Y của cửa sổ trên màn hình nền và theo kích thước tôi có nghĩa là chiều cao và chiều rộng của cửa sổ.

Có một tiện ích dòng lệnh có thể lấy thông tin này?

Câu trả lời:


22

Bạn có thể nhận được tất cả thông tin cho cửa sổ hiện hoạt bằng cách sử dụng lệnh này:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

hoặc là

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Chỉ cần phân tích đầu ra cho tọa độ bạn cần. Dưới đây là một số lệnh hữu ích khi tương tác với windows:

  • xwininfo sẽ cung cấp cho bạn hình học tương đối và tuyệt đối.
  • xprop sẽ cho bạn biết rất nhiều thông tin, kể cả nếu cửa sổ đang hoạt động, nhưng không phải là hình học
  • xdpyinfo cũng sẽ giúp bạn nhận id của cửa sổ đang hoạt động, nhưng không có thêm thông tin.
  • wmctrl sẽ giúp bạn có một danh sách thông tin về các cửa sổ và cho phép bạn chọn cửa sổ hoạt động để sửa đổi, nhưng không phải thông tin.

Ví dụ: để thay đổi tiêu đề của cửa sổ đang hoạt động thành "Tên mới":

wmctrl -r :ACTIVE: -N "New Name"

Hoặc để thay đổi vị trí của cửa sổ đang hoạt động:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Xem xét wmctrlnếu bạn cần thay đổi một cái gì đó đơn giản, như hình học của cửa sổ. Cân nhắc sử dụng các tập lệnh khác được đề cập ở trên chỉ khi bạn muốn làm những việc phức tạp khác.


1
Tôi chỉ muốn lưu ý rằng tôi nhận được kết quả khác nhau khi chạy lệnh thứ hai. Đầu tiên hoạt động như tôi mong đợi.
TM.

1
Tôi sử dụng Arch nhưng nó có thể giúp ai đó ở đây trong tương lai. Cái thứ nhất không hoạt động với tôi, cái thứ hai không cung cấp kích thước chính xác có thể do WM. Nhưng sự kết hợp của cả hai đã làm việc. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
bảy

Cảm ơn! Nhưng tôi đồng ý với hai ý kiến ​​đầu tiên. Lệnh thứ hai, xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)hiển thị cho tôi một cửa sổ con (không có tên) của Terminal. Khi tôi chỉ xdpyinfo | grep focusnhận được focus: window 0x435b877, revert to Parent, và 0x435b877 là id của cửa sổ được trả về bởi lệnh đầu tiên (hoạt động với tôi). Đây là trên Trusty 14.04.1 LTS
nealmcb 2/2/2015

8

Với "xdotool", bạn có thể dễ dàng tương tác với các cửa sổ bằng các sự kiện bàn phím hoặc chuột.

Ví dụ về gửi một CtrlCchuỗi đến cửa sổ hoạt động:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Nếu bạn thực sự cần vị trí cửa sổ:

eval $(xdotool getmouselocation --shell); echo $X $Y

Để biết thêm hành động / tùy chọn kiểm tra trang người đàn ông .


Thú vị, nhưng tôi chỉ nhận được Error: Invalid key sequence 'ctrl-c'.
l0b0
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.