Linux: Zugriff auf X11-Atoms über Python?
Der Thread-Titel formuliert eigentlich schon fast meine Frage, gibt es einen (nativen) Weg über Python auf X11-Atoms zuzugreifen? Im Moment behelfe ich mir mit dem subprocess-Modul und dem Kommandozeilentool xprop, aber evtl. gibt es ja einen anderen Weg?
-
- User
- Beiträge: 155
- Registriert: Freitag 29. Dezember 2006, 18:27
Hallo,
was willst du tun? Ein Atom ist in der X-Welt eigentlich nur eine "Nummer" mit einem zugehörigen Namen. Willst du vielleicht auf Fenstereigenschaften zugreifen?
X11-Bindings gäbe es einige ... nutzbar wären da am ehesten python-xlib oder ooxcb, wobei ich voreingenommen bin, weil ich ooxcb entwickle :p ooxcb verändert sch momentan allerdings ziemlich schnell, vielleicht wäre es also das Beste, auf die python-Xlib zurückzugreifen.
Hier mal ein Beispiel für python-xlib, welches die Eigenschaft _NET_CURRENT_DESKTOP des Rootwindows ausliest; grundsätzlich kannst du natürlich jede Eigenschaft jedes Fensters so auslesen
Der Vollständigkeit halber hier nochmal dasselbe für die neue, sich noch in der Entwicklung befindende ooxcb-Version:
Hilft dir das vielleicht erstmal weiter?
Gruß,
Fred
was willst du tun? Ein Atom ist in der X-Welt eigentlich nur eine "Nummer" mit einem zugehörigen Namen. Willst du vielleicht auf Fenstereigenschaften zugreifen?
X11-Bindings gäbe es einige ... nutzbar wären da am ehesten python-xlib oder ooxcb, wobei ich voreingenommen bin, weil ich ooxcb entwickle :p ooxcb verändert sch momentan allerdings ziemlich schnell, vielleicht wäre es also das Beste, auf die python-Xlib zurückzugreifen.
Hier mal ein Beispiel für python-xlib, welches die Eigenschaft _NET_CURRENT_DESKTOP des Rootwindows ausliest; grundsätzlich kannst du natürlich jede Eigenschaft jedes Fensters so auslesen
Code: Alles auswählen
import Xlib
from Xlib.display import Display
# Erstmal mit dem X-Server verbinden ...
display = Display()
# Dann das Root-Window des normalen Screens holen.
root = display.screen().root
prop = root.get_full_property(
# Das Atom der Eigenschaft ...
display.intern_atom('_NET_CURRENT_DESKTOP'),
# Die Eigenschaft hat den Typ 'CARDINAL': eine Liste
# von positiven Ganzzahlen ...
display.intern_atom('CARDINAL'))
# prop.value[0] ist dann (sofern der Fenstermanager
# _NET_CURRENT_DESKTOP gesetzt hat) der Index
# des aktuellen Desktops.
print prop.value[0]
Code: Alles auswählen
import ooxcb
from ooxcb.protocol import xproto
conn = ooxcb.connect()
# Das Rootwindow des bevorzugten Screens holen ...
root = conn.setup.roots[conn.pref_screen].root
prop = root.get_property('_NET_CURRENT_DESKTOP', 'CARDINAL').reply()
print prop.value[0]
Gruß,
Fred