Jak mogę znaleźć lokalizację (na pulpicie) okna w linii poleceń?

19

Próbuję napisać mały skrypt, który pomoże zarządzać moimi oknami za pomocą skrótów klawiaturowych.

Aby zrobić to, co chcę, muszę być w stanie znaleźć bieżącą lokalizację i rozmiar „aktywnego” (skoncentrowanego) okna. Przez lokalizację rozumiem współrzędne X, Y okna na pulpicie, a przez rozmiar rozumiem wysokość i szerokość okna.

Czy istnieje narzędzie wiersza polecenia, które może pobrać te informacje?

TM.
źródło

Odpowiedzi:

22

Możesz uzyskać wszystkie informacje dla bieżącego aktywnego okna za pomocą tego polecenia:

xwininfo -id $(xprop -root | awk '/_NET_ACTIVE_WINDOW\(WINDOW\)/{print $NF}')

lub

xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)

Po prostu przeanalizuj dane wyjściowe dla potrzebnych współrzędnych. Oto kilka przydatnych poleceń podczas interakcji z oknami:

  • xwininfo da ci geometrię względną i absolutną.
  • xprop powie ci wiele informacji, w tym, czy okno jest aktywne, ale nie jego geometria
  • xdpyinfo również dostarczy ci identyfikator aktywnego okna, ale bez dodatkowych informacji.
  • wmctrl dostarczy ci listę informacji o oknach i pozwoli ci wybrać aktywne okno do modyfikacji, ale nie informacje.

Na przykład, aby zmienić tytuł aktywnego okna na „Nowa nazwa”:

wmctrl -r :ACTIVE: -N "New Name"

Lub zmienić pozycję aktywnego okna:

wmctrl -r :ACTIVE: -e 0,20,20,200,400

Zastanów się, wmctrlczy musisz po prostu zmienić coś prostego, na przykład geometrię okna. Rozważ użycie innych skryptów wymienionych powyżej tylko wtedy, gdy chcesz robić inne, bardziej złożone rzeczy.

Martin Owens -doctormo-
źródło
1
Chciałbym tylko zauważyć, że otrzymuję różne wyniki podczas uruchamiania drugiego polecenia. Pierwszy działa zgodnie z oczekiwaniami.
TM.
1
Używam Arch, ale może pomóc komuś tutaj w przyszłości. Pierwszy nie działał dla mnie, drugi nie zapewniał prawidłowych wymiarów, może z powodu WM. Ale połączenie obu działało. xwininfo -id $(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)" | grep -Eo "0x[0-9a-f]{2,}")
Sev
Dzięki! Ale zgadzam się z pierwszymi dwoma komentarzami. Drugie polecenie xwininfo -id $(xdpyinfo | grep focus | grep -E -o 0x[0-9a-f]+)pokazuje mi okno potomne (nie ma nazwy) mojego terminalu. Kiedy właśnie xdpyinfo | grep focusdostaję focus: window 0x435b877, revert to Parent, a 0x435b877 jest identyfikatorem okna zwróconego przez pierwsze polecenie (które działa dla mnie). To jest na Trusty 14.04.1 LTS
nealmcb
8

Dzięki „xdotool” możesz łatwo wchodzić w interakcje z oknami za pomocą zdarzeń klawiatury lub myszy.

Przykład wysłania CtrlCsekwencji do aktywnego okna:

xdotool getwindowfocus key ctrl+c # Sends CTRL+C to the current window.

Jeśli naprawdę potrzebujesz pozycji okna:

eval $(xdotool getmouselocation --shell); echo $X $Y

Więcej akcji / opcji znajdziesz na stronie man .

João Pinto
źródło
Ciekawe, ale po prostu rozumiem Error: Invalid key sequence 'ctrl-c'.
l0b0