창 관리자에서 알림 및 알림 데몬이 작동하지 않습니다.

창 관리자에서 알림 및 알림 데몬이 작동하지 않습니다.

Linux 독립 실행형 창 관리자(Openbox, Awesome WM 등)에서는 알림이 작동하지 않습니다. 알림 데몬과 Dunst를 설치하려고 시도했지만 notify-send "something"보낼 때 아무 것도 팝업되지 않습니다.

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

Python을 사용하여 간단한 알림을 보내지 않으면 오류 표시가 없습니다. 그런 다음 모호한 오류 메시지만 나타납니다.

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를 사용하고 있으며 창 관리자가 시작될 때 실행되지 않는 polkit 또는 일종의 데몬에 문제가 있는 것 같지만 무엇을 시도할 수 있는지 또는 더 의미 있는 오류 정보를 얻는 방법을 모릅니다. .

편집하다:나는 거기에서 샘플 코드를 가져왔습니다.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 notification-daemon_name &sudo: (내 경우에는 sudo dunst &)를 사용하고 알림 데몬을 실행 해 보았 sudo notify-send something더니 알림이 작동했습니다. 그러나 권한이 없는 사용자로 위 작업 중 하나를 수행하려고 하면(대부분의 프로그램이 권한이 없는 사용자로 알림을 보내는 것이 중요합니다) 아무 것도 나타나지 않습니다.

notification-daemon오류나 경고 없이 작업을 완전히 거부합니다.

편집 3:권한 문제인 것 같습니다. 루트 액세스 없이는 알림을 보낼 수 없습니다. 완전히 재부팅한 후: sudo notify-send "something"데몬을 수동으로 시작하지 않아도 작동하지만 Gnome이나 기타 전체 데스크톱 환경에서처럼 루트 권한 없이 알림을 보내려면 어떻게 해야 합니까(그리고 내가 시작하는 프로그램이 있습니까?)

답변1

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

내가 한 일에 대한 지침을 남길 것입니다.

질문은 두 부분으로 구성됩니다.

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

첫 번째 문제에 대한 해결책:

진짜 문제는 내 Windows 관리자가 lxdm에서 실행 중이고 어떤 이유로 /etc/X11/xinit/xinitrc.dlxde 세션(멋진 wm이 아닌 LXDE dbus에서 작동)을 제외하고 구성 파일을 병합하지 않는다는 것입니다. 다음과 같은 이름의 파일이 있습니다 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으로 시작하는 것이 거부됩니다.

나는 gnome polkit 프록시도 잘 작동할 것이라고 생각합니다.

답변2

이는 답변이 아니며 다음 질문을 생성하는 데 도움이 될 수 있는 중요한 설명일 뿐입니다.

자세한 내용을 추가해 주셔서 감사합니다. 실제로 권한 문제가 있을 수 있지만 불행하게도 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)

왜? 나는 모른다. 저는 알림 하위 시스템이 그렇게 표면적으로 단순한 기능에 대해 제가 상상했던 것보다 GNOME 개발 커뮤니티에서 훨씬 더 많은 관심을 받고 있다는 것을 알고 있습니다. 나는 엄청난 양의 GTK 구성 위치에 일부 구성 파일이 있다고 생각하지만 그것이 별로 도움이 되지 않는다는 것을 알고 있습니다.

답변3

나에게는 i3wm에 알림 osd와 Dunst를 설치하는 것이 효과적이었습니다.

답변4

Dunst는 구성 파일을 편집하기만 하면 매우 간단합니다.

나는 jwm 창 관리자를 사용하고 있으며 jwm 키보드 단축키와 충돌하기 때문에 모든 키보드 단축키를 주석 처리해야 합니다.

또한 기본적으로 모니터 0을 선택하고 마우스 선택을 따르므로 그 중 하나에 주석을 달아야 합니다.

관련 정보