Eu descobri uma maneira de fazer isso, é um truque usando shell scripts, cron e sudo, mas parece funcionar muito bem.
Primeiro, crie um script de shell /bin/usertimeout
de propriedade de root, chmod-lo para 755 e cole o seguinte conteúdo no arquivo
#!/bin/bash
# Timeout is the number of seconds a login session can be idle before it is
# automatically logged out.
timeout=3600
if [ $(stat -f %u /dev/console) == $UID ]
then
if [ -e /tmp/backgroundUserLogout.$UID ]
then
rm /tmp/backgroundUserLogout.$UID
fi
else
if [ ! -e /tmp/backgroundUserLogout.$UID ]
then
touch /tmp/backgroundUserLogout.$UID
else
if [ $(( 'date +%s' - 'stat -f %m /tmp/backgroundUserLogout.$UID || printf 0' )) -ge $(( $timeout )) ]
then
rm /tmp/backgroundUserLogout.$UID
sudo /sbin/killuser
fi
fi
fi
Em seguida, crie um arquivo /sbin/killuser
, de propriedade de root, chmod-lo para 755 e cole o seguinte conteúdo
#!/bin/bash
#
# Logs out the user calling this script
# Get the PID of the loginwindow process for the user executing this
pid='ps -Axjc | grep ^$SUDO_USER | grep loginwindow | cut -c 14-20 | tr -d /\ /'
# If the PID appears to be valid, kill the process
if [ $pid -gt 0 2>/dev/null ]
then
kill -9 $pid
fi
Em seguida, adicione uma entrada crontab para cada usuário que deseja efetuar o logout automático. Isso seria um problema se você quisesse que todos os usuários fossem afetados, mas, no meu caso, eu só preciso que um pequeno número de usuários seja desconectado em modo inativo.
# Crontab for user that has to be autologged out
* * * * * /bin/usertimeout
Observe que o exemplo acima é executado a cada minuto, dependendo do tempo ocioso permitido, você pode aumentar isso para uma frequência mais adequada (por exemplo, a cada 15 minutos usando */15 * * * * /bin/usertimeout
)
Agora, um mod simples para o arquivo sudoers usando visudo
e você está pronto para usar.
%users ALL=(ALL) NOPASSWD: /sbin/killuser