Programm starten wenn lange keine Eingabe gemacht wurde.

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 27.10.2012 10:07:55

Guten Tag,

ist es möglich ein Programm starten zu lassen, wenn der Benutzer den Computer nicht mehr benutzt, und ein anders Programm zu starten, wenn der Benutzer seine Arbeit fortfährt?

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 27.10.2012 10:36:00

Ich glaube in der KDE-Energieverwaltung kann man ein Script ausführen lassen, wenn man das profiel ändert und das Profil kann man ändernl assen wenn man inaktiv ist.
rot: Moderator wanne spricht, default: User wanne spricht.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von cosmac » 27.10.2012 11:02:51

hi,

man könnte Debianxscreensaver installieren und xscreensaver-command -watch benutzen. Ein Beispiel in perl gibt's hier unter "-watch":

http://linux.die.net/man/1/xscreensaver-command

Es ist auch möglich, die Zeit seit der letzten Eingabe abzufragen. Dazu braucht man wahrscheinlich ein kleines C-Programm, aber keinen screensaver, d.h. der Bildschirm(-inhalt) wird nicht beeinflusst.
Beware of programmers who carry screwdrivers.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 27.10.2012 13:16:03

Ich habe kein grafische Oberflaeche. :(
daher dachte ich, dass man irgendwie alle Eingabegeraete auf eingabe abfragen kann.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 27.10.2012 13:30:35

Als root kannst du das über /dev/input/event. (Da kommt was raus, wenn du gerade tippst.) Alos vielleicht einen dauerloop, der immer für eine bestimmte Zeit in eine Datei schreibt. Undd dann wird dap Programm gestartet, wenn nichts in der Datei steht.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von r900 » 27.10.2012 13:38:36

Debiantimeoutd kann Benutzer nach gewisser Zeit der Inaktivität automatisch ausloggen. Eventuell kann man es auch anders konfigurieren?

Ich denke aber wenn du etwas näher erklärst was da ganze eigentlich bezwecken soll hat jemand einen besseren Ansatz. Wenn du z.B. einen rechenintensiven Prozess starten willst der andere Benutzer nicht beeinträchtigt dann wäre es besser dem Prozess einfach eine geringe Priorität zu geben.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 27.10.2012 15:42:57

das ganze soll bezwecken, dass rechenintensive programme ausgeschaltet werden, wenn jemand den Rechner benutzt. Wenn der Rechner nicht betaetigt wird, sollen Rechenintensive PRogramme mit -20 ausgefuerht werden.


/dev/input waere ein Ansatz, wenn man maus und tastatur gleichzeitig abfragen koennte.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 27.10.2012 17:07:57

Nimm das standard Linux-Scheduling für sowas. Du wirst definitiv mehr von deinem Script merken als von einem Rechenintensiven programm. Wenn du sowas am laufen hast merkst du davon gar nichts:

Code: Alles auswählen

  PID CLS RTPRIO PRI  NI 
 4382 B        0   0  19 
Nutzt du dynamische Prozessor-Taktung wird dein System sogar merklich schneller. (Weil der Prozessoer immer auf volldampf läuft.)
Beispielsweise bei meinem Netbook, wo die Prozessortaktung in HW war, ist das System durch rechenintensive Prozesse schneller geworden. (Anders siehts leider aus, wenn du ein sehr RAM intensives programm hast.)
rot: Moderator wanne spricht, default: User wanne spricht.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 27.10.2012 17:49:00

wanne hat geschrieben:Nimm das standard Linux-Scheduling für sowas. Du wirst definitiv mehr von deinem Script merken als von einem Rechenintensiven programm. Wenn du sowas am laufen hast merkst du davon gar nichts:

Code: Alles auswählen

  PID CLS RTPRIO PRI  NI 
 4382 B        0   0  19 
Nutzt du dynamische Prozessor-Taktung wird dein System sogar merklich schneller. (Weil der Prozessoer immer auf volldampf läuft.)
Beispielsweise bei meinem Netbook, wo die Prozessortaktung in HW war, ist das System durch rechenintensive Prozesse schneller geworden. (Anders siehts leider aus, wenn du ein sehr RAM intensives programm hast.)
Das ist ein interesannter Ansatz, allerdings startet mein Script mehrere Programme(ungefaehr 100) die leider sehr viel RAM beanspruchen.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 27.10.2012 18:40:35

Ich würde e trotzdem mal ausprobieren. (Gerade bei Nicht grafischem Zeug ist der RAM nicht unbedingt das Problem.)
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von r900 » 27.10.2012 21:14:19

rechenzentrum hat geschrieben:das ganze soll bezwecken, dass rechenintensive programme ausgeschaltet werden, wenn jemand den Rechner benutzt. Wenn der Rechner nicht betaetigt wird, sollen Rechenintensive PRogramme mit -20 ausgefuerht werden.
Dachte ich es mir doch.. Also wenn niemand den Rechner benutzt und demnach keine konkurrierenden Prozesse laufen wird dein Programm durch eine Priorität von -20 auch nicht schneller ausgeführt als mit +19. Also einfach mal mit dem normalen scheduling probieren und sehen wie sich das auswirkt.

Man kann zwar mit "kill -STOP" und "kill -CONT" Prozesse anhalten und fortsetzen, aber das solltest du dann mit in das Skript einbauen dass die Prozesse startet. Und dann wäre zu überlegen ob man wirklich nach Tastatureingaben geht oder eventuell danach ob ein anderer Benutzer angemeldet ist.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 28.10.2012 03:15:08

Hallo Freunde,

mit Process scheduling kann ich das Problem nicht loesen.
Weil diese Programme die Festplatte, RAM und die Netzwerkleitung belegen.
Schon allein wegen des RAMs wuerde es bedeutetn, dass der Computer kurze Zeit stehen bleiben wuerde, um den genutzten Speicher auf die Festplatte zu lagern.

Ich werde wohl jemanden einstellen muessen, der mir ein Programm programmiert, dass alle Eingabegeraete ausliest und dann entsprechend meine gewuenschte Aktion ausfuehrt.


Danke fuer eure Hilfe!

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von cosmac » 28.10.2012 03:46:41

rechenzentrum hat geschrieben:Ich habe kein grafische Oberflaeche.
/dev/input waere ein Ansatz, wenn man maus und tastatur gleichzeitig abfragen koennte.
... alle Eingabegeraete ...
benutzt da tatsächlich jemand eine Maus auf der Konsole? Oder läuft doch wenigstens ein xserver? Oder gibt's am Ende noch ganz andere Eingabegeräte?
Beware of programmers who carry screwdrivers.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 28.10.2012 04:14:25

ne nur maus und Tastatur.

Im normal Fall ist eine grafische Oberflaeche vorhanden.
Ich werde es wohl voruebergehend mit der sxcreensafer funktion versuchen muessen.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 28.10.2012 10:34:50

rechenzentrum hat geschrieben:mit Process scheduling kann ich das Problem nicht loesen.
Weil diese Programme die Festplatte, RAM und die Netzwerkleitung belegen.
Naja, Fürs Netzwerk und die HD ist das auch kein Problem.
cosmac hat geschrieben:/dev/input waere ein Ansatz, wenn man maus und tastatur gleichzeitig abfragen koennte.
Na ob du jetzt input0 oder input0 und input1 abfragsit ist ja wohl wurst.
Aber
r900 hat geschrieben:Und dann wäre zu überlegen ob man wirklich nach Tastatureingaben geht oder eventuell danach ob ein anderer Benutzer angemeldet ist.
rot: Moderator wanne spricht, default: User wanne spricht.

rechenzentrum
Beiträge: 76
Registriert: 09.06.2011 03:45:35

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von rechenzentrum » 28.10.2012 10:47:38

Leider soll auch ein Programm gestartet werden, das mit der Graka Texturen umwandelt.
Die Programme muessen also beendet werden.

/dev/input liest die hardware eingabe aus. Es muss also nicht beachtet werden, ob noch andere User eingeloggt sind. Es kann durchaus sein, dass 2 User eingeloggt sind.
Wenn 10 Minuten keine Eingabe gemacht wurde, sollen die rechen intensiven Programme(4-Prozesse) gestartet werden.

Benutzeravatar
Livingston
Beiträge: 1816
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von Livingston » 28.10.2012 12:33:17

man batch
batch executes commands when system load levels permit; in other words, when the load average drops below 1.5,
or the value specified in the invocation of atd.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von cosmac » 28.10.2012 18:52:46

Um /dev/input/event* zu überwachen, hab' ich mal ein kleines Programm gebastelt: NoPaste-Eintrag36762. Wenn (z.B.) 10 Minuten lang von keinem der Eingabegeräte Daten kommen, startet es ein Script (idle_script). Sobald eine Taste gedrückt wird oder eine andere Eingabe erfolgt, wird ein anderes Script (busy_script) aufgerufen.

Das funktioniert für die Text-Konsole und die grafische Oberfläche, unabhängig vom xserver und von allen anderen Programmen. Wenn das Programm aus /etc/rc.local heraus gestartet wird, kann der xserver beliebig beendet und neu gestartet werden. Hotplug ist bedingt möglich, das Programm sucht per Default alle 30 Sekunden nach neuen Geräten, egal ob der udevd läuft oder nicht. Man kann die Gerätedateien und passende Berechtigungen statisch, per udev oder (vorzugsweise) per devtmpfs erzeugen.

Ohne angepasste Berechtigungen muss das Programm als root laufen, dann laufen auch die Scripte mit root-Rechten, d.h. sie dürfen nicht für andere User beschreibbar sein! Andererseits hat man nur so alle Möglichkeiten, per Script beliebige User-Programme zu beeinflussen. Die Gerätedateien für alle lesbar zu machen ist auch ein schlechter Plan, weil dann jeder fremde Tastatureingaben mitschneiden kann.

Außer Debiangcc und Debianlibc6-dev sollte zum übersetzen nicht allzu viel nötig sein. Mal angenommen, man nennt das Programm "idle_event.c", dann sollte das hier ohne Meldungen durchlaufen:

Code: Alles auswählen

cc -Wall -Wextra -pedantic -O -o idle_event idle_event.c
Beware of programmers who carry screwdrivers.

wanne
Moderator
Beiträge: 7616
Registriert: 24.05.2010 12:39:42

Re: Programm starten wenn lange keine Eingabe gemacht wurde.

Beitrag von wanne » 29.10.2012 00:02:15

Naja, du kannst doch vor dem Ausführen von idle_script die rechte dropen.
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten