Por que não consigo executar aplicativos Gnome em uma sessão SSH remota?

9

Fazendo login em um host remoto usando ssh -X me@host, eu corro com êxito gnome-terminal -e "tail -F /var/log/file" &. Quando efetuo logoff e tento a mesma coisa no dia seguinte, recebo o seguinte:

Falha ao obter o barramento da sessão: falha ao conectar-se ao soquete / tmp / dbus-K99gT9yDjS: Conexão recusada Voltando ao modo fora da fábrica. Falha ao convocar o demônio GConf; saindo. Falha ao entrar em contato com o servidor de configuração; algumas causas possíveis são que você precisa habilitar a rede TCP / IP para ORBit ou ter bloqueios NFS obsoletos devido a uma falha no sistema. Veja http://projects.gnome.org/gconf/ para obter informações. (Detalhes - 1: falha ao obter conexão com a sessão: falha ao conectar ao soquete / tmp / dbus-K99gT9yDjS: conexão recusada)

Como executo o gnome-terminal nessa situação?

hourback
fonte
Não vejo uma pergunta sendo feita aqui. Você deve fazer algo sobre isso antes que sua postagem seja fechada.
Agi Hammerthief
Convém cortar a parte da 'solução' da sua pergunta e enviá-la como resposta. Esse comportamento é aceitável.
Agi Hammerthief
Se você estiver conectado a outra máquina com SSH, terá acesso ao shell / terminal. Você não precisa abrir uma janela de terminal nessa máquina. Você pode executar comandos diretamente nessa máquina, digitando-os no terminal da sua máquina.
Agi Hammerthief
2
Como diz Nigel Nquande, pressione o botão de responder sua própria pergunta e copie e cole sua seção Solução na resposta. Não só é aceitável, é incentivado.
derobert
2
Enquanto isso, removi a solução da sua pergunta, pois ela não é uma pergunta. Esse tipo de pergunta auto-respondida é bem-vindo, mas poste respostas como respostas . Dê uma olhada no nosso centro de ajuda ou faça o tour de 10 segundos para obter mais informações. Você pode ver o texto original (para que você não precise escrevê-lo novamente) no histórico de edições, clicando no link "Editado X minutos atrás".
terdon

Respostas:

7

De fato, quando uma sessão SSH é aberta, ela não inicia uma sessão dbus. Alguns programas podem iniciá-lo, mas a sessão não o conhece (portanto, não é possível fechá-lo).

Não conhecer a sessão do dbus também significa que os programas que usam o dbus, mas não o iniciam, terão problemas.

As seções do dbus são por máquina e por monitor X11. Suas informações são armazenadas em $ HOME / .dbus / session-bus / - no entanto, o processo mencionado lá pode ser fechado, portanto é necessária uma verificação extra para determinar se é necessário ou não iniciar o dbus. Em seguida, as variáveis ​​devem ser exportadas para a sessão.

Então funciona como um encanto :)

Coloquei o seguinte no meu arquivo .bash_profile:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

notas: hostnamectl faz parte do systemd e permite recuperar o ID da máquina; o dbus-launch exibe as variáveis ​​que queremos; usando export $(dbus-launch), recuperamos a saída do dbus-launch e exportamos as variáveis

Pablo Saratxaga
fonte
5

Nenhuma das respostas anteriores funcionou no meu caso, mas o lançamento do aplicativo através do dbus-launch fez o trabalho:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"
sabst
fonte
3

Eu achei isto:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=639261

O que me levou a tentar isso:

$ sudo rm /var/lib/dbus/machine-id
$ sudo service messagebus restart

Agora eu posso rodar o gnome-terminal!

hourback
fonte
2
Incrivelmente, ele também funcionou em 16.04. Eu apenas tive que mudar o comando restart para sudo service dbus restart. Obrigado!
Avio
Warning️ Aviso: reiniciar o dbus provavelmente reiniciará toda a sua sessão X #
Adam Katz
1

Apenas corra:

> dbus-launch gnome-terminal
Ari
fonte
1
Por que isso ajudaria?
DarkHeart 23/02
1
Isso também funcionou para mim. Eu não tenho ideia do porquê.
Robert Lugg
0

Interessante ... apenas reiniciar o dbus não funcionou para mim, eu também tive que remover o arquivo de identificação da máquina e reiniciar.

$ rcdbus stop
$ rm /var/lib/dbus/machine-id
$ rcdbus start

Este estava em um servidor SLES 11.4 que eu havia clonado recentemente no VMWare. Meu problema era que não consegui iniciar o yast2 ou o gedit ...

Estes foram os erros que eu estava vendo na linha de comando:

yast2

** (y2controlcenter-gnome:9981): WARNING **: error accessing /desktop/gnome/lockdown/disable_command_line [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]


** (y2controlcenter-gnome:9981): WARNING **:
GError raised: [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]

user_message: [libslab_get_gconf_value: error getting /desktop/gnome/applications/main-menu/lock-down/user_modifiable_apps] 

Obrigado pela dica!

Ernie
fonte
-2

Tente o seguinte:

rm $HOME/.dbus/session-bus/*
Isaac
fonte