Definir DISPLAY=:0 não tem efeito para enviar notificação via ssh

Definir DISPLAY=:0 não tem efeito para enviar notificação via ssh

Tenho acesso ssh ao computador do meu colega de apartamento (Ubuntu 14.04). Quero enviar uma mensagem para ela via ssh, por isso uso este comando

export DISPLAY=:0 && notify-send "sample message"

O comando termina com 0, mas ela não vê nenhuma mensagem. Por outro lado, quando usoexportar DISPLAY=:0e por exemplotermo x, o xterm normalmente abre. libnotifyestá instalado, quando executonotificar-enviarlocalmente, isso mostra. Além disso, quando tento este comando via ssh em outro computador, ele funciona.

Alguma idéia, por que isso está acontecendo, por favor? Obrigado

Responder1

notify-send precisa ter credenciais de sessão para poder enviar notificações dentro da sessão de seus amigos. Eles são armazenados em variáveis ​​de ambiente incluídas em uma sessão quando você faz login, o que evita que processos invasores em segundo plano atrapalhem sua área de trabalho.

Uma maneira fácil de disponibilizar essas credenciais de sessão (e subverter completamente a segurança da área de trabalho) é fazer com que a sessão da área de trabalho inicie uma sessão de tela e depois a coloque em segundo plano.

você pode então ssh para ele, conectar-se à sessão de tela e então seu envio de notificação funcionará. Se você fizer isso, certifique-se de que sua colega de apartamento esteja plenamente ciente de que você tem acesso total à área de trabalho e aos arquivos dela.

Para configurar a sessão de tela:

No painel, execute 'Aplicativos de inicialização'

clique em adicionar, dê um nome a ele e digite o seguinte no comando:

screen -dmS desktop_session

Então, quando você se conecta via ssh

screen -r desktop_session
notify-send "Insecure message"

Você pode então executar qualquer comando e fazer com que sua saída gráfica apareça nessa sessão da área de trabalho.

Você precisará fazer isso de forma interativa; se quiser fazê-lo de forma não interativa, você poderá fazer com que um script de shell pesquise um arquivo e, quando houver dados, envie-o para notificação. ou apenas use um cliente de mensagens instantâneas.

Responder2

Eu tive que fazer uma coisa semelhante - eu executaria uma atualização em um computador, mas queria enviar uma notificação em outro computador. Eu usei sshpass:

sshpass -p user_password ssh -X user_name@ip_address DISPLAY=:0 notify-send "The message"

onde você substituiria user_passworde user_namepara ip_addressseu usuário/máquina específico.

informação relacionada