Reutilizar sessões do D-Bus nas sessões de login


20

Eu acesso uma máquina através de várias sessões de login. O tempo de vida das sessões pode ou não se sobrepor. No meu caso, essas sessões de logon são sempre sempre sobre SSH, mas eu preferiria 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 logon para usar o GVFS .

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

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

mas (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 as que não são iguais $DISPLAY;
  • se nenhuma exibição do X estiver disponível, dbus-launchreclama que “Erro de inicialização automática: a inicialização do X11 falhou.” e não inicia um daemon;
  • a dbus-launchpágina de manual afirma que “a --autolaunchopção é considerada um detalhe interno da implementação (…). Não há motivo real para usá-lo fora da implementação do libdbus de qualquer maneira. ”

Uma dbus-launchoutra ferramenta no pacote D-Bus suporta a detecção automática de uma corrida dbus-daemone a conexão com ela? As informações necessárias estão disponíveis ~/.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 nenhum lugar se nenhuma conexão X estiver disponível.

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


11
Esta resposta pode fazer parte de uma solução para você: serverfault.com/questions/405518/…
sdive 5/12

11
Eu estava brincando muito com o DBus há 2 anos e tudo o que resta na minha memória de ler muito, incluindo as fontes, foi: DBus pode ser legal, mas é muito personalizado para ser executado uma vez como uma instância do sistema e exatamente mais uma vez para cada sessão de usuário local é simplesmente estúpido em vez de legal. Meu palpite é que você tem que fazer tudo sozinho. Eu fiz, mas eu sempre tenho sessões X, então foi um pouco mais fácil para mim. Boa sorte.
Bananguin

Eu vi algumas informações interessantes sobre a configuração do dbus no livro BLFS ( Beyond Linux From Scratch ).
Fiisch

Respostas:


6

O DBus torna um pouco complicado o compartilhamento das configurações do daemon dbus.

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

No entanto, deve ser muito simples procurar 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 --autolaunchopção, não acredito que seja necessária uma conexão X windows.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.