AutoLogout in Linux Desktop
In quasi tutti i sistemi operativi Linux, 2 utenti desktop possono essere loggati simultaneamente, questa caratteristica non è vera per Chrome OS (il sistema operativo Linux dei Chromebook) ed effettivamente questa modalità Kiosk ha un suo perché.
Quando ci sono 2 o più utenti attivi (e le rispettive sessioni grafiche aperte) l'ultimo utente che arriva si trova un'esperienza utente degradata. In particolare quando l'utente precedente lascia la sessione con 20 tab aperte, video di YouTube e Flash plugin attivo,..
Ma l'utente precedente non potrebbe uscire dalla sessione?
Potrebbe.. ma se non lo fa? Si attiva il blocco schermo ma dietro le quinte tutto continua a girare ed ad occupare CPU / RAM. Il comportamento predefinito non è quello di farlo uscire forzatamente.
AutoLogout
Soluzione? Autologout. Teoricamente questa opzione "avanzata" dovrebbe essere possibile attraverso il Locking Down di GNOME (ovvero limitando e forzando il registro di configurazione dell'ambiente desktop), in pratica invece di ravanare in dconf, gconf, system-db,.. si fa molto prima a risolvere la questione componendo un po' di tool Unix-like e incollandoli insieme con un po' di scripting.
Installiamoli!
sudo apt-get install xautolock screen pm-utils
xautolock
ci permette di fare qualcosa se l'utente non usa mouse o tastiera per un po'pm-utils
per mettere in standby il computer da terminale attraversopm-suspend
, con l'aiuto disudo
perché richiede i permessi di amministratorescreen
lo usiamo per eseguire un processo distaccato dalla sessione utente
Cosa si vuole ottenere?
Se l'utente desktop corrente abbandona la postazione, far partire un avviso, e se viene ignorato fare uscire forzatamente l'utente (e visto che ci siamo mettere anche il computer in standby).
1 - Far funzionare lo stanby con l'utente normale o admin:
Digitate sudo visudo
e inserite al fondo del file la riga sotto. L'obbiettivo è che l'utente possa eseguire sudo pm-suspend
senza dover digitare la password (in questo caso gli utenti del gruppo adm)
### ...
%adm ALL = NOPASSWD: /usr/sbin/pm-suspend
2 - Script che avvisa l'utente dell'imminente uscita
### /usr/local/bin/autologout.sh
#!/bin/bash
# suspend system, assume di si dopo 20 secondi di non risposta
zenity --question --timeout 20 --text="Computer inattivo \n Vuoi che vada in standby?"
# 0==yes 1==no
if [[ $? -eq 1 ]] ; then
echo "no"
exit $rc
else
echo "yes"
screen -dm bash -c "sleep 10; sudo pm-suspend" # >quit
gnome-session-quit --force --logout
fi
Da notare l'utilizzo di screen
, non sappiamo esattamente quando la sessione sarà conclusa quindi assumiamo che dopo 10 secondi lo sia e si possa mandare il computer in standby.
Da rendere eseguibile con:
sudo chmod +x /usr/local/bin/autologout.sh
3 - Far partire lo script ad ogni inizio sessione
Con il file sottostante fate partire xautolock
all'inizio di ogni sessione grafica utente, -time 5
significa che l'ipotetica procedura di standby dovra partire dopo 5minuti di mancata attività.
### /etc/xdg/autostart/autolock.desktop
[Desktop Entry]
Type=Application
Name=Autolock
Comment=Autologout on idles
Icon=appointment-soon
Exec=xautolock -time 5 -locker "autologout.sh"
Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;X-MEEGO-NB;Unity;
X-GNOME-Autostart-Delay=5
X-GNOME-Autostart-enabled=true
Name[it_IT]=autolock.desktop
Comment[it_IT]=autolock
Conclusione ed eventuali miglioramenti
Il sistema funziona, anche se in caso di lungo aggiornamento o download non si può lasciare il computer da solo, perché altrimenti non è detto che lo porterebbe alla fine correttamente.
Per gestire questo caso si possono prendere diverse strade, la più veloce probabilmente è controllare l'eventuale presenza di un file /tmp/DO-NOT-STANDBY
e disabilitare questo comportamento per un po'.