Gibt es in einem Bash-Skript eine Möglichkeit, die ID des X-Fensters unter dem Mauszeiger zu ermitteln?
(bearbeiten) Ich muss den Prozess nicht interaktiv sein.
xdotool
macht die Zeigerposition () sichtbarxdotool getmouselocation
, und neuere Versionen (seit 2.20110530.1) geben an, welches Fenster sich ebenfalls an dieser Position befindet . Keines xwininfo
, wmctrl
oder ältere Versionen xdotool
erscheinen , einen Weg zu haben ein Fenster mit einer Bildschirmposition anzupassen , wo es sichtbar.
Der zugrunde liegende Aufruf der X-Bibliothek ist XQueryPointer
(entsprechend einer QueryPointer
Nachricht). Hier ist ein einfaches Python-Wrapper-Skript, das diesen Aufruf umgibt (using ctypes
). Fehlerprüfung weitgehend weggelassen. Angenommen, Sie verwenden Bildschirm 0 (wenn Sie nicht wissen, dass Anzeigen mehr als einen Bildschirm haben können, ignorieren Sie dies).
#! /usr/bin/env python
import sys
from ctypes import *
Xlib = CDLL("libX11.so.6")
display = Xlib.XOpenDisplay(None)
if display == 0: sys.exit(2)
w = Xlib.XRootWindow(display, c_int(0))
(root_id, child_id) = (c_uint32(), c_uint32())
(root_x, root_y, win_x, win_y) = (c_int(), c_int(), c_int(), c_int())
mask = c_uint()
ret = Xlib.XQueryPointer(display, c_uint32(w), byref(root_id), byref(child_id),
byref(root_x), byref(root_y),
byref(win_x), byref(win_y), byref(mask))
if ret == 0: sys.exit(1)
print child_id.value
Anwendungsbeispiel:
xwininfo -tree -id $(XQueryPointer)
xdotool click 1
Methode im Kommentar zu erwähnt Bruce Ediger der Antwort .. die nicht-Null - Desktop - ID gilt so sehr , wie es das entsprechende Bild über kehrtimport -window $nonzeroID screen.png
.... gibt es ein paar einfache zwicken für den python - Skript zurück , dass Wert für den Desktop ?$(XQueryPointer)
für0
und Aufrufenxwininfo -root
für diese Bedingung behebt diese Eigenart .. Danke ..root_id.value
wennchild_id.value == 0
.if child_id.value == 0: print root_id.value
else: print child_id.value
:)sed /x[0-9]\\++/q\;d <(xwininfo -tree -id $(XQueryPointer))
Der
xwininfo
Befehl gibt diese Art von Ausgabe aus, aber Sie müssen auf das Fenster klicken, zu dem Sie Informationen wünschen:Wenn Sie dies tun
xwininfo | grep 'Window id:'
, erhalten Sie möglicherweise etwas, aus dem Sie die ID analysieren können.quelle
xwinfo |grep window id:' &
wird und anschließendxdotool click 1
..., aber dies birgt die Gefahr, dass der Vordergrundclick
ausgeführt wird, bevorxdotool
die Maus greift. Ich würde raten, kein nominales `sleep n 'zu verwenden. Obwohl diese Antwort auf dem richtigen Weg ist, werde ich eine Weile warten, um zu sehen, ob etwas mehr Inline auftaucht ...Versuchen Sie dies, es verwendet nur xdotool, aber seine Version ist mindestens "2.20110530.1"
Um die Fenster-ID direkt zu erhalten, können Sie Folgendes verwenden:
quelle
xdotool getmouselocation --shell | grep WINDOW | awk -F "=" '{print $2}'
xdotool ist dafür gut genug.
Führen
xdotool getactivewindow
Sie aus und Sie werden das Ergebnis sehen (int) Das Fenster kann sich über JEDEM Monitor befinden. Lesen Sie einfach, wo sich der x11-Zeiger befindet, der auf einen Klick wartet :), und egal, ob es sich um ein Remote-Fenster, einen vncserver oder den dritten Desktop der Cube-Desktop-Umgebung handelt. Funktioniert einfach.Sie können es zum besseren Testen mit Sleep spielen
sleep 3; xdotool click 1+2; xdotool getactivewindow
.Ich habe gesehen, dass
getwindowsfocus
derselbe Wert als zurückgibtgetactivewindow
.Wenn Sie die Klicks manuell ausführen, wird das Kontextmenü angezeigt. Wenn Sie jedoch auf 1 + 2 klicken, werden beide Klicks gleichzeitig ausgelöst, indem Sie auf die aktuelle Mausposition klicken und die gewünschte ID abrufen.
Versuch es :)
quelle
Wenn Sie Zugriff auf python-xlib haben , finden Sie hier eine kürzere und pythonischere Entsprechung zu Gilles 'Antwort:
quelle
Ich spielte mit der Antwort von Peter.O herum und fand:
quelle
ArchWiki hat eine gute Antwort darauf:
Mit
sed
können Sie dies in einer einzigen Zeile tun. Dies ist wahrscheinlich die am besten lesbare Methode:Beachten Sie, dass
xdotool
in meinem Debian-Minimal-X11 etwas fehlte, währendxprop
es enthalten war (ebenfallssed
natürlich).Wenn Sie nicht verzweigen möchten oder die Textumwandlung
sed
nichtgrep
vollständig durchführen könnenbash
, ist dies möglicherweise etwas sicherer, falls sich die Ausgabexprop
etwas ändert:Trotzdem ist es immer noch eine seltsame Art, eine so einfache Aufgabe zu archivieren.
quelle
quelle
xdotool getwindowsfocus
von einer Konsole aus und das Bewegen der Maus überprüfen . Der Wert