데스크톱 알림을 받는 방법은 무엇입니까?

데스크톱 알림을 받는 방법은 무엇입니까?

다른 장치에 데스크탑 알림을 표시하고 싶습니다(Gnome 3을 사용하고 있습니다). 그래서 나는 내 컴퓨터에서 알림을 받고 인터넷을 통해 보낼 수 있는 소프트웨어를 작성하고 싶습니다. 불행하게도 알림을 받고 작업을 수행하는 방법에 대한 코드를 시작하기에 좋은 점을 찾지 못했습니다.

API가 있나요?

답변1

음, Gnome 알림은 D-BUS를 사용하여 메시지를 전달합니다. 이것왜소한 규범이러한 클래스를 사용하는 방법을 설명 org.freedesktop.Notifications.*하고 다양한 형식 지정 팁을 제공합니다. 일반적으로 HTML 형식입니다.

그러나 다른 머신의 D-BUS와 원격으로 통신하면 안 됩니다. 우리는 얼마나 많은 보안 침해가 발생할지조차 모릅니다.

그럼에도 불구하고 트래픽을 수신하고 로컬에 존재하는 D-BUS와 통신할 프로그램을 대상 시스템에 항상 설치할 수 있습니다.

org.freedesktop.Notifications.*프로그램 작성을 더 쉽게 만드는 래퍼로 사용할 수 있는 두 가지 옵션이 있습니다 .

  • libnotify: 이는 알림에 대한 사실상의 표준으로, gnome뿐만 아니라 다른 여러 기능도 지원합니다.

  • notify-sharp-3: 이상하게 들리겠지만 이는 여러 알림 사양을 기반으로 구축된 오픈 소스 C# 기반 기능입니다. 어느 시점에는 이라는 고유한 언어도 있었지만 boo점차 사라지고 있습니다 libnotify.

좋아, libnotify간다.

libnotify알림 데몬과 통신하는 방법을 아는 바이너리가 함께 제공됩니다(예, 이러한 알림은 백그라운드 데몬에 의해 표시됩니다). 명령은 notify-send사용이 매우 간단합니다.

notify-send 'Meeting in 5 minutes' 'John from the <b>QA Team</b> just found a bug that should never had happened.  Seriously, we are doing something wrong'

그러면 알림이 표시됩니다. 그러나 원격으로 만드는 것은 약간 복잡합니다. bob현재 컴퓨터에서 Xorg를 실행 중인 사용자를 알고 있고 krakatoakrakatoa에 libnotify가 설치되어 있고 gnome 알림 데몬이 실행 중이라고 가정하면 다음을 수행할 수 있습니다.

ssh bob@krakatoa \
    notify-send 'Meeting in 5 minutes' \
    'John from the <b>QA Team</b> just found a bug that should never had happened.  Seriously, we are doing something wrong'

그러나 모든 컴퓨터에서 모든 사용자를 찾는 것은 까다로울 수 있습니다. 실행할 스크립트를 작성하고 ps -afe | grep gnome사용자를 찾아 실행할 수 있습니다 su -u <user> DISPLAY=:0 notify-send .... 하지만 다시 말하지만 ssh처음처럼 요청을 보내서는 안 됩니다 .root

이것아치스 위키libnotify여러 언어로 된 인터페이스 목록이 있습니다. 여기에서 자신만의 데몬을 생성하고 알림 메시지에 자신만의 통신 프로토콜을 사용할 수 있습니다. 예를 들어, 특별히 그놈을 쫓고 있으므로 python Gobject이것이 딱 맞을 수도 있습니다.

간단히 말해서:

  • D-BUS에서 알림이 발생합니다.

  • D-BUS는 원격으로 직접 액세스할 수 없습니다.

  • libnotify대상 머신에서 제어하는 ​​프로그램을 사용하여 D-BUS에 액세스 할 수 있습니다 .

인용하다:

관련 정보