Lấy kích thước cửa sổ trong vỏ


18

Tôi muốn lấy kích thước của cửa sổ hiện tại từ tập lệnh shell ...

Thực sự không có gì khác để nói ... Tôi thích sử dụng wmctrl.

Câu trả lời:


23
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ể grepcutxuố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 sẽ sử dụng nó!
Allan

1
Tôi thích cách máy tính của bạn được gọi là bert :)
drnessie

5

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"

2

Sử dụng xprophoặc xwininfo. Cả hai đều mặc định, không cần cài đặt

Ví dụ sử dụng:

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ác bài viết khác trong đó đã được sử dụng

Đặ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:


Ông phổ biến, thêm một ví dụ;)
AB

Đã thêm chúng sau một năm;) Nhưng tốt hơn là không bao giờ, phải không?
Sergiy Kolodyazhnyy

0

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.


2
Chắc chắn một kịch bản shell bằng cách nào đó có thể truy vấn khách hàng X cho hình học của họ? Khác ứng dụng X sẽ được viết như thế nào?
djeikyb

@djeikyb họ được viết là khách hàng X và liên lạc với máy chủ X. Các tập lệnh Shell chạy trong trình bao, có thể có hoặc không chạy trong môi trường thậm chí có máy chủ X và không nên quan tâm đến X.
psusi

2
Có thể hiểu được, vâng. Nhưng có cách giải quyết! Sử dụng wmctrl, một gói từ repo, bạn có thể di chuyển, thay đổi kích thước, thu nhỏ và thậm chí thay đổi không gian làm việc!
drnessie

Theo logic @ psusi's, môi trường máy tính để bàn không nên tồn tại. Sau khi tất cả, họ chỉ là một bộ sưu tập khổng lồ của kịch bản tương tác với các phần mềm viết cho X.
andyn

0

Tôi thấy tput colslàm việc khá độc đáo!


2
Cảm ơn sự đóng góp của bạn. Tôi đề nghị cải thiện câu trả lời của bạn: giải thích những gì nó làm, sửa đổi lệnh để có được số dòng là tốt. Có thể chỉ ra cách sử dụng kết quả trong tập lệnh shell. - Xem các câu trả lời đánh giá hàng đầu làm ví dụ.
guntbert

Suy ra từ OP đề cập 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.
andyn

0

Có 3 màn hình, đầu ra này có 3 dòng với kích thước:

xrandr | grep '*' | cut -d'*' -f1 | cut -d ' ' -f4
/* OUTPUT *
* 3840x2160
* 1920x1080
* 1920x1080
***********/
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.