Der folgende Code wurde vor Jahren im Internet gefunden und funktioniert in python2 ziemlich gut. Es liefert die aktuelle Leerlaufzeit auf dem X-Server.Python3 segfaults bei Verwendung von ctypes auf xlib, python2 funktioniert
import ctypes, os, subprocess
class XScreenSaverInfo(ctypes.Structure):
_fields_ = [("window", ctypes.c_ulong), ("state", ctypes.c_int), ("kind", ctypes.c_int), ("since", ctypes.c_ulong), ("idle", ctypes.c_ulong), ("event_mask", ctypes.c_ulong)]
xlib = ctypes.cdll.LoadLibrary("libX11.so.6")
xss = ctypes.cdll.LoadLibrary("libXss.so.1")
display = xlib.XOpenDisplay(os.environ["DISPLAY"])
xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo)
xssinfo = xss.XScreenSaverAllocInfo()
xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssinfo)
xssinfo.contents.idle
Ich kann dies in eine Shell python2.7.10 werfen und bekommen, was ich will. Allerdings auf einem python3.4.3 Schale das gleiche zu tun schlägt mich in dieser Linie mit einem Segmentierungsfehler aus
xss.XScreenSaverQueryInfo(display, xlib.XDefaultRootWindow(display), xssinfo)
Ist meine py3 Umgebung gebrochen? Tut py3 etwas anderes?
Danke, das war in der Tat der Fall! – 1N4001
@Bakuriu Noch segfaults für mich bei xlib.XDefaultRootWindow (display) – cass
Ich vermute, es hat mit gtk zu tun, da es auf KDE für mich arbeitet – cass