Próbowałem ustalić rozmiar okna do użycia w małym skrypcie. Moja obecna technika służy wmctrl -lG
do wyszukiwania wymiarów. Problem jednak jest taki:
Podane przez niego liczby xiy dotyczą górnego lewego rogu dekoracji okna, a wysokość i szerokość dotyczą tylko obszaru zawartości. Oznacza to, że jeśli dekoracje okna dodadzą 20px wysokości i 2px szerokości, wmctrl zgłosi okno jako 640x480, nawet jeśli zajmuje to 660x482 na ekranie. Jest to problem, ponieważ następnym krokiem mojego skryptu byłoby użycie tego obszaru do poinformowania ffmpeg o nagraniu ekranu. Chciałbym uniknąć zakodowania na stałe wielkości dekoracji okien z mojego obecnego ustawienia.
To, co byłoby odpowiednie, to albo metoda uzyskania rozmiaru dekoracji okna, dzięki czemu mogę użyć ich do ustalenia pozycji obszaru treści 640x480, albo sposób uzyskania bezpośredniego położenia obszaru zawartości, a nie pozycji dekoracji okna .
źródło
Odpowiedzi:
Poniższy skrypt poda Ci lewe górne współrzędne ekranu i rozmiar okna (bez dekoracji). . . .
xwininfo -id $(xdotool getactivewindow)
zawiera wystarczającą ilość informacji dla Ciebie.źródło
xdotool getactivewindow
zwraca identyfikator okna ramki menedżera okien (w tym dekoracji), a nie zawarte w nim okno klienta.xdotool getactivewindow getwindowgeometry
Zaakceptowaną odpowiedź można rozszerzyć, aby uzyskać całe okno:
Chociaż łatwe, okazuje się, że nie działa na Unity w Ubuntu 14.04, ponieważ informacje względne to 0. Zapytałem Uzyskaj pełne wymiary okna (łącznie z dekoracjami) w Unity i dostałem dobrą odpowiedź. Oto jak użyłem tej odpowiedzi:
Ta druga metoda działa zarówno w Unity, jak i Xfce i powinna również działać w Gnome.
źródło
aw=`xdotool getactivewindow`
dodać do góry, aby uniknąć zawieszania się na wywołaniu xwininfo. To dobrze wiedzieć, ponieważ rozważam przejście na Unity, gdzie nie mogę uruchomić wmiface bez segfaulta.aw
definicji. Przeredaguję teraz odpowiedź, aby dodać tę linię.h
. Wygląda na to, że pasek tytułowy jest już zawarty w wysokości, która wracaxwininfo
.Znacznie prostszy sposób uzyskania rozmiaru i położenia okna:
źródło
Akceptowana odpowiedź wyraźnie nie obejmuje dekoracji okna. Dla tych, którzy wciąż szukają sposobu uzyskania geometrii, w tym wszystkich dekoracji, zgodnie z tytułem tego pytania, możesz użyć wmiface zgodnie z innym pytaniem https://superuser.com/questions/164047/how-to-get-accurate-window -information-Dimensions-etc-in-linux-x . Przykład:
Zwraca geometrię i pozycję względem lewego górnego w następujący sposób:
wmiface nie wydaje się być dostarczany ze wszystkimi dystrybucjami Linuksa (nie znalazłem pakietu udostępniającego go na Mint lub Ubuntu), ale mogłem go zainstalować z pakietów tutaj: http://kde-apps.org/content/show .php? content = 40425
I nie ma żadnych dokumentów ani nawet
--help
, ale README jest tutaj:https://gitorious.org/wmiface/wmiface/source/ea941eeb2076124734f6a3d3079326c826b462d7:README
źródło
wmiface activeWindow
570x434 + 870 + 31 $ xdotool getwindowgeometryxdotool getactivewindow
Okno 6291772 Pozycja: 878,77 (ekran: 0) Geometria: 562x407Za pomocą xdotool:
sleep 3s && xdotool getactivewindow
, masz 3 sekundy na otwarcie oknaxdotool getwindowgeometry $WINDOW_ID
xdotool getwindowgeometry -shell $WINDOW_ID
źródło
Łącząc odpowiedzi na tej stronie wykorzystałem to:
Uruchom jedną linijkę, a następnie w ciągu 3 sekund kliknij okno, dla którego chcesz ustawić położenie i geometrię.
źródło