Ich bin auf der Suche nach einer anständigen, nicht lahmen Art zu hemmen xscreensaver, kscreensaver oder gnome-Bildschirmschoner, die möglicherweise läuft, vorzugsweise in einem Bildschirmschoner-Agnostic Weise, und es muss absolut schnell ausführen.Gibt es eine vernünftige Möglichkeit, Bildschirmschoner in Linux zu hemmen?
Ich habe die Xscreensaver FAQ (http://www.jwz.org/xscreensaver/faq.html) gelesen.
Ich habe ein gtk-basiertes Spielprogramm, das 30 Frames/Sekunde ausgibt, während man mehrere Audiokanäle mischt, und da es mit einem Joystick gesteuert wird, kommt manchmal "der" Bildschirmschoner ins Spiel. weil es mindestens drei verschiedene populäre Bildschirmschoner gibt, xscreensaver, gnome-screensaver und kscreensaver, jede mit ihren eigenen einzigartigen und klunker Methoden, durch die eine Anwendung sie möglicherweise hemmt.
Hat jemand den Code eingekapselt, um alle diese in einem schnellen Stück Code zu sperren? Oh, und es muss GPL-kompatibel sein.
Gegenwärtig jammert mein Code peinlich über die nicht kooperierenden Bildschirmschoner-Entwickler, wenn irgendein Bildschirmschoner entdeckt wird und der Joystick in Gebrauch ist, und nicht wirklich versucht, irgendetwas anderes als den Benutzer zu beraten, den Bildschirmschoner manuell zu deaktivieren, als der einzige Eine andere Sache, die ich denken kann, ist so unglaublich hässlich, dass ich es einfach ablehne.
Ich frage mich nur, ob jemand anderes in das hineingeraten ist, und was sie getan haben und ob sie etwas getan haben, ob es so hässlich war, wie es mir scheint, oder ob es eine elegante Lösung gibt Es scheint so, als könnte man X-Ereignisse irgendwie synthetisieren, um den Bildschirmschoner zu denken, dass es eine Aktivität gibt, die den Trick auf eine universelle Weise tun könnte, aber ich bin mir wirklich nicht sicher, wie ich das machen soll (und hoffe, dass du es nicht sein musst) Wurzel, um es zu tun.)
Irgendwelche Ideen?
Danke,
- steve
Hmm, unfortuanately, zumindest auf Fedora Core 8, dies nicht zu funktionieren scheinen.
Das xdg-Bildschirmschoner-Skript ist da und scheint zu funktionieren, es funktioniert einfach nicht wirklich.
Sobald Sie das tun „xdg-Bildschirmfenster-ID suspendieren“, wo Fenster-ID aus dem Programm heraus über
xwindow_id = GDK_WINDOW_XWINDOW (GTK_WIDGET (widget)->window);
Oder ob der Fenster-ID über xprop wird bekommen bekommen wird, und xdg-Bildschirmschoner laufen manuell werden zwei Prozesse erstellt:
[[email protected] wordwarvi]$ ps -efa | grep xdg scameron 4218 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004 scameron 4223 1 0 20:12 pts/2 00:00:00 /bin/sh /usr/bin/xdg-screensaver suspend 0x3a00004 scameron 4313 3151 0 20:15 pts/1 00:00:00 grep xdg [[email protected] wordwarvi]$
und sie sterben nie, auch nach dem Programm, das sie für Gesenke angeblich darauf warten, und der Bildschirmschoner nie wieder aktiviert wird.
[[email protected] wordwarvi]$ xdg-screensaver status disabled [[email protected] wordwarvi]$ ls -ltr /tmp | grep xdg -rw------- 1 scameron scameron 15 2009-01-20 20:12 xdg-screensaver-scameron--0.0 [[email protected] wordwarvi]$
Lauf xdg-Bildschirmschoner Lebenslauf Fenster-ID wird nicht fortgesetzt, um den Bildschirmschoner.
Um den Bildschirmschoner wieder zu aktivieren, muss ich sie manuell töten, und entfernen Sie die Dateien manuell in/tmp Blätter um:
[[email protected] wordwarvi]$ kill 4218 4223 [[email protected] wordwarvi]$ rm /tmp/xdg-screensaver-scameron--0.0 [[email protected] wordwarvi]$ xdg-screensaver status enabled [[email protected] wordwarvi]$
Also, gute Absichten, aber scheint nicht wirklich zu arbeiten .
Nein, natürlich nicht erwartet, dass es für jeden Rahmen laufen, aber nicht will, dass es Schluckauf verursachen, wenn es ausgeführt wird, ist alles. Mit meinem Gedanken, X-Ereignisse zu synthetisieren, stellte ich mir vor, dass es nur oft genug sein würde, um den Bildschirmschoner zu denken, dass es Aktivität gab.
Mit Blick auf xdg-Bildschirmschoner (das scheint ein Shell-Skript zu sein, das letztlich nur ein "warten" für meinen Prozess - cool) scheint es gemacht zu machen genau das, was ich will. Ich wusste, dass ich nicht der einzige oder der erste sein könnte, der sich diesem Problem stellt.
Danke!
- steve
xdg-Bildschirmschoner (Stand xdg-utils Version 1.1.0) nicht den laufenden Screensaver-Programm erkennen: Es enthält eine Funktion detectDE(), die nach mehreren gängigen Desktop-Umgebungen sucht. Beispiel: Wenn Sie KDE als Desktop-Umgebung ausführen, geht xdg-screensaver fälschlicherweise davon aus, dass Sie auch den Standard-Bildschirmschoner von KDE ausführen. Wenn Sie Ihren Desktop angepasst haben und entschieden haben, stattdessen Jamie Zawinskis xscreensaver zu verwenden, ist diese Annahme falsch und xdg-screensaver wird nicht wie angekündigt funktionieren. IMHO ist das ein Fehler. – pefu
Ich habe gerade festgestellt, dass durch die Aktualisierung von xdg-utils auf Version 1.1.1 der Fehler behoben wurde, den ich in meinem Kommentar erwähnt habe. – pefu