[unix] 창 관리자에서 알림 및 알림 데몬이 작동하지 않음

Linux 독립형 창 관리자 (Openbox, Awesome WM 등)에서는 알림이 작동하지 않습니다. notification-daemon 및 dunst를 설치하려고했지만 전송 notify-send "something"하면 팝업 창이 표시되지 않습니다.

polkit-gnome-agent를 실행하고 직접 알림 데몬을 실행하려고했지만 도움이되지 않습니다 (이전에 비슷한 문제를 해결했지만 지금은 아무것도하지 않습니다).

파이썬으로 사소한 알림을 보내지 않으면 오류 표시가 나타나지 않고 모호한 오류 메시지 만 표시됩니다.
File "/usr/lib/python3.3/site-packages/gi/types.py", line 113, in function
return info.invoke(*args, **kwargs)
gi._glib.GError: Could not connect: Connection refused

사소한 C 프로그램은 아무것도 출력하지 않습니다 (예 : 오류 없음).

systemd 및 d-bus와 함께 Archlinux를 사용하고 있습니다. 폴킷이나 창 관리자 시작시 실행되지 않는 일종의 데몬에 문제가 있다고 생각하지만, 시도 할 수 있거나 더 의미있는 오류 메시지를 얻을 수있는 방법을 모릅니다.

편집하다: 거기에서 샘플 코드를 가져 왔습니다 : https://wiki.archlinux.org/index.php/Libnotify#Python

systemd에는 의존성이 있으므로 Dbus가 실행 중이어야합니다. 나는 libnotify설치했다 – 그것은 제공하는 패키지이다 notify-send. 또한 데스크탑 파일을 따라 알림 데몬이 필요에 따라 시작되어야합니다 (알림이 발생할 때만)./usr/share/dbus-1/services/org.freedesktop.Notifications.service .

[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=/usr/bin/dunst

심지어 데몬을 직접 실행하려고 시도했지만 (실행 만하면) 알림을 보내려고했습니다. 누군가 내가 더 많은 정보를 얻을 수있는 방법을 알고 있다면 망설이지 말고 제안하십시오.

편집 2 : 나는 sudo를 함께 통지 데몬을 실행 시도 : sudo notification-daemon_name &(내 경우sudo dunst & ) 및로sudo notify-send something 하면 알림이 작동합니다. 그러나 권한이없는 사용자 (대부분의 프로그램에서 권한이없는 사용자로 알림을 보내는 것이 중요 함)로 이전 작업을 수행하려고하면 아무 것도 표시되지 않습니다.

notification-daemon 오류나 경고없이 전혀 작동하지 않습니다.

편집 3 : 분명히 권한 문제입니다. 루트 액세스없이 알림을 보낼 수 없습니다. 클린 재부팅 후 : sudo notify-send "something"데몬을 수동으로 시작하지 않아도 작동하지만 Gnome 또는 기타 전체 데스크탑 환경에서 가능한 한 루트 권한없이 알림을 보낼 수 있도록하려면 어떻게해야합니까?



답변

마침내 나는 문제를 스스로 해결했다.

내가 한 일을 지시를 남길 것입니다.

문제는 두 부분으로 구성됩니다.

  1. Windows 관리자 내에서 Dbus에 액세스 할 수 없습니다
  2. 알림 데몬이 dbus에서 메시지를 가져올 수 없습니다

첫번째 문제 해결책 :

실제 문제는 내 Windows 관리자가 lxdm에서 실행되었다는 것입니다. 어떤 이유로 든 /etc/X11/xinit/xinitrc.dlxde 세션 을 제외하고 구성 파일을 병합하지 않습니다 (LXDE dbus에서 멋진 wm에서는 그렇지 않습니다). 이 폴더 30-dbus에는 다음 내용으로 이름이 지정된 파일이 있습니다.

#!/bin/bash

# launches a session dbus instance
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && type dbus-launch >/dev/null; then
  eval $(dbus-launch --sh-syntax --exit-with-session)
fi

코드의이 부분은 $DBUS_SESSION_BUS_ADDRESS 다양한 응용 프로그램에 사용할 dbus 포트를 정의하는 변수를 정의합니다. echo $DBUS_SESSION_BUS_ADDRESSdbus 세션이 존재하는지 확인하기 위해 간단한 온 전성 검사로 사용될 수 있습니다 (dbus 세션 파일을 반환해야 함).

이 폴더에서 파일을 설정은 세션 시작에 간단한 쉘 스크립트 (에서 가져온 코드로 병합 할 수 있습니다 .xinitrc)

#!/bin/bash

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

두 번째 문제 해결책 :

dbus가 실행 중이고 다른 프로그램에서 사용할 수 있지만 여전히 알림이 제대로 작동하려면 더 많은 액세스 권한이 필요하므로 Awesome WM에는 하나가 없으므로 polkit 에이전트를 실행해야했습니다. 나는 lxpolkit이미 거의 완전한 lxde 환경을 가지고 있었기 때문에를 선택 했다. 내 경우에는 방금 내 ~/.config/awesome/rc.lua파일에 추가했습니다 .
awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop") 어떤 이유로이 줄이 없으면 기본적으로 lxdm으로 시작하지 않았습니다.

그놈 폴킷 에이전트도 제대로 작동해야한다고 생각합니다.


답변

이것은 대답이 아니며 다음 질문을 생성하는 데 도움이되는 큰 설명입니다.

추가 정보를 추가해 주셔서 감사합니다. 권한 문제가있을 수 있지만 불행히도 DBus Unix 도메인 소켓에 연결하는 데 필요한 권한이있을 수 있습니다.

이 실행을 루트가 아닌 것으로 확인하려면 다음을 수행하십시오.

$ strace -o /tmp/ns.out notify-send "why will this not connect"
$ grep '^connect' /tmp/ns.out
connect(4, {sa_family=AF_FILE, path=@"/tmp/dbus-6AIOJVWzCC"}, 23) = 0

아마 당신은 아마 같은 것을 얻을 것입니다

connect(…) = -1 ECONNREFUSED  (Connection refused)

왜? 나도 몰라 그놈 개발 커뮤니티에서 알림 서브 시스템이 그렇게 단순한 외형으로 생각했던 것보다 훨씬 더 많은 주목을 받았다는 것을 알고 있습니다. 나는 zillion 또는 GTK 구성 위치에 구성 파일이 있다고 생각하지만 그다지 도움이되지 않는다는 것을 알고 있습니다.


답변

나를 위해 i3wm에 notify-osd 및 dunst를 설치했습니다.


답변