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-terminal
iniciará uma instância do Wayland gnome-terminal
no display remoto em vez de um X11 no display encaminhado.
Outra solução alternativa neste caso é executar explicitamente um X11 gnome-terminal-server
que 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-launch
ser: --exit-with-x11
ou--exit-with-session
O problema restante é que demorará um pouco para carregar.
Na minha opinião, parece que o local gnome-terminal
fala 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-dbus
pacote (que não está no Ubuntu por padrão, embora seja pequeno).
Isso não funciona em todas gnome-terminal
as 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-launch
iniciará a gnome-terminal
instância gnome-terminal-server
devido à forma como ela está interagindo com a máquina remota.
No entanto, a --disable-factory
abordagem irá lançar uma gnome-terminal
instâ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
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.