Gép leállítása, ha senki nincs bejelentkezve

Fórumok

Ubuntu 12.04 gépeket kéne leállítanom, ha senki nincs bejelentkezve.

Bash scripttel viszonylag sok módon megállapítható a dolog, a baj az, hogy sok-sok esetben épp akkor áll le a gép, amikor valaki a jelszavát pötyögi.

Ennek kizárásara mi a mód?
Meg tudom-e állapítani valahogy az utolsó billentyűnyomás idejét, vagy van-e valakinek más ötlete?

Hozzászólások

üdv

nem vagyok ubuntu expert, de idle time detection mint ötlet?

ezt dobta gugli első oldalon....

cat>/tmp/idletime.c<
#include
#include
#include
#include
#include
#include

int GetIdleTime () {
time_t idle_time;
static XScreenSaverInfo *mit_info;
Display *display;
int screen;
mit_info = XScreenSaverAllocInfo();
if((display=XOpenDisplay(NULL)) == NULL) { return(-1); }
screen = DefaultScreen(display);
XScreenSaverQueryInfo(display, RootWindow(display,screen), mit_info);
idle_time = (mit_info->idle) / 1000;
XFree(mit_info);
XCloseDisplay(display);
return idle_time;
}

int main() {
printf("%d\n", GetIdleTime());
}
EOF

gcc -o /tmp/idletime -L/usr/X11R6/lib/ -lX11 -lXext -lXss /tmp/idletime.c
DISPLAY=:0 /tmp/idletime

Balooo
------------------------

Nincs a világon se jó, se rossz. A gondolkodás teszi azzá... (W. Shakespeare)

Hagyj ra laufot. Ha mondjuk egy oran keresztul nincs belepve senki, akkor lezar. Es mielott leallitod, allitsd le a GUI-t. Ekkor nincs eselye jelszot pottyenteni.

Egyebkent, ha egyutt indulsz a DM-mel, akkor van, mert akkor tudsz X esemenyeket figyelni. De ha csak egy kulon scriptkent futsz, akkor nem, mert nem lesz DISPLAY valtozod (meg kapcsolatod az X-szel)
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

De, a kernelen atmegy. Kernelmodult akarsz irni?

Egyebkent ezt nem fogod tudni elkerulni. Ha nem igy, akkor ugy fog leallni, hogy epp ratette a kezet a billzetre. Es a leallitas sem ket pillanat, szoval lehet, hogy mar elindult a leallitas, csak az X miatt meg nem latszik.

Miert nem altatod le a gepet? Akkor pillaantok alatt felall.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

Közben megnéztem a fenti meg ezt https://coderrr.wordpress.com/2008/04/20/getting-idle-time-in-unix/ a c-kódot is (megnéztem=lefordítottam) és kipróbáltam az xprintidle parancsot is. Mindegyik 5 vagy 5 ms-ot ad vissza, akármennyi is telik el.

No de miért?

Közben találtam ilyet is: http://stackoverflow.com/questions/3512333/how-to-find-out-that-a-runni…

Miért fél a csákó ezt rootként futtani? És bash-ból hogy veszem észre, ha ez a "file" tartalma megváltozott? Azaz billentyűt nyomtak?

touch /etc/nologin
shutdown -h -P -t 5 now

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Az igazi probléma magával a problémával van. Szerintem nem létezik kompromisszummentes megoldás. Tehát próbálj meg készíteni egy folyamatábrát a leállítás folyamatára. Ha az algoritmus elemi eseményeket tartalmaz, akkor ehhez már szükséged lesz kompromisszumokra. Utána már sokkal egyszerűbb lesz a feladat megoldása.

Például egy probléma: Leülök a gép elé, emelem a kezemet, hogy beírjam a felhasználóim nevemet, de a kezem emelése közben leáll a gép. Ez számomra ugyanannyira lenne idegesítő, mintha a jelszó beírása közben állna lenne.

Ha erre is megoldást akarnék, akkor abba az irányba indulnék el, hogy a kilépés opciót választva a kiléptetés helyett leállítást hajtson végre a gép. Esetleg hibernálást.

Ezzel is lesz egy kis gond, mert ha azért lépek ki, hogy átadjam a helyemet másnak, akkor a helyemre ülőnek ki kell várni a ki- és bekapcsolás idejét. Ehhez kellene a kilépés lehetősége mellett egy felhasználó váltás opció is. Nem az ami az Ubuntuban jelenleg van, hanem olyan, ami ténylegesen kiléptetné a régi felhasználót. Esetleg egy időzítéssel, miszerint ha a kijelentkezés után két percig nem lép be senki, akkor leállítja a gépet. De ezzel megint visszajutottunk az eredeti problémához.

Mazochista megoldás: :-) Beállítani egy webkamerás gépet, ami a leállítandó gépet és annak környezetét figyeli. A leállító script lekérdezi a webkamerás gépet, hogy van-e valaki a közelben, és csak akkor kezdi meg a leállítást, ha nincs senki a gép előtt. Esetleg a leállítás megkezdése előtt egy nagy piros lámpa is villogni kezd, ezzel figyelmeztetve a géphez közeledő személyt. De az is idegesítő lesz, hogy amikor a gép felé közeledve, már csak 3 méterre vagyok, akkor kezdi a megállítást. Mondjuk 15-20 méteres távolságból már kevésbé lenne idegesítő. Ehhez biztosítani kell, hogy a gépek között megfelelő távolság legyen. Egy 20 gépes terem esetén egy sportcsarnok méretű helyiség éppen megfelelő lesz. :-)

Lényeg: Próbáld meg pontosan megfogalmazni, hogy mit akarsz, és akkor már ki fog derülni, hogy milyen kompromisszumokkal tudod megoldani a feladatot. Még egyszer hangsúlyozom, hogy a hangsúly a probléma sokkal pontosabb megfogalmazásán van.

-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.