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?

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.


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 .


Ciekawe, ale po prostu rozumiem Error: Invalid key sequence 'ctrl-c'.
l0b0
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.