Usando a linha de comando, eu gostaria de mostrar uma notificação em cada exibição do X em execução. (e console em execução)
Algo como:
notify-send-all 'Warning' 'Nuclear launch in 5 minutes, please evacuate'
Existe um programa que fará isso? Caso contrário, isso pode ser implementado com o bash?
command-line
xorg
tty
console
notifications
Stefan
fonte
fonte
Respostas:
Você pode enviar uma mensagem para todos os consoles com o mural de comandos.
Para enviar notificações em X, há um envio de notificação que envia uma notificação para o usuário atual na exibição atual. (Com base na sua pergunta, acho que você já conhece essa.) Você pode desenvolver isso com alguns scripts bash. Basicamente, você precisa descobrir quais usuários estão em quais X-Displays. Depois de obter essas informações, você pode usar o envio de notificação assim:
Onde fschmitt é o usuário na tela 0. Você pode analisar a saída do comando "who" para encontrar todos os usuários e suas telas. A saída é assim
Veja bem, existem dois usuários executando sessões X, markmerk3 no display 0 e seamonkey no display 1. Acho que você precisa grep para tty [0-9] * e depois garantir que no final da linha haja (: [0 -9.] *) Para se livrar dos logins do console e extrair o ID de exibição da string entre parênteses.
fonte
who
informa quem está logado e em qual X exibe esse logon. Você pode ter que filtrá-lo um pouco.who | awk '/\(:[0-9]+\)/ {gsub("[:|(|)]","");print "DISPLAY=:"$5 " sudo -u " $1 " notify-send \"Message\""}' | bash
. Além disso, você pode querer ver unix.stackexchange.com/questions/1596/…Este tópico é um pouco antigo, desculpe, mas espero ainda poder adicionar algo útil ao tópico. (também Josef Kufner escreveu um bom roteiro, foi um pouco longo demais para o meu gosto e usa PHP)
Eu também precisava de uma ferramenta, conforme descrito na pergunta original (para enviar uma mensagem a todos os usuários X ativos). E com base nas respostas aqui, escrevi esse pequeno script somente bash, que procura usuários X ativos (usando 'who') e, em seguida, executando o envio de notificação para cada usuário ativo.
E o melhor: você pode usar meu script exatamente como "notificar-enviar", com todos os seus parâmetros! ;-)
notificar-enviar-tudo:
Copie o código acima em um arquivo chamado "notify-send-all", torne-o executável e copie-o para / usr / local / bin ou / usr / bin (como desejar). Em seguida, execute-o, por exemplo, como root em uma sessão de console como esta:
notify-send-all -t 10000 "Warning" "The hovercraft is full of eels!"
Estou usando-o há vários meses, em máquinas diferentes, e não tive nenhum problema até agora, e testei-o com os desktops MATE e Cinnamon. Também executá-lo com sucesso no cron e no anacron.
Eu escrevi esse script para / no ArchLinux, então, por favor, diga-me se você está tendo problemas em outras distribuições ou desktops Linux.
fonte
|egrep
?? O egrep é um comando?awk '{print $1$5}'
, é melhor usá-awk '{print $1$NF}'
lo, para que não seja interrompido em alguns locais onde a data é formatada com espaços (por exemplo, emJun 3
vez de2017-06-03
). Aqui é também uma versão para notificar usuário específico em vez de todos os usuários: gist.github.com/shvchk/ba2f0da49bf2f571d6bf606d96f289d7grep -E
e adicionar/bin
ao caminho (veja a edição). Sinta-se livre para reverter se oporEu também precisava disso para algumas notificações em todo o sistema. Aqui está a minha solução. Ele examina / proc para encontrar todos os barramentos de sessão e, em seguida, executa o envio de notificação em cada um deles (uma vez por barramento). Todos os argumentos são passados inalterados para envio de notificação real.
fonte
No Ubuntu 16.04, eu queria notificações de um script executado como root no crontab. Depois de definir as variáveis de ambiente,
sudo -u $user
não funcionou por algum motivo, massh -c "..." $user
funciona.Então agora eu uso esta função:
Como encontrar a variável DBUS_SESSION_BUS_ADDRESS provavelmente depende da sua distribuição. No Ubuntu 16.04, ele está dentro
/run/user/$UID/dbus-session
, o que pode ser simplesmente obtido.id -u
é usado na função acima para obter o UID do nome de usuário retornado porwho
.fonte
Aqui está uma atualização do script de Andy: A maneira como ela determinou
DBUS_SESSION_BUS_ADDRESS
que não funciona no Centos 7. Além disso, owho
comando não listou algumas sessões por algum motivo, então analiso aps aux
saída. Esse script pressupõe que os usuários estejam logados usando o X2GO (nxagent
), mas deve ser simples de ajustar para outros casos.fonte
fonte