Linux: Como enviar mensagens para usuários locais logados no X11?

10

É possível enviar uma mensagem (janela pop-up ou algo assim) para o usuário local logado no X (xdm, fluxbox) do console? Por exemplo: user1 é registrado e usando X / fluxbox, user2 logando na mesma caixa por ssh para console. Agora - o que user2 tem que fazer para enviar uma mensagem para user1 ?

    
por marioosh 13.07.2011 / 09:11

2 respostas

15

A ferramenta xmessage permite fazer exatamente isso; apresentar uma janela pop-up para os usuários com uma mensagem de texto dentro.

Exemplo: user2 entra em uma sessão BASH na caixa e emite:

export DISPLAY=':0.0'
xmessage "some message here"

se você entrar em uma sessão do TSCH, seria algo assim:

setenv DISPLAY ':0.0'
xmessage "some message here'

Como alternativa, você pode enviar mensagens para sessões de terminal de duas maneiras:

Usando wall (= avisar todos [usuários])

Da página do man:
Mural exibe o conteúdo do arquivo ou, por padrão, sua entrada padrão, os terminais de todos os usuários atualmente conectados.

Se você deseja segmentar um usuário específico, use write . Mais uma vez, o homem nos diz:

O utilitário de gravação permite que você se comunique com outros usuários, copiando linhas do seu terminal para o deles.

    
por 13.07.2011 / 09:18
2

Como regra, as sessões do X11 geralmente são iniciadas em um modo “privado”, então você precisa de uma das duas coisas: cooperação de user2 para permitir que você acesse suas telas ou privilégios de superusuário para “invadir” para suas telas.

PERIGO: Tenha em mente que, depois de ter acesso à tela, você também pode fazer capturas de tecla (possivelmente incluindo senhas) e fazer capturas de tela, portanto, esse é um grande risco à segurança.

Em mais casos, é preferível usar uma ferramenta de mensagens ou um programa de bate-papo para essas coisas.

Advertências:

Coöperating

Se user2 quiser permitir que user1 acesse sua tela, primeiro user2 deverá emitir um comando como:

 xhost +si:localuser:user1

Isso poderia ser adicionado a um script de inicialização de algum tipo; Eu não conheço o Fluxbox, mas suponho que ele tenha um gancho rc ou início de sessão.

Depois que isso for emitido, user1 poderá gravar na exibição de user2 , se eles puderem encontrá-lo.

Se user2 estiver ciente disso, eles sempre poderão enviá-lo para user1 de alguma outra forma.

Como encontrar a exibição 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, vamos supor que você tenha uma máquina na qual muitos usuários possam ter feito login e tente encontrar o 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=(.*)
DISPLAY=:14.0 xmessage "Hello, user2"
,) { print $1 }' < $subproc/environ) done fi done

então, user1 pode finalmente (usando o valor de DISPLAY obtido acima; Acabei de escrever :14.0 aqui ...)

 DISPLAY=:14.0 notify-send "Hello, user2"

Enviando uma notificação em vez

No interesse da perfeição, o seguinte funciona na área de trabalho do Gnome, pelo menos. Eu não sei se o Fluxbox tem um widget de notificação.

 xhost +si:localuser:user1

Isso tem muito mais opções amigáveis para a exibição e, provavelmente, será exibido de maneira mais amigável na tela do usuário.

    
por 29.08.2016 / 23:32

Tags