Làm cách nào để có được thông tin cửa sổ chính xác (kích thước, v.v.) trong Linux (X)?


22

Làm thế nào tôi có thể có được thông tin cửa sổ chính xác trong Linux? Tôi biết rằng tôi có thể sử dụng wmctrl để lấy kích thước cửa sổ, nhưng kích thước thực tế của cửa sổ có thể thay đổi do trang trí cửa sổ. Tôi cần các thông tin và phương pháp sau:

* precise window dimensions
* precise available screen space (excluding panels like gnome-panel)
* the ability to set a window to be a certain size, including decorations

cách nào tốt nhất để làm việc này?

Cảm ơn trước!


Nếu bạn quan tâm nhiều hơn đến phía python, chúng tôi có thể di chuyển trang này sang trang web chị em của chúng tôi về lập trình, StackOverflow.com. Chỉ cần cho chúng tôi biết.
Gnoupi

@Gnoupi: cảm ơn, nhưng đây thực sự là một bài đăng chéo từ SO, vì một người dùng đề nghị tôi có thể nhận được câu trả lời tốt hơn ở đây. Câu hỏi ban đầu là tại stackoverflow.com/questions/3233660/ .
mellort

ok, tôi hiểu rồi Trong trường hợp này, tôi nghĩ rằng phần trăn trong câu hỏi của bạn có thể được chỉnh sửa. Câu trả lời trên SU rất có thể sẽ sử dụng các lệnh khác, không phải lập trình. Câu hỏi về SO có lẽ nên tập trung vào việc hỏi làm thế nào để làm điều đó trong python.
Gnoupi

Nhận kích thước cửa sổ với đồ trang trí: unix.stackexchange.com/questions/14159/ Kẻ
Ciro Santilli

Câu trả lời:


26

Có một số chương trình dòng lệnh có thể giúp:

  • xwininfo: Nó giúp bạn có kích thước của cửa sổ không bao gồm trang trí và vị trí tuyệt đối (với màn hình) và tương đối (với khu vực dành cho cửa sổ)
  • xdpyinfo: Điều này cung cấp nhiều thông tin hơn về thiết bị màn hình của bạn, hơn bao giờ bạn muốn biết. Nhưng nó có một nơi nào đó trong đầu ra giống như screen: #0tiếp theo dimension: 1024x768.

Có cách nào để có được thông tin bao gồm cả trang trí?
Victor

6

> kích thước cửa sổ chính xác

Ví dụ sau (sẽ hoạt động ít nhất trong sh, bash và zsh) sẽ in hình học cửa sổ có và không có khung cho tất cả các cửa sổ có "KWrite" ở đâu đó trong tiêu đề.

windows="$(wmiface findNormalWindows "KWrite" "" "" "" "" "")"
for window in $(echo $windows); do
{
  echo $window
  wmiface framePosition $window
  wmiface frameSize $window
  wmiface windowPosition $window
  wmiface windowSize $window
  echo
} done

> không gian màn hình chính xác có sẵn (không bao gồm các bảng như bảng gnome)

xrandr

Ví dụ:

xrandr | head -n1 | cut -d, -f2 | cut -d" " -f3-5

Đầu ra trong trường hợp của tôi:

4400 x 2560

Không chắc chắn làm thế nào để loại trừ các bảng - nếu bạn có nhiều màn hình, chúng có thể ở ngay giữa màn hình ảo, vì vậy hình học màn hình không có bảng có thể phức tạp hơn "không gian màn hình có sẵn".

> khả năng đặt cửa sổ ở một kích thước nhất định, bao gồm cả trang trí

wmiface setFrameGeometry $window $x $y $width $height

Đọc wmiface README để biết thêm các lệnh có thể.


2
wmiface không được đóng gói với tất cả các bản phát hành (bất kỳ?). Tôi đã có thể cài đặt trên Mint bằng cách sử dụng gói ubfox từ đây: kde-apps.org/content/show.php?content=40425 Có thể tìm thấy README được đề cập ở đây: gitorious.org/wmiface/wmiface/source/
slinkp

Xem phần thứ hai của nhận xét này unix.stackexchange.com/a/156349/84607 để biết một cách khác để có được hình học đầy đủ bao gồm cả trang trí bằng cách sử dụng kết hợp xwininfo, xdotool và xprop.
nháy mắt
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.