Potrzebny skrypt sprawdzaj

Zagadnienia dotyczące menadżerów okien, środowisk graficznych - X, KDE, GNOME, Fluxbox, XFCE., Compiz itp.
szczemp
Posty: 26
Rejestracja: 17 lutego 2014, 09:30

Potrzebny skrypt sprawdzający czy któreś okno jest zmaksymalizowane

Post autor: szczemp »

Potrzebny skrypt sprawdzający czy któreś okno jest zmaksymalizowane.
Nie wiem czy jest jakaś komenda, którą wywołam z terminala i zwróci mi jakąś wartość, jeśli któreś z uruchomionych okien zajmuje cały ekran.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Wszystko zależy od menedżera okien, ale spróbuj tak: polecenie

Kod: Zaznacz cały

wmctrl -l
listuje wszystkie okna, z tej listy wyciągamy ID (to wartość z pierwszej kolumny). Wyżej otrzymane ID wklejamy do programu xprop:

Kod: Zaznacz cały

xprop -id ID _NET_WM_STATE
i analizujemy wynik.
Przykład:

Kod: Zaznacz cały

$ wmctrl -l
0x02200001  0    N/A mplayer2
Jak widać to okno mplayera, i teraz:

Kod: Zaznacz cały

$ xprop -id 0x02200001 _NET_WM_STATE
_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ
To znaczy, że okno jest zmaksymalizowane w poziomie i w pionie. Inne wartości to:
  • _NET_WM_STATE(ATOM) = _NET_WM_STATE_FULLSCREEN - okno w trybie pełnoekranowym.
  • _NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN - okno zminimalizowane do paska.
  • _NET_WM_STATE(ATOM) = - (brak parametru) - żadne z powyższych, zwykłe okno.
Parametry mogą być łączone, np: _NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ - okno zmaksymalizowane i zminimalizowane (tak wiem brzmi bez sensu).
Awatar użytkownika
dedito
Moderator
Posty: 3588
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Nie wiem jak ten skrypt zadziała bo nie chce mi się sprawdzać, ale fullscreen to co innego niż zmaksymalizowane okno. Fullscreen to pełny ekran - przykrywa też paski narzędziowe, czego maksymalizacja nie robi.
Awatar użytkownika
dedito
Moderator
Posty: 3588
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Też nie sprawdzałem tego skryptu. Opiera się to na narzędziu xdotool http://www.semicomplete.com/projects/xdotool/ i z tego co widzę ten skrypt sprawdza, czy któreś okno jest aktywne więc nie jest to ani full-screen ani maksymalizacja.
Przypuszczam, że to narzędzie potrafi sprawdzić też inne stany okna co sprowadzi się do lekkiej przeróbki skryptu.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Okno aktywne może być fullscreen, albo zmaksymalizowane (o ile dobrze rozumiem znaczenie aktywne). A skrypt pobiera rozmiary okna i porównuje z rozmiarami ekranu (w pikselach). xwininfo nie podaje info o stanie okna. W moim przypadku zmaksymalizowana opera ma rozmiar 1280x982 przy rozdzielczości ekranu 1280x1024. Problemem są jak już wcześniej napisałem paski narzędzi (wszelkiego rodzaju docki), które rezerwują sobie pewien fragment ekranu. Żeby znaleźć zmaksymalizowane okno w ten sposób należałoby znaleźć wszystkie paski narzędzi, odjąć ich sumaryczny rozmiar od rozmiaru ekranu i dopiero porównać z rozmiarem okna. Dlatego jak już wcześniej napisałem ten skrypt nadaje się do określania czy okno jest w fullscreen, a jego modyfikacja wcale nie jest taka łatwa.
Awatar użytkownika
dedito
Moderator
Posty: 3588
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

No faktycznie skrypt porównuje aktualną rozdzielczość pulpitu z rozdzielczością wszystkich okien (tak chyba należy w tym przypadku rozumieć aktywne okna jako listę wszystkich okien obecnie wyświetlanych).
Modyfikacja faktycznie może nie być taka łatwa.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Ja rozumiem okno aktywne jako okno na którym aktualnie się pracuje. Zwłaszcza, że w tym skrypcie nie ma żadnej pętli, to jest tylko jedno porównanie (jedno okno).
Awatar użytkownika
dedito
Moderator
Posty: 3588
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Ok, zgadza się.
szczemp
Posty: 26
Rejestracja: 17 lutego 2014, 09:30

Post autor: szczemp »

Całkiem sprawnie mi poszło. Dzięki Wam.
Jest jeszcze inna sprawa, raczej nie związana z zmaksymalizowanymi oknami. Nie wiem czy warto zakładać nową dyskusję na ten temat, więc zapytam tu. Jak uznacie, że warto, to rozdzielcie tematy.
Mój ojciec jest przyzwyczajony do docka po prawej stronie. Instalowanie zewnętrznych aplikacji nie ma sensu, bo nie potrzebuje tych wszystkich opcji i sprzęt też nie jest dość mocny żeby tego nie odczuł. Zrobiłem mu po prawej stronie zwykły panel. Ale ubzdurało mu się zwijanie i rozwijanie tego panelu skrótem klawiszowym. Znowu potrzeba jakiś program konsolowy, co zmieni szerokość panelu. Albo przynajmniej opcje 'zawsze widoczny' i 'autoukrywanie'. Naturalnie debian i kde.
ODPOWIEDZ