Notifiche e demone di notifica non funzionanti su Window Manager


13

Le notifiche non funzionano sui gestori di finestre standalone Linux (Openbox, Awesome WM e simili). Ho provato a installare daemon di notifica e dunst, ma l'invio con notify-send "something"non fa apparire alcuna finestra.

Ho provato a eseguire polkit-gnome-agent ed eseguire direttamente i demoni di notifica, ma non aiuta (mentre prima ho risolto un problema simile in questo modo, ma ora non fa nulla).

Non ci sono indicazioni di errori a meno che non invii banali notifiche con Python, quindi ricevo solo un messaggio di errore vago: il 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 programma Trivial C non restituisce nulla (nessun errore, ad esempio).

Sto usando Archlinux con systemd e d-bus, sospetto che sia un problema con polkit o qualche tipo di demone che non è in esecuzione all'avvio di Window Manager, ma non ho idea di cosa potrei provare o come posso ottenere messaggi di errore più significativi.

EDIT: ho preso il codice di esempio da lì: https://wiki.archlinux.org/index.php/Libnotify#Python

Dbus dovrebbe essere in esecuzione perché systemd ha come dipendenza. Ho libnotifyinstallato - è il pacchetto che fornisce notify-send. Anche demone di notifica deve iniziare, se necessario (solo quando arives di notifica), seguendo file sul desktop /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Avevo persino provato a eseguire direttamente i demoni (basta eseguirlo) e ho provato a inviare notifiche. Se somenone sa come ottenere maggiori informazioni, non esitare a suggerire.

EDIT 2: Ho provato a eseguire il demone di notifica con sudo: sudo notification-daemon_name &(nel mio caso sudo dunst &) e sudo notify-send something, quindi, la notifica funziona. Ma quando provo a fare una qualsiasi delle azioni precedenti come utente non privilegiato (che è importante che la maggior parte dei programmi invii notifiche come utenti non privilegiati), nulla mostra.

notification-daemon si rifiuta di lavorare senza alcun errore o avviso.

EDIT 3: Chiaramente è un problema con le autorizzazioni: non posso inviare notifiche senza accesso root. Dopo un riavvio pulito: sudo notify-send "something"funziona anche senza avviare manualmente alcun daemon, tuttavia cosa dovrei fare io (e i miei programmi avviati) per poter inviare notifiche senza privilegi di root come è possibile in Gnome o in qualsiasi altro ambiente desktop completo?


1
Che cosa significa "tentato di installare daemon di notifica"? Hai installato in libnotifyquanto fornisce il notify-sendcomando (che è tutto ciò di cui hai bisogno)?
Jasonwryan,

Hai fornito troppe poche informazioni per rispondere correttamente a questa domanda. Basandomi sull'unico messaggio di errore che hai fornito, sospetto che DBus non sia in esecuzione e quindi non vi sia nulla per la notifica a cui inviare. Se hai fornito il tuo codice di "notifica banale" e l'errore esatto, potremmo essere in grado di avvicinarci a una risposta.
msw,

Ho preso dei codici di esempio da lì: wiki.archlinux.org/index.php/Libnotify#Python
IBr

Ho avuto successo con Dunst. Non più messaggi "Connessione rifiutata".
Mostra l'

Risposte:


6

Alla fine ho risolto il problema da solo.

Lascerò le istruzioni su ciò che ho fatto.

Il problema è costituito da due parti:

  1. Non è possibile accedere a Dbus da Windows Manager
  2. Il daemon di notifica non può ricevere messaggi da dbus

1a soluzione del problema:

Il vero problema era che il mio gestore di Windows era eseguito da lxdm, che per qualche ragione non unisce i file di configurazione /etc/X11/xinit/xinitrc.dtranne che per la sessione lxde (in LXDE dbus funziona, in WM impressionante no). In questa cartella esiste un file denominato 30-dbuscon il seguente contenuto:

#!/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

Questa parte del codice definisce la $DBUS_SESSION_BUS_ADDRESSvariabile che definisce una porta dbus da utilizzare per varie applicazioni. echo $DBUS_SESSION_BUS_ADDRESSpuò essere usato come semplice controllo di integrità per vedere se esiste una sessione dbus (dovrebbe restituire il file della sessione dbus).

I file di configurazione da questa cartella possono essere uniti con un semplice script shell all'avvio della sessione (codice estratto da .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

2a soluzione del problema:

Mentre dbus è in esecuzione ed è disponibile per altri programmi ha ancora bisogno di più accesso perché le notifiche funzionino correttamente, quindi ho bisogno di eseguire l'agente polkit, perché Awesome WM non ne ha uno. Avevo scelto lxpolkit, perché avevo già un ambiente lxde quasi completo. Nel mio caso, appena aggiunto al mio ~/.config/awesome/rc.luafile awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop"):, per qualche motivo senza questa riga, si è rifiutato di avviarsi di default con lxdm.

Penso che anche l'agente polkit di gnome dovrebbe funzionare bene.


1
nota: il tuo display manager non fa e non dovrebbe fare nulla con .xinitrc/ Dimentico come si chiama l'altro sapore. quei file sono equivalenti (quello che viene utilizzato varia in base alla distribuzione) e sono usati solo quando invochi startxo xinitdalla console. probabilmente il motivo per cui il file di sistema viene caricato è perché accade in LXDE, non in LXDM.
strugee,

Grazie per il chiarimento. Sembra che debba caricare da solo la configurazione adizionale.
IBr

sì, come dovresti farlo dipende dall'ambiente desktop / wm.
Strugee,

in genere tutto ciò che dovresti fare .xinitrcè avviare qualsiasi daemon in background che non verrebbe abilitato in seguito (lo faresti se non avessi ad esempio gnome-sessionfarlo per te), quindi all'ultima riga, execqualunque sia l'ambiente WM / desktop che usi .
strugee,

0

Questa non è una risposta, solo un grande chiarimento per forse aiutare a generare la domanda successiva.

Grazie per aver aggiunto i dettagli extra. Probabilmente hai un problema con le autorizzazioni, ma sfortunatamente è probabilmente nelle autorizzazioni necessarie per connettersi al socket di dominio DBus Unix.

Per confermare questa esecuzione come non root:

$ 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

tranne che probabilmente otterrai qualcosa del genere

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

Perché? Non ne ho idea. So che il sottosistema di notifica ha ricevuto molta più attenzione nella comunità di sviluppo di GNOME di quanto avessi mai pensato che una funzionalità così superficialmente semplice avrebbe dovuto. Sospetterei un po 'di file di configurazione in circa miliardi di posizioni di configurazione GTK, ma so che non è troppo utile.


Effettivamente ho ottenutoconnect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-WC3XySChb5"}, 23) = -1 ECONNREFUSED (Connection refused) connect(4, {sa_family=AF_LOCAL, sun_path=@"/tmp/dbus-b3oei13hP2"}, 23) = -1 ECONNREFUSED (Connection refused)
IBr

0

Per me ha funzionato per installare notify-osd e dunst su i3wm.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.