Linux: Zugriff auf X11-Atoms über Python?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

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?
fred.reichbier
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 :)

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]
Der Vollständigkeit halber hier nochmal dasselbe für die neue, sich noch in der Entwicklung befindende ooxcb-Version:

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]
Hilft dir das vielleicht erstmal weiter?

Gruß,

Fred
fhoech
User
Beiträge: 143
Registriert: Montag 9. April 2007, 18:26

Oh ja, das tut es, danke! Genau so etwas hatte ich gesucht (eine Möglichkeit, auf Fenstereigenschaften zuzugreifen, vor allem interessiert mich dabei das root-Window). Werde mir beides mal anschaun.
Antworten