Přímý přenos (YouTube) z konference LinuxDays 2024, jež probíhá tento víkend v Praze v prostorách Fakulty informačních technologií Českého vysokého učení v Praze (FIT ČVUT). Na programu je spousta zajímavých přednášek.
Elon Musk na akci We, Robot (YouTube, 𝕏) představil Robotaxi, Robovan a vylepšeného Tesla Bota (Optimus).
Internet Archive je offline (𝕏, Bluesky, Mastodon). Unikly údaje 31 milionů uživatelů. Probíhal / probíhá na něj DDoS útok.
Alyssa Rosenzweig se v příspěvku na svém blogu rozepsala o hraní AAA her na Asahi Linuxu. Na YouTube je záznam její včerejší přednášky na XDC 2024 (X.Org Developer's Conference).
Vláda schválila Národní polovodičovou strategii: Česká republika má velký potenciál stát se významným hráčem v oblasti výroby čipů, zejména v evropském měřítku. Využít tento potenciál je cílem Národní polovodičové strategie, kterou připravilo Ministerstvo průmyslu a obchodu ve spolupráci s experty, a která navazuje na evropský Akt o čipech.
V lete vyšiel Aeonwave 4.0, ktorý niekoľkonásobne menej vyťažuje procesor pri interpretácií priestorového zvuku než OpenAL Soft. Autor hľadá prispievateľov do knižnice libaaxopenal za účelom pridania ALC_EXT_EFX rozšírení využívaných napr. v hre Doom 3 cez port Dhewm3 v Linuxe.
Linuxová distribuce Ubuntu 24.10 „Oracular Oriole“ byla vydána. Jde o průběžné vydání s podporou 9 měsíců. Obsahuje mj. Linux 6.11 či GNOME 47 s několika odkazy na první vydání Ubuntu (4.10 „Warty Warthog“) před 20 lety. K dispozici jsou také oficiální deriváty s odlišnými výchozími desktopovými prostředími anebo balíky aplikací.
Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno v nové major verzi 2.0 (YouTube). Důležité změny v Migration Guide.
Apache Tomcat (Wikipedie) slaví 25 let. Při té příležitosti byla vydána nová verze 11.0. Přehled novinek v poznámkách k vydání.
Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 24.09.0. Přehled novinek v poznámkách k vydání. O3DE má nového maskota: Odie.
Protože už delší dobu dělám v PHPku, tak jsem se rozhodnul, že bych zkusil i něco jiného třeba v Pythonu, nebo C.
Chtěl bych si naprogramovat daemona powersave(v případě úspěchu bych ho samozřejmě zveřejnil), který by kontroloval aktivitu myši a klávesnice, prostě nějak jako fungujou gnome-power-manager, nebo kpowersave, aby po určité době něčinnosti spustil skript na uspani PC.
Tyto dva nástroje nepoužívám, protože si nechci na Gentoo instalovat gnome, nebo KDE knihovny. Takze jsem se rozhodnul napsat něco vlastního, ale nevím od čeho se mám odpíchnout, jestli existují nějaké funkce, na zjištění aktivity uživatele, jestli to jde nějak zjistit.
Neaktivitu uživatele lze zjistit např. pomocí fce XScreenSaverQueryInfo, tady máš ukázku v Pythonu, která využívá přímo C knihovny libX11.so a libXss.so.1 (tz. je z toho vidět i jak by se to dělalo přímo v C), get X idle time with python:
#!/usr/bin/python import ctypes, os class XScreenSaverInfo(ctypes.Structure): """ typedef struct { ... } XScreenSaverInfo; """ _fields_ = [('window', ctypes.c_ulong), # screen saver window ('state', ctypes.c_int), # off,on,disabled ('kind', ctypes.c_int), # blanked,internal,external ('since', ctypes.c_ulong), # milliseconds ('idle', ctypes.c_ulong), # milliseconds ('event_mask', ctypes.c_ulong)] # events class XScreenSaverSession(object): def __init__( self): self.xlib = ctypes.cdll.LoadLibrary( 'libX11.so') self.dpy = self.xlib.XOpenDisplay( os.environ['DISPLAY']) if not self.dpy: raise Exception('Cannot open display') self.root = self.xlib.XDefaultRootWindow( self.dpy) self.xss = ctypes.cdll.LoadLibrary( 'libXss.so.1') self.xss.XScreenSaverAllocInfo.restype = ctypes.POINTER(XScreenSaverInfo) self.xss_info = self.xss.XScreenSaverAllocInfo() def get_idle( self): self.xss.XScreenSaverQueryInfo( self.dpy, self.root, self.xss_info) return self.xss_info.contents.idle / 1000 if __name__ == "__main__": s = XScreenSaverSession() print s.get_idle()
Ovšem získanou hodnotu musíš ještě dále zpracovat kvůli chybě v X serveru, viz kpowersave/src/inactivity.cpp:
/*! * This function workaround a fucking XServer idleTime bug in the * XScreenSaverExtension, if dpms is running. In this case always the * current dpms-state time is extracted from the current idletime. * This mean: XScreenSaverInfo->idle is not the time since the last * user activity, as descriped in the header file of the extension. * This result in SUSE bug # and sf.net bug # * * Workaround: check if if XServer is in a dpms state, check the * current timeout for this state and add this value to * the current idle time and return. * * \param _idleTime a unsigned long value with the current ideletime fromm * XScreenSaverInfo->idle * \return a unsigned long with the corrected idletime */ unsigned long inactivity::workaroundCreepyXServer( unsigned long _idleTime ){ kdDebugFuncOut(trace); int dummy; CARD16 standby, suspend, off; CARD16 state; BOOL onoff; Display *dpy = qt_xdisplay(); kdDebug() << "Current idleTime: " << _idleTime << endl; if (DPMSQueryExtension(dpy, &dummy, &dummy)) { if (DPMSCapable(dpy)) { DPMSGetTimeouts(dpy, &standby, &suspend, &off); DPMSInfo(dpy, &state, &onoff); if (onoff) { switch (state) { case DPMSModeStandby: kdDebug() << "DPMS enabled. Monitor in Standby. Standby: " << standby << " sec" << endl; // this check is a littlebit paranoid, but be sure if (_idleTime < (unsigned) (standby * 1000)) _idleTime += (standby * 1000); break; case DPMSModeSuspend: kdDebug() << "DPMS enabled. Monitor in Suspend. Suspend: " << suspend << " sec" << endl; if (_idleTime < (unsigned) ((suspend + standby) * 1000)) _idleTime += ((suspend + standby) * 1000); break; case DPMSModeOff: kdDebug() << "DPMS enabled. Monitor is Off. Off: " << off << " sec" << endl; if (_idleTime < (unsigned) ((off + suspend + standby) * 1000)) _idleTime += ((off + suspend + standby) * 1000); break; case DPMSModeOn: default: break; } } } } kdDebug() << "Corrected idleTime: " << _idleTime << endl; kdDebugFuncOut(trace); return _idleTime; }
def get_idle_worlkaround(self): dpms=ctypes.cdll.LoadLibrary('libXext.so'); if dpms.DPMSQueryExtension(self.dpy,None,None): if dpms.DPMSCapable(self.dpy)==1: standby=suspend=off=state=0; onoff=False; dpms.DPMSGetTimeouts(self.dpy,standby,suspend,off); dpms.DPMSInfo(self.dpy,state,onoff); print "STATE"; print state;Co dělám špatně?
Tiskni Sdílej: