Jak uzyskać dokładne informacje o oknie (wymiary itp.) W systemie Linux (X)?

22

Jak uzyskać dokładne informacje o oknie w systemie Linux? Wiem, że mogę użyć wmctrl, aby uzyskać rozmiar okna, ale rzeczywisty rozmiar okna może się różnić ze względu na dekoracje okna. Potrzebuję następujących informacji i metod:

* 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

Jaki byłby najlepszy sposób to zrobić?

Z góry dziękuję!

łagodny
źródło
Jeśli jesteś bardziej zainteresowany stroną python, możemy przenieść to na naszą siostrzaną stronę poświęconą programowaniu, StackOverflow.com. Po prostu daj nam znać.
Gnoupi,
@Gnoupi: dzięki, ale tak naprawdę jest to cross-post z SO, jak sugerował użytkownik, tutaj mogę uzyskać lepszą odpowiedź. Oryginalne pytanie znajduje się na stronie stackoverflow.com/questions/3233660/… .
mellort
dobra, widzę. W tym przypadku myślę, że część twojego pytania w pythonie można edytować. Odpowiedzi na SU najprawdopodobniej będą używać innych poleceń, a nie programowania. Pytanie dotyczące SO powinno prawdopodobnie skupiać się na pytaniu, jak to zrobić w Pythonie.
Gnoupi,
Uzyskaj wymiar okna dzięki dekoracjom: unix.stackexchange.com/questions/14159/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

26

Istnieje kilka programów wiersza polecenia, które mogą pomóc:

  • xwininfo: Otrzymuje rozmiar okna bez dekoracji i pozycję absolutną (do ekranu) i względną (do obszaru okien)
  • xdpyinfo: Daje to znacznie więcej informacji o urządzeniu ekranowym, niż kiedykolwiek chcesz wiedzieć. Ale ma gdzieś na wyjściu coś takiego, jak screen: #0po nim dimension: 1024x768.
Antwortgenossenschaft
źródło
Czy istnieje sposób na uzyskanie informacji, w tym dekoracji?
Victor
6

> precyzyjne wymiary okna

Poniższy przykład (będzie działał przynajmniej w sh, bash i zsh) wypisuje geometrię okna z ramką i bez dla wszystkich okien z „KWrite” gdzieś w tytule.

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

> precyzyjna dostępna przestrzeń ekranu (z wyłączeniem paneli takich jak panel gnome)

xrandr

Na przykład:

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

Dane wyjściowe w moim przypadku:

4400 x 2560

Nie wiem, jak wykluczyć panele - jeśli masz więcej niż jeden monitor, mogą znajdować się nawet na środku wirtualnego ekranu, więc geometria ekranu bez paneli może być bardziej skomplikowana niż „dostępna przestrzeń ekranu”.

> możliwość ustawienia określonego rozmiaru okna, w tym dekoracji

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

Czytaj wmiface README, aby uzyskać jeszcze więcej możliwych poleceń.

Lissanro Rayen
źródło
2
wmiface nie jest pakowany ze wszystkimi (dowolnymi?) dystrybucjami. Byłem w stanie zainstalować na Mint przy użyciu pakietu ubuntu stąd: kde-apps.org/content/show.php?content=40425 Wspomniany README można znaleźć tutaj: gitorious.org/wmiface/wmiface/source/…
slinkp
Zobacz drugą część tego komentarza unix.stackexchange.com/a/156349/84607, aby uzyskać inny sposób uzyskania pełnej geometrii, w tym dekoracji przy użyciu kombinacji xwininfo, xdotool i xprop.
slinkp