SSH에서 알림 전송이 작동하지 않습니다.

SSH에서 알림 전송이 작동하지 않습니다.

어쩌면 다른 곳에 답이 있을 수도 있지만 나는 그것을 볼 수 없습니다.

저는 우분투 14.04를 실행하고 있습니다. SSH를 통해 내 컴퓨터에 연결할 때 예를 들면 다음과 같습니다.

ssh <user>@<machineip> notify-send "Hello"

로그인한 컴퓨터의 모니터에 아무것도 보이지 않습니다. notify-send앞에 DISPLAY=:0.0or 를 붙이면 DISPLAY=:0아무 일도 일어나지 않습니다. 현재 세션에서는 알림이 전혀 표시되지 않습니다.

이 작업을 수행하는 데 필요한 트릭/스위치가 있습니까?

이것이 명확하지 않은 경우 다시 한 번 강조하겠습니다. 컴퓨터 A에서 컴퓨터 B로 SSH를 실행합니다. SSH 세션 내에서 컴퓨터 B에서 실행되도록 알림 보내기를 수행하고 싶습니다. 컴퓨터 B의 모니터에 포효형 알림이 표시되기를 원합니다.

답변1

다양한 기술과 그 작동 방식을 혼동하고 계신 것 같습니다. 한 시스템의 알림 데몬이 SSH를 통해 메시지를 보낼 수 있는 것을 원하지 않습니다. 설정은 $DISPLAY표시 목적으로 응용 프로그램의 출력을 다른 응용 프로그램으로 보내는 X11의 방법이지만 notify-send실제 메시지는 알림 데몬으로 보냅니다. 이 메시지는 libnotify라이브러리를 사용하여 전송됩니다.

발췌

libnotify는 데스크톱 알림 사양에 정의된 대로 알림 데몬에 데스크톱 알림을 보내기 위한 라이브러리입니다. 이러한 알림은 사용자에게 이벤트를 알리거나 사용자를 방해하지 않고 어떤 형태의 정보를 표시하는 데 사용될 수 있습니다.

원천:https://developer.gnome.org/libnotify/

애플리케이션별 메소드

가입하는 한 가지 방법 notify-send은 다음 블로그 게시물에 설명된 방법을 사용하는 것입니다.SSH 및 libnotify를 통한 IRC 알림. 이 방법은 로컬 알리미로 다시 터널링하려는 각 알림 유형에 대해 사용자 정의해야 합니다.

SSH를 통해 libnotify 터널 설정

보다 일반적인 솔루션을 위해libnotify-over-ssh귀하의 요구에 더 잘 맞을 수 있습니다.

발췌

이것은 내 서버가 기본적으로 내 로컬 컴퓨터에 libnotify 메시지를 보낼 수 있도록 내가 작성한 클라이언트 서버 Perl 스크립트입니다. 주로 위챗으로 사용하는데, 좀 더 다양하게 활용할 수 있는 기능이 있습니다. weechat 태그를 사용하여 클라이언트를 호출하면 서버는 현재 포커스가 있는 창의 이름을 확인합니다. weechat으로 시작하는 경우 알림 보내기가 호출되지 않으면 알림이 표시되지 않습니다.

원격 서버에 표시

반면 notify-send에 연결하는 데 사용하는 원격 서버에 메시지를 표시하려는 경우 ssh이 Q&A에 제시된 제안 중 하나를 따를 수 있습니다.cron으로 알림 보내기 사용. 일부 답변에서는 이것이 불필요하다고 제안하지만, Cinnamon을 Fedora 20 시스템에서 데스크톱으로 사용하는 다른 사람들의 의견에서 언급한 대로 다음을 수행해야 작동했습니다.

작업을 시작하려면 notify-send원격 시스템의 데스크탑 환경에서 적절한 값으로 이 변수를 설정해야 합니다.

$ export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-wzrbFpDUZQ,guid=82e5bffe1f819506faecc77a53d3ba73

내 시스템에서는 이 목적으로 유지 관리되는 파일을 활용할 수 있습니다.

$ ssh me@remote
$ source ~/.dbus/session-bus/6a34f24f9c504e3f813bc094ed0b67af-0
$ notify-send "hi"

노트:DBUS 파일의 이름은 세션마다 변경됩니다.

답변2

IMO, 어쩌면 다음을 사용할 수 있습니다:

ssh user@host 'export DISPLAY=:0 && notify-send "test message"'

물론 이는 ":0"이 DISPLAY 변수의 실제 값이라고 가정합니다(현재 로그인한 유일한 사용자인 경우). 두 개의 명령을 보내고 변수를 내보내면 두 번째 명령인 "notify-send"에서 변수를 사용할 수 있기 때문에 여기서는 "내보내기" 특수 단어를 사용해야 한다고 생각합니다. "&&" 문자를 사용하면 한 줄에 두 개의 명령을 시작할 수 있습니다.

답변3

  1. 로컬 포트:7272를 dbus 추상 소켓으로 전달
@local $ echo $DBUS_SESSION_BUS_ADDRESS
unix:abstract=/tmp/dbus-pH1JnDeLNA,guid=5fe0907d81e722390f1ce02d6033ad76
@local $ socat TCP-LISTEN:7272,reuseaddr,fork ABSTRACT-CONNECT:/tmp/dbus-pH1JnDeLNA
  1. 원격 호스트에서 포트 7272 전달 재개
@local $ ssh -R localhost:7272:localhost:7272 remotehostname
  1. 추상 소켓을 localhost:7272로 전달
@remote $ socat ABSTRACT-LISTEN:/tmp/custom_dbus_name,fork TCP:localhost:7272
  1. 알림 전송 시작
@remote $ export DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/custom_dbus_name,guid=5fe0907d81e722390f1ce02d6033ad76'
@remote $ notify-send "Hello, World"

관련 정보