Como posso verificar se o usuário está logado com uma sessão gráfica E que o mesmo usuário está executando o script

1

Eu tenho um script bash que, entre outras coisas, usa o comando gsettings . Parece-me que para que esse comando funcione, o usuário precisa estar logado com uma sessão gráfica e, obviamente, também tem que executar o script como eles próprios (ou seja, não raiz).

Eu poderia verificar se eles estão usando um terminal gráfico olhando a variável TERM, mas como posso ter certeza de que o executor do script é o mesmo usuário que está logado com uma sessão gráfica?

    
por tjespe 21.04.2017 / 01:00

1 resposta

1

  • Para verificar quem está logado , você pode usar who .

  • Para verificar qual usuário executou o script :

    ps aux | grep $0 | awk '{ print $1 }' | uniq
    

    ps aux : lista todos os processos em execução, incluindo o respectivo usuário na primeira coluna.

    grep $0 : pesquisa o script atual

    awk '{ print $1 }' : imprime apenas o que está na primeira coluna

    uniq : remove possíveis duplicatas

  • Para verificar se o usuário que executou o script é o mesmo que o usuário que efetuou login :

    LOGED_USER=$(who | awk '{ print $1 }') 
    EXEC_USER=$(ps aux | grep $0 | awk '{ print $1 }' | uniq)
    
    if [ $LOGED_USER == $EXEC_USER ]; then
          echo "Same USER"
    else 
          echo "Different USER"
    fi
    
por M. Becerra 21.04.2017 / 20:10