Um ein System automatisch in einen Stromsparmodus schicken zu können, müßte man feststellen, ob sich an den Eingabegeräten irgendwas tut. Was für Möglichkeiten gibt es da?
Kommt drauf an, wie 'sauber' es werden soll. Um nach der Maus zu gucken, würd ich als schnelle Bastellösung einfach /dev/mice öffnen und gucken, ob da Zeichen herauspurzeln. Alternativ könnte man in /proc/interrupts nachsehen, wann Interrupts auf dem Tastaturcontroller auflaufen, sofern noch einer da ist... Dann gibts noch die xidle-Erweiterung oder das xprintidle-Werkzeug. Der Weg der Wege fällt mir spontan nicht ein, aber ich denke, ich würde mich als erstens zum X11-Bildschirmschoner durchhangeln und dort nachsehen, wie es gelöst wurde.
Unter /dev/input/event* liegen alle Eingabegeräte die am System angeschlossen sind. Beispiel: http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from-event-device-node-devinputevent/ Einfach eine input_event struct per read vom device lesen, der read blockiert bis ein event vorhanden ist. In obigem Beispiel werden da 64 events auf einmal gelesen, das ist in deinem Fall unpassend. Welche event-typen usw. es gibt findest du in /usr/include/linux/input.h
Ich habe neulich einen Artikel gelesen, der folgendes beschreibt: (Ich finde ihn nicht mehr wieder) /dev/random ist ein Zufallsgenerator der von echtem Zufall abhängt, also insbesondere Dingen die nicht deterministisch passieren. Dafür wird zum Beispiel Zeiten zwischen zwei tastatureingaben oder Mausbewegungen benutzt. Also produziert /dev/random mehr Zufall wenn ein Nutzer die Maus bewegt oder die Tastatur benutzt, als wenn gerade kein Benutzer da ist. Über die gelieferte Entropie kann ein Threshold bestimmt werden, um einen rudimentären "User ist da" Detektor zu bauen. Ein interessanter Hack meiner Meinung nach.
Nachtrag zu den inputdevs: In deinem Fall willst du evtl. auch gar nicht dass es blockiert. Du könntest alle event-files öffnen, auf nonblocking schalten und per poll lauschen. Dann hast du gleich nen timeout wenn ne Weile nichts passiert ist. Aber dran denken, dass du die events vor dem neuen poll-Aufruf auch alle liest.
Falls Du das Rad nicht mutwillig neu erfinden willst, bietet sich das von Sven P. haku erwähnte xprintidle an:
1 | xprintidle is a utility that queries the X server for the user's |
2 | idletime and prints it to stdout (in milliseconds). Just run it |
3 | without any arguments. |
Das sich ja interessante Ansätze - vielen Dank. Den Hack mit der Entropie probier ich zum Schluß ;-)
Wie wäre es denn, einfach das Skript, das den Sleep-Modus aktiviert, als Screensaver einzustellen?
xprintidle funktioniert prächtig. Das Ergebnis sind die Millisekunden seit der letzten Aktivität - sehr gut geeignet, um unbediente Rechner mit geringstem Aufwand zu erkennen:
1 | x=0 |
2 | while (( x < 500 )) |
3 | do |
4 | xprintidle |
5 | (( x++ )) |
6 | sleep 1 |
7 | done |
Wie der Autor allerdings auf den Namen xprintidle kam, erschließt sich mir nicht so ganz... Rolf Magnus schrieb: > Wie wäre es denn, einfach das Skript, das den Sleep-Modus aktiviert, als > Screensaver einzustellen? Das kommt natürlich darauf an, was auf dem Rechner sonst so läuft. Wenn er Aktionen zu bestimmten Zeitpunkten ausführen soll - z.B. irgendwelche Streams aufzeichnen - dann geht das natürlich nicht so einfach.
Uhu Uhuhu schrieb: > Wie der Autor allerdings auf den Namen xprintidle kam, > erschließt sich mir nicht so ganz... x = X11 Windowsystem print = ausgeben idle = Untätigkeit
Läubi .. schrieb: > x = X11 Windowsystem > print = ausgeben > idle = Untätigkeit Der erste und der letzte Teil ist durchaus naheliegend, nur was das mit dem print soll, bleibt unverständlich.
Stefanie B. schrieb: > Also produziert /dev/random mehr Zufall wenn ein Nutzer die Maus bewegt > oder die Tastatur benutzt, als wenn gerade kein Benutzer da ist. Aber auch wenn mehr Netzwerktraffic passiert, mehr Gerätezugriffe passieren etc. pp. > Über die gelieferte Entropie kann ein Threshold bestimmt werden, um > einen rudimentären "User ist da" Detektor zu bauen. Ich bezweifele, dass man das sinnvoll nutzen kann um den Bildschirm zu verdunkeln... > Ein interessanter Hack meiner Meinung nach. Aber ja, ein spannender Ansatz :-) Viele Grüße, Simon
Uhu Uhuhu schrieb: > Um ein System automatisch in einen Stromsparmodus schicken zu können, > müßte man feststellen, ob sich an den Eingabegeräten irgendwas tut. > > Was für Möglichkeiten gibt es da? Nutzt Du vorhandene Infrastruktur? Der X-Server hätte z.B. entsprechende Mechanismen eingebaut... Oder ist das selbstentwickelte Software (welches UI-Framework?)? Viele Grüße, Simon
Simon Budig schrieb: > Nutzt Du vorhandene Infrastruktur? Ja. Im Moment habe ich ein shell-Skript, das bestimmte Radiosendungen aufzeichnet und ein Skript, das VMs herunterfährt und den Rechner in suspend to ram schickt. Hinterher werden die VMs wieder angeworfen. Das Suspend-Skript hat bei manueller Bedienung unter dem Strich immerhin 25% Stromersparnis gebracht. Die ganze Chose möchte ich jetzt so automatisieren, daß die Maschine mit rtcwake so lange in den S3 geschickt wird, bis eine Aufnahme ansteht, oder sie manuell aufgeweckt wird.
Uhu Uhuhu schrieb: > Läubi .. schrieb: >> x = X11 Windowsystem >> print = ausgeben >> idle = Untätigkeit > > Der erste und der letzte Teil ist durchaus naheliegend, nur was das mit > dem print soll, bleibt unverständlich. Na seine Aufgabe ist, die Idle-Dauer auszugeben ("print idle"). Was ist daran unverständlich? Uhu Uhuhu schrieb: > Ja. Im Moment habe ich ein shell-Skript, das bestimmte Radiosendungen > aufzeichnet und ein Skript, das VMs herunterfährt und den Rechner in > suspend to ram schickt. Hinterher werden die VMs wieder angeworfen. Aus Interesse: Wieso müssen die VMs denn suspendiert werden?
>Na seine Aufgabe ist, die Idle-Dauer auszugeben ("print idle"). Was ist >daran unverständlich? Nun - viele verbinden "print idle" mit dem faulen Drucker ... ;-)
Rolf Magnus schrieb: > Na seine Aufgabe ist, die Idle-Dauer auszugeben ("print idle"). Was ist > daran unverständlich? Oh, da war wohl noch Staub vom letzten Weltuntergang zwischen den Synapsen... > Aus Interesse: Wieso müssen die VMs denn suspendiert werden? Müssen sie eigentlich nicht. Ich habe sie komplett heruntergefahren, um sicher zustellen, daß die Uhren hinterher wieder stimmen. Ob das wirklich nötig ist, muß ich aber nochmal gründlich erforschen. Notfalls sollte es auch noch eine elegantere Methode geben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.