Jak uzyskać identyfikator okna ze stosu okien xdotool

12

Potrzebuję id okna, które jest aktywne lub skoncentrowane. Próbuję użyć xdotoolpolecenia. Jest polecenie:

xdotool getactivewindow

wynik jest zapisywany w stosie okien. Chcę uzyskać identyfikator widnow z tego stosu okien. Komenda

xdotool getactivewindow getwindowpid

mnie nie zadowala. Nie chcę uzyskać identyfikatora okna według identyfikatora procesu.

Mariusz
źródło

Odpowiedzi:

11

Myślę, że xdotool getactivewindowtego właśnie chcesz - próbowałeś?

Wyświetla identyfikator okna (ze stosu okien), jeśli w wierszu poleceń nie ma już żadnych komend xdotool.

Na xdotool getactivewindow getwindowpidprzykład getactivewindowumieszcza identyfikator na stosie okien i getwindowpidużywa tego identyfikatora do zapytania o PID. Pamiętaj, że uruchomienie tej komendy w terminalu zawsze zwróci identyfikator okna terminala, ponieważ jest ona aktywna. Aby uzyskać identyfikator z innego okna, spróbuj sleep 2s && xdotool getactivewindowwybrać okno zainteresowania w ciągu dwóch sekund.


Korzystanie xdotoolz innych narzędzi do obsługi okien jest komplikowane :

Podczas gdy xdotooldane wyjściowe używają liczb dziesiętnych dla identyfikatorów windwo, większość innych narzędzi używa liczb szesnastkowych jako danych wyjściowych (zwykle obsługują oba dane wejściowe).

Na przykład, jeśli znajdziesz okno z xdotool getactivewindow, nie znajdziesz wyniku na wyjściu xwininfo -root -tree, który zawiera listę wszystkich okien. Najpierw należy go przekonwertować na liczbę szesnastkową:

$ xdotool getactivewindow                              
69206716
$ printf 0x%x 69206716                  
0x42002bc
$ xwininfo -root -tree | grep 0x42002bc
           0x42002bc (has no name): ("konsole" "Konsole")  1154x781+0+0  +1289+498


Konwersja dziesiętnej na szesnastkową:

printf 0x%x 69206716

Konwersja szesnastkowej na dziesiętną:

printf %i 0x42002bc
Volker Siegel
źródło
Próbowałem xdotool getactivewindowpolecenia i problem polega na tym, że nie wyświetla wyniku w terminalu. Zapisuje wynik na stosie okien. To polecenie wypisuje pewną liczbę, ale nie jest to identyfikator okna (np. 35651588)
Mariusz
Jak myślisz, dlaczego 35651588 nie jest identyfikatorem okna?
Volker Siegel,
Tak, myślę, że 35651588 nie jest identyfikatorem okna. Możesz zobaczyć identyfikator systemu Windows za pomocą polecenia xwininfo, np. xwininfo -root -tree- to polecenie drukuje wszystkie okna, a okna mają inne typy numeracji.
Mariusz
1
xwininfopokazuje identyfikator okna jako liczby szesnastkowe, a xdotool pokazuje liczby dziesiętne, ale jest taki sam.
Volker Siegel,
masz rację. 35651588 = 0x2200004. xwininfo -root -tree | grep 2200004 0x2200004 "user@host:~": ("gnome-terminal" "Gnome-terminal") 1680x974+0+26 +0+51
Mariusz
1

To polecenie działa dla mnie

xdotool key --window "$(xdotool getactivewindow)" F5

Wersja xdotool 3.20160805.1

Ahmed Habiba
źródło
xdotool getactivewindow key F5powinien dać ten sam wynik
użytkownik3804598,