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 libnotify
instalei - é 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?
libnotify
pois isso fornece onotify-send
comando (que é tudo o que você precisa)?Respostas:
Finalmente, eu mesmo resolvi o problema.
Vou deixar instruções o que fiz.
O problema consiste em duas partes:
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.d
exceto a sessão do lxde (no LXDE o dbus funciona, o impressionante wm não). Nesta pasta existe o arquivo nomeado30-dbus
com o seguinte conteúdo:Esta parte do código define a
$DBUS_SESSION_BUS_ADDRESS
variável que define uma porta dbus a ser usada para várias aplicações.echo $DBUS_SESSION_BUS_ADDRESS
pode 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
):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 escolhido
lxpolkit
, porque eu já tinha ambiente lxde quase cheio. No meu caso, acabei de adicionar ao meu~/.config/awesome/rc.lua
arquivoawful.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.
fonte
.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ê invocastartx
ouxinit
no console. provavelmente a razão pela qual o arquivo do sistema é carregado é porque isso acontece no LXDE, não no LXDM..xinitrc
é iniciar qualquer daemons em segundo plano que não seria ativado mais tarde (você faria isso se não tivesse, por exemplo,gnome-session
fazendo isso por você) e, na última linha,exec
qualquer que seja o ambiente WM / desktop usado .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:
exceto que você provavelmente terá algo como
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.
fonte
connect(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)
Para mim, ele trabalhou para instalar o notify-osd e o dunst no i3wm.
fonte