Linux에서 알림은 어떻게 작동하나요?

Linux에서 알림은 어떻게 작동하나요?

저는 ArchLinux를 사용하지만 제가 자주 언급하는 이유를 제외하고는 관련이 없습니다.위키 페이지.

알림이 작동하는 방식과 알림을 작동시키기 위해 "플레이어"가 상호 작용하는 방식에 대한 명확한 이해가 실제로 없다고 생각합니다.

  • 몇 명의 플레이어가 참여하나요?
  • 알림 서버란 무엇이며 어떤 역할을 합니까?제공하다?
  • 알림 클라이언트란 무엇이며 어떤 역할을 합니까?하다?
  • notify-send이 기능을 사용하여 알림을 표시할 수 있나요? 예그것(음,) 고객?
  • 무엇인가요데몬에게 알림?
  • 그리고 어떤 효과가 있는지libnotify?

이것을 이해하고 내 시스템에 알림을 설정하기 위해 언급했습니다.이 위키 페이지

나는 전에 시도했다notification-daemon첫 번째. 그냥 설치한 후에는 작동하지 않습니다. 호출이 성공하려면 notify-send수동으로 시작(실행을 의미함)하거나, 어떤 방식으로든 자동으로 시작하거나, 이 내용으로 /usr/lib/notification-daemon-1.0/notification-daemon생성된 파일을 사용해야 합니다./usr/share/dbus-1/services/org.freedesktop.Notifications.service

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/notification-daemon-1.0/notification-daemon

그런 다음 시도했습니다.dunst그러나 일단 설치하면 제대로 작동하며 어떤 의미에서는 제대로 notify-send작동합니다. 나는 이것이 근본적으로 첫 번째 호출에서 시작되기 때문이라고 생각합니다 notify-send(즉, 프로세스가 실행 중이기 때문에 제거한 후에도 작동할 것이라는 첫 인상을 받았습니다 dunst). 그러나 이를 수행하는 방법은 무엇입니까?

이 두 가지 모두 notification-daemon섹션 dunst아래에 있습니다.알림 서버 > 독립 실행형, 그러나 "알림 데몬"이라고도 합니다.데몬에게 알림그리고서버에 알림동의어인가요? 그렇지 않다면 차이점은 무엇입니까?

사용자(나)의 관점에서 보면 이 두 가지 미학에 차이가 있나요? 내 말은, 하나가 실행 중일 때와 다른 하나가 실행 중일 때 알림이 다르게 보인다는 것입니다. 그건 그렇고, "그들이 어떤 서비스를 제공하고 있습니까?"라는 질문이 여기에서 발생합니다. 왜냐하면 그들은 다른 도구가 알림을 보내어 좋은 방법으로 표시할 수 있기를 기다리고 있는 것 같기 때문입니다. 아니면 둘 다 둘 다 하는 걸까요? 두 경우 모두 알림은 원래 어디에서 왔습니까? 알림 상자로 어떻게 이동하나요?

어쨌든, 알림에 대해 사용자 정의 작업을 수행하려면 어떻게 해야 합니까? 이 모든 콘텐츠를 파일에 추가하는 자체 쉘 스크립트를 갖고 싶다고 가정해 보겠습니다 ~/notifications. 이것은 내가 나만의 알림 서버를 작성한다는 의미입니까? 아니면 고객인가요? 또는 무엇을?

제가 묻는 이유는 제가 한번 시험해보고 싶어서입니다.xmobar상태 표시줄(XMonad 창 관리자와 함께 사용함)이 있어 모든 부분을 이해하려고 노력하고 있습니다.

나도 본 적 있어statnot이것은 매우 가늘고 주름이 없어 보이지만 이전 단락을 참조하면 여전히 사용하는 것은 함수를 통해 xmobar 또는 xmonad에 의해 노출된 일부 API를 호출하는 statnot구성을 작성해야 함을 의미하는 것처럼 느껴집니다. update_text이렇게 하면 한 번에 얼마나 많은 알림을 표시할지 제어할 수 없습니다.

조금 길을 잃었어요 :/

내 질문의 의미를 다음과 같은 측면에서 이해하려고 노력합니다.데스크탑 알림 사양성공하지 못했습니다 :D


(1)하지만내 안에 기존의 "버그"가 있으므로 ~/.xinitrc먼저 수정해야 합니다..

답변1

알림 서버란 무엇이며 어떤 역할을 합니까?

일반적인 용어로,섬기는 사람클라이언트가 어떤 방식으로(네트워크를 통해서든 로컬 IPC 메커니즘을 통해서든) 연결하는 프로그램입니다. 따라서 알림 서버는 클라이언트의 "알림 표시" 요청을 수락하고 클라이언트를 대신하여 알림을 표시하는 프로그램입니다.

알림 클라이언트란 무엇이며 어떤 역할을 합니까?

모든 프로그램사용알림 서버는 "알림 클라이언트"가 됩니다. 다시 말하지만 이는 알림 관련 용어가 아니며 전체 아키텍처에 관한 것입니다.

이 알림 전송을 사용하여 알림을 팝업으로 표시할 수 있나요? (글쎄,) 고객인가요?

예, 이 경우에는 고객입니다. 그 목적은 주로알림 팝업을 표시하는 것이 가능합니다. 앱은 자체 프로세스에서 직접 동일한 작업을 수행할 수 있기 때문에 알림을 실행하지 않습니다.

알림 데몬이란 무엇입니까?

알림 서버와 정확히 동일합니다.

"데몬"이라는 용어에는 몇 가지 다른 의미가 있습니다. 그것은 어떤 것을 가리킨다.배경"서버"인지 아닌지에 관계없이 서비스 - 그러나 이 경우 실제 알림 팝업 표시를 담당하는 프로그램은 서버이자 데몬입니다(데몬처럼 백그라운드에서 실행되고 서비스처럼 요청을 받기 때문입니다). ).

그리고 libnotify의 역할은 무엇인가요?

이는 알림 클라이언트가 사용 중인 IPC 메커니즘의 세부 사항(및 프로토콜 버전 간의 차이점)을 추상화하는 데 사용할 수 있는 작은 라이브러리입니다. 이 프로그램은 D-Bus 및 인터페이스에 대한 지식이 필요하지 않습니다 notify_notification_new(...).

(즉, 많은 응용 프로그램은 필요한 호출을 수행하기 위해 libdbus를 사용하는 등 직접 통신을 구현하기로 선택합니다. 이는 매우 간단한 프로토콜이므로 두 옵션이 모두 동일하게 일반적일 것입니다.)

클라이언트(예: libnotify)와 알림 서버 사이에 사용되는 프로토콜을 "libnotify 프로토콜"이라고 잘못 부르는 경우도 많습니다.

사용자(나)의 관점에서 보면 이 두 가지 미학에 차이가 있나요? 내 말은 알림이 실행 중일 때와 다른 알림이 다르게 보이는 것을 발견했다는 것입니다.

그건문자 그대로차이점. 그 아이디어는 각 데스크탑 환경(GNOME, KDE 등)에는 해당 데스크탑 환경에 맞게 사용자 정의된 팝업(모양, 설정, 동작 등)을 표시하는 자체 알림 서버가 있다는 것입니다.

(별도의 데몬일 필요도 없습니다. 예를 들어 GNOME 및 AwesomeWM에서는 알림 서비스가 데스크톱 셸 자체에서 제공됩니다.)

그건 그렇고, "그들이 어떤 서비스를 제공하고 있습니까?"라는 질문이 여기에서 발생합니다. 왜냐하면 그들은 다른 도구가 알림을 보내어 좋은 방법으로 표시할 수 있기를 기다리고 있는 것 같기 때문입니다.

예, 하지만 "다른 도구가 알림을 보낼 때까지 기다리는 것"은 무언가를 "제공"하는 것으로 간주되지 않습니다. 서비스가 반드시 일부 데이터를 반환할 필요는 없습니다. 시스템에는 어느 정도 단방향인 서비스가 많이 있습니다. 즉, 해당 작업은 다음과 같습니다.하다대신 뭔가반품무엇.

어쨌든, 알림에 대해 사용자 정의 작업을 수행하려면 어떻게 해야 합니까? 이 모든 콘텐츠를 가져오고 나만의 쉘 스크립트를 갖고 싶다고 가정해 보겠습니다. ~/notifications 파일에 추가하기만 하면 됩니다. 이것은 내가 나만의 알림 서버를 작성한다는 의미입니까? 아니면 고객인가요? 또는 무엇을?

클라이언트가 통신하기 위해 합의된 방법인 알림 프로토콜을 구현하는 경우 자체 "알림 서버"를 작성하게 됩니다. 대부분의 Linux 시스템의 사실상 표준은 D-Bus를 통해 "org.freedesktop.Notifications" 인터페이스를 구현하는 것입니다. 이를 구현하면 알림 서버가 있습니다.

(셸 스크립트로 하기는 참으로 어렵지만, 인터페이스가 2개 정도의 함수로 구성되어 있다는 점을 고려하면 Python이나 Perl에서는 10줄 내외로 가능합니다.)

먼저 알림 데몬을 사용해 보았습니다. 설치 후에만 작동하지 않습니다. 알림 보내기를 성공적으로 호출하려면 수동으로 시작하거나(/usr/lib/notification-daemon-1.0/notification-daemon 실행을 의미), 어떤 방식으로든 자동으로 시작하거나 /usr/share에 파일을 만들어야 합니다. / dbus-1/services/org.freedesktop.Notifications.service에는 다음 내용이 포함되어 있습니다.

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/lib/notification-daemon-1.0/notification-daemon

이 파일은 의도적으로 존재하지 않습니다. 이는 단 하나의 프로그램만이 이 특정 서비스를 제공한다는 것을 의미하기 때문입니다. 실제로 프로그램에는 각각 고유한 알림 서비스가 있는 여러 데스크톱 환경이 설치되어 있을 수 있으며 D-Bus에는 하나의 프로그램 구현에 우선 순위를 부여하는 메커니즘이 없습니다. 아니면 다른.

따라서 다른 많은 D-Bus 서비스는 자동 시작이 가능하지만 대부분의 알림 서버는 "잘못된" 데스크탑 환경에서 시작되도록 선택되지 않도록 의도적으로 자동 시작이 불가능합니다. 데스크탑 환경은 적절한 서비스를 "수동으로" 시작하도록 설계되었습니다. 예를 들어 ~/.xinitrc이렇게 하면 서비스에서 시작할 수 있습니다.

그런 다음 Dunst를 사용해 보았지만 일단 설치하면 알림 전송이 작동한다는 의미에서 작동했습니다. 나는 이것이 근본적으로 처음으로 inform-send가 호출될 때 시작되기 때문에 발생한다고 생각합니다(즉, 제거한 후에 작동했다는 첫 인상을 받았습니다. 이는 dunst 프로세스가 실행 중이었기 때문입니다). 하지만 어떻게 그렇게 합니까?

위에서 설명한 것과 완전히 동일한 접근 방식을 사용합니다. 해당 패키지에는 실제로 D-Bus .service 파일이 포함되어 있습니다.

$ 고양이 /usr/share/dbus-1/services/org.knopwob.dunst.service
[D-BUS 서비스] 이름=org.freedesktop.Notifications 실행=/usr/bin/dunst SystemdService=dunst.service

유일한 차이점은 실제 파일이 제공해야 하는 서비스 이름을 따서 명명되지 않는다는 것입니다(dbus-daemon은 "사용자" 서비스에 대해 이 요구 사항을 적용하지 않습니다).

나는 또한 매우 얇고 주름이 없어 보이는 statnot을 보았지만 이전 단락을 참조하면 statnot을 사용한다는 것은 여전히 ​​xmobar에 의해 노출된 일부 API를 호출하는 update_text 함수를 통해 구성을 작성해야 함을 의미하는 것처럼 느껴집니다. xmonad. 이렇게 하면 한 번에 얼마나 많은 알림을 표시할지 제어할 수 없습니다.

이것은 불가피해 보인다. 사용자 정의 논리를 원하면 사용자 정의 논리를 작성해야 합니다.

예를 들어, 나는 알림 데몬을 작성한 적이 있습니다.dzen2 사용"팝업"으로. Notify() 메서드에서 원하는 논리를 구현할 수 있습니다.

답변2

알림이 작동하는 방식과 알림을 작동시키기 위해 "플레이어"가 상호 작용하는 방식에 대한 명확한 이해가 실제로 없다고 생각합니다.

기술적으로 말하면(구현과 관계없이) 알림을 처리하기 위한 데몬(예: 알림 수신 및 처리), 다른 프로세스가 해당 데몬에 알림을 전달할 수 있는 방법, 알림이 어떤 형태여야 하는지에 대한 프로토콜( 예: 표준) 애플리케이션에서 데몬으로 전달된 데이터는 처리 가능한 것처럼 보입니다.

대부분의 Linux 데스크탑 환경의 격차를 메우려면 다음을 수행하십시오.

  • 알림 데몬이 있습니다(많은 데스크톱 환경(예: Gnome)은 사용자 세션을 통해 실행되는 자체 구현을 가져옵니다. 다른 경우에는 더 작은 데스크톱을 사용하는 경우 이 데몬 서비스에 대한 알림을 설정해야 할 수도 있습니다. 다른 구현이 있습니다. 후자 중 Mako는 Wayland 데스크탑의 이름으로 지정되었습니다.
  • 알림 데몬(데스크톱 알림 사양을 준수하는 경우)은 D-BUS 인터페이스(D-BUS는 프로세스 간 통신을 허용하는 메시징 시스템)를 노출하고 다른 프로세스는 이 인터페이스를 사용하여 데몬에 알림을 보냅니다.
  • 데스크탑 알림 사양은 데몬이 유효한 알림으로 전달될 것으로 예상하는 것과 알림이 가질 수 있는 매개변수를 정의합니다. (이 내용을 더 깊이 이해하려면 사양을 읽는 것이 좋습니다.데스크탑 알림 사양)

그리고 libnotify의 역할은 무엇인가요?

간단히 말해서, Libnotify는 데스크탑 알림 사양을 준수하는 알림을 이 표준을 준수하는 알림 데몬에 보내는 기능을 제공하는 라이브러리입니다. Linux에서 데스크톱 알림을 지원해야 하는 애플리케이션을 구축하는 경우 libnotify를 사용하여 이를 달성할 수 있습니다.

관련 정보