Eu vim com essa função para desconectar usuários (veja na parte inferior)
Assume
- você tem permissões de sudo
- você tem festança
- os usuários têm uma sessão X em execução (embora você deva emitir o mesmo comando de logoff várias vezes para se livrar das sessões restantes)
Você pode atribuir vários nomes de usuário:
logout john jane mike elisa
E você pode oferecer opções adicionais:
logout john --force
Então, eu tenho a seguinte função auxiliar:
function forcelogout() {
logout "$@" --no-prompt --force
}
Notas:
- Este é um instrumento contundente e funciona apenas copiando todo o ambiente da sessão. Isso pode ser mais seletivo.
- Às vezes, o logout parece demorar um pouco
- Em raras ocasiões, a sessão continua sendo relatada até que alguém visite a vt onde a sessão foi executada, mas nada mais existe)
CÓDIGO
function logout() {
local USERNAME
export USERNAMES=( )
while [ -n "$1" ]; do case "$1" in
-* ) break ;;
*) USERNAMES+=( "$1" ); shift ;;
esac; done
for USERNAME in "${USERNAMES[@]}"; do
local SESSION_PID=$(pgrep -fu "$USERNAME" gnome-session|head -1)
if [ -n "$SESSION_PID" ]; then
(
sudo -u "$USERNAME" cat "/proc/$SESSION_PID/environ" | xargs -0 -n 1 echo export
echo "gnome-session-quit --logout $@"
) | sudo -u "$USERNAME" sh -;
fi
done
}
restart
interromperá todos os programas em execução. (Eu ainda não sei como reiniciar o GUI sem parar os programas.)