ssh에서 작동하지 않는 알림 보내기


10

어쩌면 이것은 다른 곳에서 대답되었을 수도 있지만 그것을 보지 못했습니다.

우분투 14.04를 실행 중입니다. 예를 들어 내 컴퓨터에 SSH를 연결하면

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

컴퓨터에 로그인 한 모니터에서 아무것도 보이지 않습니다. 접두사 notify-sendDISPLAY=:0.0있거나 DISPLAY=:0다른 것이 없으면 아무 일도 일어나지 않습니다. 현재 세션에 대한 알림이 표시되지 않습니다.

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

명확하지 않은 경우 컴퓨터 A에서 컴퓨터 B로 SSH를 반복합니다. SSH 세션 내에서 컴퓨터 B에서 알림 전송을 실행하려면 으르렁 유형 알림이 표시 될 것으로 예상합니다. 컴퓨터 B의 모니터에


Google을 통해이 결과를 최고의 결과 DISPLAY=:0 notify-send 'hello'로 여기고 나를 위해 일한 다른 사람들에게는 aikeru가 아니라 더 복잡한 단계 전에 시도하십시오.
Mark

답변:


9

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

발췌

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

출처 : https://developer.gnome.org/libnotify/

앱별 접근 방식

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

SSH를 통한 터널링 libnotify

보다 일반적인 해결책 libnotify-over-ssh은 당신이 찾고있는 것보다 많을 수 있습니다.

발췌

이것은 필자가 작성한 클라이언트 서버 펄 스크립트이므로 서버가 본질적으로 로컬 시스템에 libnotify 메시지를 보낼 수 있습니다. 나는 주로 위챗과 함께 사용하지만 더 일반적으로 만드는 기능이 있습니다. 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 파일 이름은 세션마다 변경됩니다.


흠 .. 설명을 추가했습니다. SSH를 통해 메시지를 보내고 싶지 않습니다. notify-send는 터미널 (클라이언트가 아닌) PC에 대화 형으로 실행할 수있는 터미널 응용 프로그램으로 생각합니다. 나는 알다시피-notify-send는 자체 방식으로 호스트 컴퓨터에서 클라이언트 그 자체입니다-당신이 말하는 것입니다. 그것은 어떻게 든 SSH 세션 중에는 이것이 불가능하다는 것을 의미합니까? SSH 클라이언트에 SSH 호스트 / 서버에만 표시되도록하려고하지 않습니다.
aikeru

@aikeru- notify-send수신 알리미 디먼에 메시지를 보낼 수 있습니다. SSH를 통해 로그인 할 때이 환경에이 알리미와 통신하는 데 필요한 정보가없는 것이 근본적인 문제입니다.
slm

그렇다면 현재 환경 또는 이와 유사한 것에 연결하여 정보가 필요한 방법이 있습니까?
aikeru

@ aikeru-내가 찾은 많은 것들이 설정 $DISPLAY=:0이 효과 가 있음을 보여 주지만 이것은 나에게도 효과가 없습니다. Cinnamon을 데스크탑으로 사용하는 Fedora 20을 사용하고 있습니다. strace이를 디버깅하는 데 사용하면 SSH를 통과 할 때 연결이 이루어지지 않아 여전히 차단 대상을 조사하고 있음을 알 수 있습니다.
slm

@aikeru-업데이트를 참조하십시오.
slm

0

IMO, 다음을 사용할 수 있습니까?

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.