Como posso iniciar o gnome-terminal remotamente no meu servidor headless? (falha ao iniciar no encaminhamento X11)

Como posso iniciar o gnome-terminal remotamente no meu servidor headless? (falha ao iniciar no encaminhamento X11)

Eu tenho uma VM headless (executando o servidor Ubuntu 17.04) que uso SSH para acessar. Estou confortável com os fundamentos do encaminhamento do X11 e posso encaminhar xterm e amigos perfeitamente. O terminal XFCE também encaminha OK.

Gostaria de poder usar o terminal Gnome, mas parece que ele não inicia. Em vez disso, ele simplesmente trava por um tempo e eventualmente apresenta erros:

Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached

Curiosamente, o gnome-terminal funciona remotamente no X11 se eu tiver uma sessão de desktop local em execução na minha VM (iniciada via startx).

Suponho que haja algum tipo de serviço Gnome que precisa estar em execução, mas não consigo descobrir o que é ou como iniciá-lo fora do contexto de uma sessão completa da área de trabalho. Normalmente não os inicio porque a VM fica sem cabeça por padrão.

Alguém teve alguma ideia do que eu poderia fazer para que o terminal Gnome funcionasse remotamente sem ter que iniciar uma sessão de desktop GUI localmente na minha VM?

Responder1

Isso não funciona porque gnome-terminal(como qualquer outrognome-thing) tentará se conectar ao dbus e falhará após não receber uma resposta por um longo tempo.

A solução mais fácil é iniciar uma instância dbus para sua sessão:

export $(dbus-launch)
gnome-terminal

Se você começou umWaylandsessão sobre ocontrolo remotomáquina desde que você executou o export $(dbus-launch), você terá que executá-lo novamente ou, se não, gnome-terminaliniciará uma instância do Wayland gnome-terminalno display remoto em vez de um X11 no display encaminhado.

Outra solução alternativa neste caso é executar explicitamente um X11 gnome-terminal-serverque será encerrado após o fechamento da última janela que o utilizou. Exemplo:

#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4        # yuck
gnome-terminal --app-id "$ID"
wait

Responder2

Isso pode ser feito no Vanilla Ubuntu ou Debian usando apenas:

ssh -X user@host dbus-launch gnome-terminal

Nas minhas anotações, tenho sinalizadores comuns sobre dbus-launchser: --exit-with-x11ou--exit-with-session

O problema restante é que demorará um pouco para carregar.

Na minha opinião, parece que o local gnome-terminalfala com o controle remoto gnome-terminal-server; é necessário extrair o código e modificá-lo, mas é um software bastante simples, simples demais.

Editar: Além disso, você pode fazer isso sem precisar do x11-dbuspacote (que não está no Ubuntu por padrão, embora seja pequeno).

Isso não funciona em todas gnome-terminalas versões, mas testei no Ubuntu 22 e Debian 11 e funciona.

ssh -X user@host gnome-terminal --disable-factory

Existem diferenças nessas abordagens além do estilo/comprimento do comando do terminal.

A abordagem original dbus-launchiniciará a gnome-terminalinstância gnome-terminal-serverdevido à forma como ela está interagindo com a máquina remota.

No entanto, a --disable-factoryabordagem irá lançar uma gnome-terminalinstância, que funciona de forma mais integrada com o dock do Ubuntu 22, por exemplo.

Espero que uma dessas duas opções atenda às suas necessidades. Existem também outras abordagens, mas na minha opinião estas são as melhores pela sua facilidade.

Responder3

No seu caso simples de encaminhamento X11 de uma única sessão, consulte https://askubuntu.com/a/1279065/463121

depois de fazer login:

$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY

e então o gnome-terminal é rápido e encaminha perfeitamente pelo X11.

Se começar a dar errado, talvez os daemons dbus pessoais tenham travado, se você puder matar todos os seus processos de usuário e fazer login novamente, tudo bem.

EDITAR: Ou mesmo:

$ dbus-update-activation-environment --all

dehttps://unix.stackexchange.com/a/243696/139357

Responder4

Iniciar um aplicativo no X pode ser muito lento.
Tive muito sucesso com o tunelamento de VNC sobre SSH com sistemas de clientes em todo o mundo.

Na máquina remota, instale um servidor VNC como o Tigervnc e inicie o daemon. (yum install -y tigervnc-server ; vncserver :3 -ou qualquer porta que você queira usar). Ele solicitará que você defina uma senha.

Na máquina local, instale o cliente VNC (yum install -y tigervnc). Você pode adicionar "exec /usr/bin/gnome-terminal" ao seu arquivo ~/.vnc/xstartup. então execute: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname O número da porta aqui será 59 e o número da porta que você escolheu

Em outro terminal faça: vncviewer :3

Você deverá ser solicitado a fornecer a senha definida no servidor.

informação relacionada