Reutilize as sessões do D-Bus nas sessões de login

19

Eu acesso uma máquina através de várias sessões de login. A vida das sessões pode ou não se sobrepor. No meu caso, essas sessões de login estão sempre no SSH, mas eu prefiro lidar com sessões locais também.

Às vezes preciso do D-Bus nessas sessões e quero compartilhar a mesma sessão do D-Bus nessas sessões de login, para usar o GVFS .

Qual é a maneira recomendada de fazer isso? Eu não quero quebrar nenhum uso do D-Bus que eu possa não estar ciente. Eu considerei usar

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))

mas (como no Ubuntu 12.04) isso não parece certo:

  • isso requer uma sessão X, mas minhas sessões SSH podem ou não estar encaminhando uma exibição X, e mesmo aquelas que não têm o mesmo $DISPLAY ;
  • se nenhum display X estiver disponível, dbus-launch reclama que “erro de falha automática: a inicialização do X11 falhou” e não inicia um daemon;
  • a página dbus-launch man afirma que “A opção --autolaunch é considerada um detalhe de implementação interna (…). Não há nenhuma razão real para usá-lo fora da implementação da libdbus de qualquer forma. ”

O dbus-launch ou outra ferramenta no pacote D-Bus suporta automaticamente a detecção de um dbus-daemon em execução e a conexão a ele? As informações necessárias estão em ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:} se o D-Bus for iniciado com uma conexão X, mas não parece ser armazenado em lugar algum se nenhuma conexão X estiver disponível.

Devo remendar meu próprio arquivo de sessão do D-Bus? Se eu fizer, devo usar um arquivo no diretório ~/.dbus/session-bus ? O caminho é /var/lib/dbus/machine-id confiável e portátil?

    
por Gilles 30.07.2012 / 20:35

1 resposta

5

O DBus torna o compartilhamento de configurações para o daemon dbus um pouco complicado.

Para minha configuração, as configurações de dbus-launch --sh-syntax são salvas em um arquivo que é origem pelo .bash_rc . A desvantagem disso é que, após cada reinicialização, esse processo é executado manualmente.

No entanto, deve ser muito simples verificar um daemon DBus existente. Digamos que o arquivo de configurações esteja em $ HOME / .dbus_settings:

need_start=1

if [ -r "$HOME/.dbus_settings" ]
then
    . "$HOME/.dbus_settings"
fi

if [ -n "$DBUS_SESSION_BUS_PID" ]
then
    if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
    then
        need_start=0  # Found one
    fi
fi

if [ "$need_start" -ne 0 ]
then
    dbus-launch --sh-syntax >"$HOME/.dbus_settings"
    . "$HOME/.dbus_settings"
fi

Sem a opção --autolaunch , não acredito que seja necessária uma conexão X no Windows.

    
por 27.08.2013 / 01:05

Tags