Este é um pedido de melhoria e atualização (NÃO é uma duplicação!) sobre essas duas perguntas & respostas:
Atualmente estou no Ubuntu 15.04 e o comando who
fornece uma saída assim quando executado em um terminal raiz, pois meu script será usado como uma tarefa cron:
sadi :0 2015-10-07 17:32 (:0)
root pts/0 2015-10-07 19:55 (:0)
Depois de estudar as perguntas & respostas mencionadas acima, eu escrevi estas linhas (um pouco atualizadas, mas inacabadas):
#!/bin/bash
xuser=${who | grep -m1 ^.*\) | awk '{print $1}'}
xdisplay=${who | grep -m1 ^.*\) | awk '{print $5}' | sed 's/[(|)]//g'}
DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message'"
Eu me pergunto por que essas duas variáveis não funcionam (dando bad substitution
) ... Além disso, para tornar esse script aplicável a configurações diferentes (por exemplo, multiusuário), acho que devo levar em conta que pode ser outros usuários também. Então, eu acho que preciso criar um loop que insira cada usuário e seu display X no último comando, mas como iniciante no bash scripting eu não sei como ...
Até encontrar uma resposta para esta pergunta, estou usando um script de usuário único como este:
cuser="${SUDO_USER:-$USER}"
...
DISPLAY=:0 XAUTHORITY=/home/"$cuser"/.Xauthority su "$cuser" -c "notify-send 'Message'"
Parece que a grep
option -m1
também deve ser modificada (assim como a substituição de ${...}
por $(...)
), já que ela meramente define quantas linhas devem ser capturadas da parte superior da saída.
O comando who
- executado em um terminal raiz novamente - fornece uma saída assim quando há também uma sessão de convidado, ou seja, um ambiente multiusuário:
sadi :0 2015-10-08 10:40 (:0)
guest-bAMpqo :1 2015-10-08 12:22 (:1)
root pts/28 2015-10-08 12:43 (:0)
guest-bAMpqo pts/18 2015-10-08 12:25 (:1)
Então, isso deve me fornecer uma lista de nomes de usuários X e X Displays:
#!/bin/bash
xusers=$(who | grep ' :[0-9]' | awk '{print $1}')
xdisplays=$(who | grep ' :[0-9]' | awk '{print $5}' | sed 's/[(|)]//g')
DISPLAY="$xdisplay" XAUTHORITY=/home/"$xuser"/.Xauthority su "$xuser" -c "notify-send 'Message'"
Agora preciso modificar o último comando para capturar essa lista linha por linha.