Câu trả lời:
wmctrl -lG
Sẽ cung cấp cho bạn một cái gì đó như:
oli@bert:~$ wmctrl -lG
0x0384c0d5 -1 1590 1030 330 170 bert N/A
0x01200023 -1 0 0 3840 1200 bert x-nautilus-desktop
0x01000003 -1 3840 2352 1920 24 bert Bottom Expanded Edge Panel
0x01000028 -1 0 2352 1920 24 bert Bottom Expanded Edge Panel
0x0500003e 0 676 252 1404 1015 bert Chromium
0x02e00021 0 3860 160 1361 1084 bert Liferea
0x02000047 0 6650 940 506 683 bert Social broadcast messages
0x04600004 0 4546 460 1263 833 bert oli@bert: ~
Với điều này, bạn có thể grep
và cut
xuống trên những cái này để bạn còn lại các giá trị hình học (cột 3-6).
Để trích dẫn trang man để bạn hiểu chính xác các cột là gì:
-l
Liệt kê các cửa sổ đang được quản lý bởi người quản lý cửa sổ. Một dòng là đầu ra cho mỗi cửa sổ, với dòng được chia thành các cột được phân tách không gian. Cột đầu tiên luôn chứa danh tính cửa sổ dưới dạng số nguyên thập lục phân và cột thứ hai luôn chứa số máy tính để bàn (a -1 được sử dụng để xác định cửa sổ dính). Nếu tùy chọn -p được chỉ định, cột tiếp theo sẽ chứa PID cho cửa sổ dưới dạng số nguyên thập phân. Nếu tùy chọn -G được chỉ định thì bốn cột số nguyên sẽ theo sau: x-offset, y-offset, chiều rộng và chiều cao. Cột tiếp theo luôn chứa tên máy khách. Phần còn lại của dòng chứa tiêu đề cửa sổ (có thể có nhiều khoảng trắng trong tiêu đề).
Tôi tin rằng wmctrl không có bất kỳ tùy chọn nào để tìm Id cửa sổ hoạt động trực tiếp.
Nếu ai đó biết cách thực hiện, tôi rất muốn biết ..
Điều đó nói rằng, đây là một vài tập lệnh in ra kích thước của cửa sổ đang hoạt động.
Đây là: wmctrl + xdotool ... (không sử dụng sed).
id=$(xdotool getactivewindow)
wmctrl -lpG | while read -a a; do w=${a[0]}; if (($((16#${w:2}))==id)) ; then echo -n "${a[5]} ${a[6]}"; break; fi; done
Đây là: xwininfo + xdotool + sed
xwininfo
là một phần của x11-utils
set $(xwininfo -id $(xdotool getactivewindow) \
|sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p" \
-e "s/^ \+Height: \([0-9]\+\).*/\1/p")
echo -n "$1 $2"
Sử dụng xprop
hoặc xwininfo
. Cả hai đều mặc định, không cần cài đặt
Cả hai lệnh đều biến con trỏ thành hình vuông / chéo để cho phép chọn một cửa sổ cụ thể.
$ xprop _NET_WM_OPAQUE_REGION
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Ngoài ra, người ta có thể chỉ định cửa sổ trên dòng lệnh ở dạng XID
$ xprop _NET_WM_OPAQUE_REGION -id 83886090
_NET_WM_OPAQUE_REGION(CARDINAL) = 0, 0, 984, 377
$ xwininfo -id 83886090 | awk -F ':' '/Width/ || /Height/{print $2}'
984
377
Đặc biệt, xwininfo
đã được tôi tích cực sử dụng cho các tập lệnh, chẳng hạn như trên các câu hỏi AskUbfox này:
Shell script không biết hoặc không quan tâm đến windows. Tốt nhất là họ chạy trong một thiết bị đầu cuối (có thể hoặc không thể được hiển thị trong một cửa sổ). Nếu bạn muốn lấy chiều rộng và chiều cao của thiết bị đầu cuối bằng ký tự, hãy sử dụng tiện ích stty.
Tôi thấy tput cols
làm việc khá độc đáo!
wmctrl
, chúng ta không nói về giao diện điều khiển mà là các cửa sổ môi trường đồ họa.