ubuntuusers.de

System Idle Time herausfinden

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.10 (Maverick Meerkat)
Antworten |

Meister0815

Avatar von Meister0815

Anmeldungsdatum:
7. Februar 2010

Beiträge: 903

Wohnort: Stuttgart

Hallöchen zusammen,

Wie kann ich die Zeit herausfinden, in der keine Benutzereingaben gemacht wurden?

Ich programmiere mit Lazarus, aber ein Shell-Lösung würde mir auch helfen, so fern ich sie verwerten kann. Damit meine, sowas wie:

w

liefert mir zwar die Idle Time, aber das bekomme ich nie und nimmer gescheit geparst.

Hat jemand 'ne Möglichkeit oder ein Skript, mit dem es einfacher geht?

Freue mich über jede Hilfe! ☺

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2517

Na hmm, was du da in w siehst, ist nicht die Idle Time „des Systems“ (wie auch immer die definiert wäre), sondern die eines Terminals. Wenn du dir mal den Quellcode von w anschaust, dann siehst du in w.c:

1
2
3
4
5
6
static time_t idletime(const char *restrict const tty) {
    struct stat sbuf;
    if (stat(tty, &sbuf) != 0)
	return 0;
    return time(NULL) - sbuf.st_atime;
}

Sprich, die Zeit aus w ist im wesentlichen die letzte atime des jeweiligen Terminals. Das könntest du in deinem Programm genauso verwenden. ☺

Meister0815

(Themenstarter)
Avatar von Meister0815

Anmeldungsdatum:
7. Februar 2010

Beiträge: 903

Wohnort: Stuttgart

Vain schrieb:

Na hmm, was du da in w siehst, ist nicht die Idle Time „des Systems“ (wie auch immer die definiert wäre), sondern die eines Terminals.

Ach, jetzt wird mir einiges klar, diese IDLE-Spalte hat mir schon Rätsel aufgegeben.

Also kann ich "w" nicht verwenden.

Hat jemand noch eine Idee, was man stattdessen benutzen könnte? Kann man vielleicht irgendwie den Bildschirmschoner anzapfen oder so?

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Welche Idle-Time willst du wissen?

Die "Zeit-ohne-Benutzer-Eingabe" deiner aktuellen Session? (weil du ja von Bildschirmschoner sprachst) oder willst du gar nur wissen, wann der Bildschirmschoner zuschlägt und eine Aktion damit lostreten?

riffraff

Avatar von riffraff

Anmeldungsdatum:
1. Oktober 2006

Beiträge: 486

Wohnort: Im kühlen Norden

Ginge evtl. die Zeit der Terminals?

ls -l /dev/pts | fgrep <USERNAME>

Wenn ich mehrere terminals aufhabe, ist die Zeit dort die, der jeweilig letzten Eingabe in diesem Terminal....

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2517

Bin recht schnell auf diesen Blogeintrag gestoßen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <X11/extensions/scrnsaver.h>
#include <stdio.h>

int main(int argc, const char *argv[])
{
	Display *display = XOpenDisplay(NULL);
	if (display == NULL)
		return 1;

	XScreenSaverInfo *info = XScreenSaverAllocInfo();
	if (info == NULL)
		return 1;

	if (XScreenSaverQueryInfo(display, DefaultRootWindow(display), info) == 0)
		return 1;

	printf("%lu\n", info->idle);
	return 0;
}

Übersetzen:

$ gcc -Wall -Wextra -o idle idle.c -lXss

Zum Test 2 Sekunden schlafen, dann Idletime der X-Session in Millisekunden ausgeben:

$ sleep 2; ./idle 
1971

Ich hab keine Ahnung, ob du das auch mit FreePascal direkt machen könntest – im Zweifelsfalle nimm das Ding hier und lies dessen Ausgabe. ☺

Meister0815

(Themenstarter)
Avatar von Meister0815

Anmeldungsdatum:
7. Februar 2010

Beiträge: 903

Wohnort: Stuttgart

Zunächst vielen Dank für eure Antworten!!! 👍

theinlein schrieb:

Die "Zeit-ohne-Benutzer-Eingabe" deiner aktuellen Session?

Genau die brauche ich. Will den Rechner ausschalten, X minuten nach der letzten Benutzereingabe.

riffraff schrieb:

Ginge evtl. die Zeit der Terminals?

Nützt mir leider nichts, ich brauche das für alle in Frage kommende Programme, nicht nur Terminals.

@Vain:

Sieht vielversprechend aus! Ich versuche das Ding mal zu compilieren (hab noch nie mit C zu tun gehabt) und sag dann nochmal bescheid, ob es klappt!

EDIT: Funktioniert! Falls nicht jemand den C-Code noch in Pascal übersetzen kann, wäre diese Lösung für mich ausreichend. Danke!!! ☺

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2517

… vielleicht ist auch das Ding für dich interessant: http://packages.ubuntu.com/maverick/xautolock

Antworten |