Embora a mensagem de erro esteja abaixo do ideal, ela parece se traduzir em "uma conexão com o barramento de sessão do D-Bus não estava disponível".
notify-send funciona enviando uma mensagem IPC através do D-Bus - especificamente, através do barramento da sessão, cujo endereço é aleatoriamente atribuído a cada lançamento do dbus-daemon e armazenado na variável de ambiente $DBUS_SESSION_BUS_ADDRESS
.
Normalmente não é específico do terminal atual - é herdado do gerenciador de sessões do X11, portanto, se você iniciar dois terminais ao mesmo tempo, ambos usarão o mesmo barramento de sessão.
Mas se você desanexar do tmux, reiniciar sua sessão do X11 e anexar novamente, a nova sessão terá um novo barramento, mas todos os processos em execução ainda terão o ambiente antigo .
Uma solução parcial é adicionar esse envvar à configuração update-environment
do tmux:
set -g update-environment "DBUS_SESSION_BUS_ADDRESS DISPLAY SSH_AUTH_SOCK XAUTHORITY"
Observe que isso se aplicará apenas a novas janelas do tmux nessa sessão; é impossível para o tmux atualizar o ambiente de shells existentes .
Como alternativa, faça com que os scripts de inicialização do X11 armazenem o valor de DBUS_SESSION_BUS_ADDRESS em algum arquivo e crie um script de wrapper para notify-send
, o qual leria / source esse arquivo antes de executar o% real/usr/bin/notify-send
.
Isso é semelhante a como o D-Bus "autolaunch" funciona (ou costumava funcionar). Se $DISPLAY
for definido, mas $DBUS_SESSION_BUS_ADDRESS
não for, os clientes do barramento de sessão procurarão em ~/.dbus/
pelo endereço do barramento da exibição atual. No entanto, o mecanismo "autolaunch" está sendo suspenso por vários motivos (era escamoso, deixava lixo, fazia as pessoas pensarem que o D-Bus requer o X11, & c).
Algumas distribuições estão se movendo para o modelo "user bus", onde cada usuário tem exatamente um ônibus de "sessão" em um local fixo (geralmente em unix:path=/run/user/$UID/bus
). Desta forma, o ambiente nunca muda. (E mesmo que esteja faltando, a maioria dos clientes do D-Bus já verificam esse local específico.)
No Debian, o modelo de barramento do usuário pode ser escolhido instalando dbus-user-session
- embora possa quebrar algumas outras coisas.