Em muitas distribuições atuais, as sessões de login (gráficas e não gráficas) são gerenciadas por logind
. Você pode listar sessões usando
loginctl list-sessions
e, em seguida, exibir as propriedades de cada sessão usando
loginctl show-session ${SESSIONID}
ou
loginctl session-status ${SESSIONID}
(substituindo ${SESSIONID}
conforme apropriado); A diferença entre as duas variantes é que show-session
é projetado para ser facilmente analisado, session-status
é projetado para consumo humano. Sessões ativas são identificadas pelo seu estado; você pode consultar isso diretamente usando
loginctl show-session -p State ${SESSIONID}
qual produzirá
State=active
para a (s) sessão (ões) ativa (s). A saída total show-session
dirá qual usuário está conectado, qual TTY está sendo usado, se é uma sessão remota, se é uma sessão gráfica, etc.
Observe que logind
pode ter várias sessões ativas, se o sistema estiver configurado com várias estações ou se houver sessões remotas.
Colocando tudo isso junto,
for sessionid in $(loginctl list-sessions --no-legend | awk '{ print $1 }')
do loginctl show-session -p Id -p Name -p User -p State -p Type -p Remote $sessionid
done
fornecerá todas as informações necessárias para determinar quais sessões estão ativas e quem as está usando e
for sessionid in $(loginctl list-sessions --no-legend | awk '{ print $1 }')
do loginctl show-session -p Id -p Name -p User -p State -p Type -p Remote $sessionid | sort
done |
awk -F= '/Name/ { name = $2 } /User/ { user = $2 } /State/ { state = $2 } /Type/ { type = $2 } /Remote/ { remote = $2 } /User/ && remote == "no" && state == "active" && (type == "x11" || type == "wayland") { print user, name }'
imprimirá os identificadores e logins de todos os usuários ativos com sessões gráficas.