Estou usando o Distrobox para desenvolver aplicativos e atualmente estou trabalhando em um que interaja com um serviço em execução no barramento do sistema.
Para testar uma conexão com o barramento do sistema e o serviço com o qual desejo interagir, uso o seguinte comando:
$ gdbus introspect --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1
Isso funciona se eu executá-lo em meu sistema host e me fornece uma lista de interfaces junto com seus métodos, sinais e propriedades correspondentes. No entanto, se eu executá-lo dentro do meu contêiner Distrobox, isso me dará o seguinte:
$ gdbus introspect --system --dest org.freedesktop.login1 --object-path /org/freedesktop/login1
Error connecting: Could not connect: No such file or directory
Presumo que isso se deva ao fato de o contêiner Distrobox não ter acesso ao barramento do sistema host e não executo nenhum sistema init no próprio contêiner. Quero permitir que aplicativos executados dentro deste contêiner Distrobox possam acessar o barramento do sistema do meu sistema host. Como posso conseguir isso dentro de um contêiner Distrobox?
No meu caso, definir a
DBUS_SYSTEM_BUS_ADDRESS
variável de ambiente com um valor apropriado foi uma solução viável para esse problema.Definir isso globalmente para o contêiner pode ter algumas consequências potencialmente indesejadas, como "
apt
tentar iniciar o systemd dentro dos contêineres, se esse caminho for encontrado" (consulte a discussão 1188 no repositório Distrobox para obter mais informações), então apenas configurei-o por -application base conforme necessário, definindo a variável de ambiente como na linha de comando:No entanto, também é possível defini-lo globalmente ao criar um novo contêiner, assim:
Na discussão vinculada mencionada acima,
unix:///run/host/var/run/dbus/system_bus_socket
foi usado em vez deunix:path=/run/host/var/run/dbus/system_bus_socket
. No entanto, o primeiro não parece ser compatível com o dbus-fast, que é o que estou usando para meu aplicativo. É possível que algumas outras implementações suportem o formato anterior, mas pelo menos o dbus-fast precisa do último para funcionar. Também não funciona no caso de teste que escrevi na pergunta original:Mas o outro formato funciona: