Forum: PC Hard- und Software Linux: kann man feststellen, ob sich an Maus und Tastatur irgendwas tut?


von Uhu U. (uhu)


Lesenswert?

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?

von Sven P. (Gast)


Lesenswert?

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.

von Benedikt H. (hunz)


Lesenswert?

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

von Stefanie B. (sbs)


Lesenswert?

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.

von Benedikt H. (hunz)


Lesenswert?

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.

von Tom K. (ez81)


Lesenswert?

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.

von Uhu U. (uhu)


Lesenswert?

Das sich ja interessante Ansätze - vielen Dank. Den Hack mit der 
Entropie probier ich zum Schluß ;-)

von Rolf Magnus (Gast)


Lesenswert?

Wie wäre es denn, einfach das Skript, das den Sleep-Modus aktiviert, als 
Screensaver einzustellen?

von Uhu U. (uhu)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Uhu U. (uhu)


Lesenswert?

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.

von Simon B. (nomis)


Lesenswert?

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

von Simon B. (nomis)


Lesenswert?

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

von Uhu U. (uhu)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

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?

von Jens G. (jensig)


Lesenswert?

>Na seine Aufgabe ist, die Idle-Dauer auszugeben ("print idle"). Was ist
>daran unverständlich?

Nun - viele verbinden "print idle" mit dem faulen Drucker ... ;-)

von Uhu U. (uhu)


Lesenswert?

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
Noch kein Account? Hier anmelden.