Força os usuários (em um mac) a fazer logoff após inatividade

2

Estou procurando uma maneira de fazer com que as contas deixadas no meu Mac sejam desconectadas automaticamente após um período de inatividade.

Existe uma configuração incorporada ao sistema operacional (Lion), que faz isso, mas se aplica a todos os usuários, e eu só quero fazer isso com certas contas.

No Windows, eu poderia usar o gpedit para forçar os usuários a usar um protetor de tela que desconecte os usuários. Existe algo semelhante que eu possa fazer no Mac OS X Lion?

p.s. Eu sou o único administrador no sistema.

    
por Bryan 02.01.2012 / 14:46

1 resposta

2

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
    
por 04.01.2012 / 00:29