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 attraverso pm-suspend, con l'aiuto di sudo perché richiede i permessi di amministratore
  • screen 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'.