Notificações e daemon de notificação não funcionando no gerenciador de janelas

13

As notificações não funcionam nos gerenciadores de janelas independentes do Linux (Openbox, Awesome WM e similares). Tentei instalar o daemon de notificação e o dunst, mas o envio com notify-send "something"não cria nenhuma janela para aparecer.

Tentei executar o polkit-gnome-agent e executar diretamente daemons de notificação, mas isso não ajuda (enquanto resolvi um problema semelhante dessa maneira, mas agora não faz nada).

Não há indicações de erros, a menos que eu envie uma notificação trivial com python, então recebo apenas uma vaga mensagem de erro: O 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 programa Trivial C não gera nada (nenhum erro, por exemplo).

Estou usando o Archlinux com systemd e d-bus, suspeito que seja um problema com o polkit ou algum tipo de daemon que não esteja sendo executado no gerenciador de janelas, mas não faço ideia do que poderia tentar ou como obter mensagens de erro mais significativas.

EDIT: Eu peguei o código de exemplo de lá: https://wiki.archlinux.org/index.php/Libnotify#Python

O Dbus deve estar em execução porque o systemd tem como dependência. Eu libnotifyinstalei - é o pacote que fornece notify-send. O daemon de notificação também deve iniciar conforme necessário (somente quando a notificação chegar), seguindo o arquivo da área de trabalho /usr/share/dbus-1/services/org.freedesktop.Notifications.service:

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

Eu até tentei executar daemons diretamente (apenas execute) e tentei enviar notificações. Se alguém souber como obter mais informações, não hesite em sugerir.

EDIT 2: Tentei executar o daemon de notificação com o sudo: sudo notification-daemon_name &(no meu caso sudo dunst &) e sudo notify-send something, em seguida, a notificação funciona. Mas quando tento executar qualquer uma das ações anteriores como usuário não privilegiado (o que é importante na maioria dos programas envia notificações como usuários sem privilégios), nada aparece.

notification-daemon se recusa a trabalhar sem nenhum erro ou aviso.

EDIT 3: Claramente, é um problema de permissões: não consigo enviar notificações sem acesso root. Após a reinicialização limpa: sudo notify-send "something"funciona mesmo sem iniciar manualmente nenhum daemons, no entanto, o que eu (e meus programas iniciados) devemos fazer para poder enviar notificações sem privilégios de root, pois é possível no Gnome ou em qualquer outro ambiente de desktop completo?

IBr
fonte
1
O que significa "tentou instalar o daemon de notificação"? Você instalou, libnotifypois isso fornece o notify-sendcomando (que é tudo o que você precisa)?
precisa saber é o seguinte
Você forneceu muito pouca informação para responder adequadamente a essa pergunta. Com base na única mensagem de erro que você deu, suspeito que o DBus não esteja sendo executado e, portanto, não há nada para o envio de notificação se conectar. Se você forneceu o código de "notificação trivial" e o erro exato, talvez possamos chegar mais perto de uma resposta.
RSU
Tomei códigos de exemplo a partir daí: wiki.archlinux.org/index.php/Libnotify#Python
IBr
Eu tive sucesso com Dunst. Não há mais mensagens "Conexão recusada".
sshow 11/10/16

Respostas:

6

Finalmente, eu mesmo resolvi o problema.

Vou deixar instruções o que fiz.

O problema consiste em duas partes:

  1. O Dbus não pode ser acessado a partir do gerenciador do Windows
  2. O daemon de notificação não pode receber mensagens do dbus

1ª solução do problema:

O verdadeiro problema era que o meu gerenciador de janelas foi executado a partir do lxdm, que por algum motivo não mescla os arquivos de configuração, /etc/X11/xinit/xinitrc.dexceto a sessão do lxde (no LXDE o dbus funciona, o impressionante wm não). Nesta pasta existe o arquivo nomeado 30-dbuscom o seguinte conteúdo:

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

Esta parte do código define a $DBUS_SESSION_BUS_ADDRESSvariável que define uma porta dbus a ser usada para várias aplicações. echo $DBUS_SESSION_BUS_ADDRESSpode ser usado como uma verificação simples de sanidade para ver se a sessão do dbus existe (deve retornar o arquivo da sessão do dbus).

Os arquivos de configuração desta pasta podem ser mesclados com um script de shell simples no início da sessão (código extraído de .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

2ª solução do problema:

Enquanto o dbus está sendo executado e está disponível para outros programas, ele ainda precisa de mais acesso para que as notificações funcionem corretamente, então eu precisei executar o polkit agent, porque o Awesome WM não possui um. Eu tinha escolhidolxpolkit , porque eu já tinha ambiente lxde quase cheio. No meu caso, acabei de adicionar ao meu ~/.config/awesome/rc.luaarquivo awful.util.spawn_with_shell("dex /etc/xdg/autostart/lxpolkit.desktop"):, por algum motivo, sem essa linha, ele se recusou a iniciar por padrão com o lxdm.

Eu acho que o agente gnome polkit também deve funcionar bem.

IBr
fonte
1
nota: seu gerente de exibição não faz e não deve fazer nada com .xinitrc/ esqueço como o outro sabor é chamado. esses arquivos são equivalentes (o que é usado varia de acordo com a distribuição) e são usados ​​apenas quando você invoca startxou xinitno console. provavelmente a razão pela qual o arquivo do sistema é carregado é porque isso acontece no LXDE, não no LXDM.
strugee
Obrigado pela clarificação. Parece que eu preciso fazer uma configuração adicional carregando-me.
IBr 5/09/13
Sim, como você deve fazer isso depende do ambiente da área de trabalho / ui.
strugee
normalmente tudo o que você faria .xinitrcé iniciar qualquer daemons em segundo plano que não seria ativado mais tarde (você faria isso se não tivesse, por exemplo, gnome-sessionfazendo isso por você) e, na última linha, execqualquer que seja o ambiente WM / desktop usado .
strugee
0

Esta não é uma resposta, apenas um grande esclarecimento para talvez ajudar a gerar a próxima pergunta.

Obrigado por adicionar os detalhes extras. Você provavelmente tem um problema de permissões, mas, infelizmente, é provável nas permissões necessárias para conectar-se ao soquete do domínio DBus Unix.

Para confirmar esta execução como não raiz:

$ 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

exceto que você provavelmente terá algo como

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

Por quê? Eu não faço ideia. Eu sei que o subsistema de notificação recebeu muito mais atenção na comunidade de desenvolvimento do GNOME do que eu imaginava que um recurso tão superficialmente simples deveria. Eu suspeitaria de algum arquivo de configuração nos mais de zilhões de locais de configuração do GTK, mas sei que isso não é muito útil.

msw
fonte
Na verdade eu tenhoconnect(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

Para mim, ele trabalhou para instalar o notify-osd e o dunst no i3wm.

anstue
fonte