Linux: Como enviar mensagem para o usuário local conectado ao X11?
10
É possível enviar uma mensagem (janela pop-up ou algo assim) para o usuário local conectado ao X (xdm, fluxbox) no console? Por exemplo: user1está logado e usando o X / fluxbox, user2efetuando login na mesma caixa por ssh no console. Agora - o que você user2precisa fazer para enviar uma mensagem user1?
Se um destinatário ( user1no meu exemplo) estiver conectado ao X11 e não tiver aberto xtermou outro terminal - wallfuncionará também? Eu acho que user1não vai ver mensagens.
marioosh
Atualizei minha resposta para incluir a solução 'xmessage'. Isso mostrará uma pequena janela para o usuário, independentemente de ele ter um terminal aberto.
Mjk
1
Aliás, 'apropos' é um utilitário útil para se conhecer; ele procura nas páginas de manual o texto que você passa para ele. Tente executar 'apropos message' e veja o que ela retorna.
Mjk
Eu sei, xmessagemas como executá-lo user1e abrir essa pequena janela na user2tela? isso é possível?
marioosh
@ marioosh Eu também gostaria de saber como fazer isso. Você já descobriu isso?
2
Como regra, as sessões X11 geralmente são iniciadas no modo "privado", portanto, você precisa de uma de duas coisas: cooperação de user2para permitir o acesso às telas ou privilégios de superusuário para "invadir" as telas.
PERIGO: Lembre-se de que, uma vez que você tenha acesso à tela deles, também poderá fazer ações como capturar pressionamentos de tecla (incluindo potencialmente senhas) e tirar capturas de tela, portanto, esse é um grande risco à segurança.
Na maioria dos casos, é preferível usar uma ferramenta de mensagens ou um programa de bate-papo para essas coisas.
Advertências à parte:
Cooperação
Se user2quiser permitir user1acessar sua tela, primeiro é user2necessário emitir um comando como:
xhost +si:localuser:user1
Isso poderia ser adicionado a um script de inicialização de algum tipo; Não conheço o Fluxbox, mas presumo que ele tenha um rcgancho ou um início de sessão.
Depois que isso for emitido, ele user1poderá gravar no user2visor, se eles puderem encontrá-lo.
Se user2estiver ciente disso, eles sempre poderão enviá-lo de user1alguma outra maneira.
Localizando a tela de outro usuário
Em uma estação de trabalho típica, é incomum ter mais de um ou dois usuários conectados; nesse caso, “adivinhar” que a exibição desejada é 0, 1 ou talvez 2 pode ser uma solução viável.
No entanto, para uma solução mais completa, suponha que você tenha uma máquina na qual muitos usuários possam estar conectados e tente encontrar a que deseja.
for proc in /proc/[0-9]*/
do
if [ Xorg = $(< $proc/comm ) ] 2>/dev/null && \
[ $(id -u user2) -eq $(< $proc/loginuid) ] 2>/dev/null
then
for subproc in $(
do
echo "user2 display=" $(perl -ne 'if (m,DISPLAY=(.*)\0,) { print $1 }' < $subproc/environ)
done
fi
done
então, user1pode finalmente (usando o valor DISPLAY obtido acima; eu acabei de escrever :14.0aqui…)
DISPLAY=:14.0 xmessage "Hello, user2"
Enviando uma notificação
No interesse da integridade, o seguinte funciona no ambiente de trabalho Gnome, pelo menos. Não sei se o Fluxbox tem um widget de notificação.
DISPLAY=:14.0 notify-send "Hello, user2"
Isso tem muito mais opções fáceis de usar para exibição, e provavelmente aparecerá de uma maneira mais amigável na tela do usuário.
user1
no meu exemplo) estiver conectado ao X11 e não tiver abertoxterm
ou outro terminal -wall
funcionará também? Eu acho queuser1
não vai ver mensagens.xmessage
mas como executá-louser1
e abrir essa pequena janela nauser2
tela? isso é possível?Como regra, as sessões X11 geralmente são iniciadas no modo "privado", portanto, você precisa de uma de duas coisas: cooperação de
user2
para permitir o acesso às telas ou privilégios de superusuário para "invadir" as telas.PERIGO: Lembre-se de que, uma vez que você tenha acesso à tela deles, também poderá fazer ações como capturar pressionamentos de tecla (incluindo potencialmente senhas) e tirar capturas de tela, portanto, esse é um grande risco à segurança.
Na maioria dos casos, é preferível usar uma ferramenta de mensagens ou um programa de bate-papo para essas coisas.
Advertências à parte:
Cooperação
Se
user2
quiser permitiruser1
acessar sua tela, primeiro éuser2
necessário emitir um comando como:Isso poderia ser adicionado a um script de inicialização de algum tipo; Não conheço o Fluxbox, mas presumo que ele tenha um
rc
gancho ou um início de sessão.Depois que isso for emitido, ele
user1
poderá gravar nouser2
visor, se eles puderem encontrá-lo.Se
user2
estiver ciente disso, eles sempre poderão enviá-lo deuser1
alguma outra maneira.Localizando a tela de outro usuário
Em uma estação de trabalho típica, é incomum ter mais de um ou dois usuários conectados; nesse caso, “adivinhar” que a exibição desejada é 0, 1 ou talvez 2 pode ser uma solução viável.
No entanto, para uma solução mais completa, suponha que você tenha uma máquina na qual muitos usuários possam estar conectados e tente encontrar a que deseja.
então,
user1
pode finalmente (usando o valor DISPLAY obtido acima; eu acabei de escrever:14.0
aqui…)Enviando uma notificação
No interesse da integridade, o seguinte funciona no ambiente de trabalho Gnome, pelo menos. Não sei se o Fluxbox tem um widget de notificação.
Isso tem muito mais opções fáceis de usar para exibição, e provavelmente aparecerá de uma maneira mais amigável na tela do usuário.
fonte
for subproc in
que? Eu acho que seu script está corrompido aqui.