3

I have a headless VM (running Ubuntu server 17.04) that I use SSH to access. I'm comfortable with the basics of X11 forwarding, and I can forward xterm and friends just fine. XFCE terminal also forwards OK.

I'd like to be able to use Gnome terminal, but it doesn't seem to launch. Instead, it just hangs for awhile and eventually errors out with:

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

Interestingly, gnome-terminal works remotely over X11 if I have a local desktop session running on my VM (launched via startx).

I'm guessing there's some kind of Gnome service that needs to be running, but I can't figure out what it is or how to start it outside of the context of a full desktop session. I don't usually launch those because the VM is headless by default.

Anybody got some insight on what I could do to get Gnome-terminal working remotely without having to start a GUI desktop session locally on my VM?

  • 1
    What exactly are you trying to accomplish by having a remote graphical terminal running? – tink Nov 29 '17 at 21:35
  • I do a lot of development work on the VM, mostly in terminal windows. I like using a graphical terminal so that I get tabs, window management, etc.

    It's not uncommon for me to have 3 or 4 terminal windows open with 4 or 5 tabs each. Rather than try to manage all that by starting tons of SSH sessions (or running a GUI in my VM), I like to start the a graphical terminal and use it that way (then I can switch between native apps and my VM seamlessly).

    – Nicholas Clark Nov 29 '17 at 22:04
  • This is really the same as https://unix.stackexchange.com/questions/344617/ . – JdeBP Nov 29 '17 at 22:06
  • @JdeBP woah dang, you nailed it!! That works perfectly. If you put that in an answer I'll accept it – Nicholas Clark Nov 29 '17 at 22:09
  • See https://unix.stackexchange.com/a/407863/5132 . – JdeBP Nov 29 '17 at 23:01

4 Answers4

7

That doesn't work because gnome-terminal (like any other gnome-thing) will try to connect to dbus and fail after not receiving a response for a long while.

The easiest work-around is just to start a dbus instance for your session:

export $(dbus-launch)
gnome-terminal

If you started a Wayland session on the remote machine since you have first run the export $(dbus-launch), you'll have to run it again, or if not gnome-terminal will start a Wayland instance of gnome-terminal on the remote display instead of an X11 one on your forwarded display.

Another workaround in this case is to explicitly run an X11 gnome-terminal-server which will terminate after the last window using it had closed. Example:

#! /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
3

It can be done in vanilla Ubuntu or Debian using just:

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

In my notes I have common flags on dbus-launch being: --exit-with-x11 or --exit-with-session

The remaining issue is it will take a while to load.

In my opinion, it seems having the local gnome-terminal talk to the remote gnome-terminal-server; it requires pulling down the code and modifying it but its fairly simple software, too simple.

Edit: Additionally, you can do it without requiring the x11-dbus package (which is not in Ubuntu by default, though it is small).

This does not work on all gnome-terminal versions but I tested it on Ubuntu 22 and Debian 11 and it works.

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

There are differences to these approaches beyond the style/length of the terminal command.

The original approach with dbus-launch will launch the gnome-terminal instance as gnome-terminal-server because of how it is interacting with the remote machine.

However, the --disable-factory approach will launch a gnome-terminal instance, which works more seamlessly with the Ubuntu 22 dock for example.

Hope you one of these two options satisfy your requirements. There are also other approaches but in my opinion these are the best for how easy they are.

Ekiis
  • 31
1

In your simple case for X11 forwarding from a single session, see https://askubuntu.com/a/1279065/463121

after logging in:

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

and then gnome-terminal is fast and forwards over X11 just fine.

If it starts to go wrong, maybe the personal dbus daemons have got stuck, if you can kill all your user processes and login again it is fine.

EDIT: Or even:

$ dbus-update-activation-environment --all

from https://unix.stackexchange.com/a/243696/139357

-1

Launching an app over X can be really slow.
I have had a lot of success with tunneling VNC over SSH with customer systems around the world.

On the remote machine, install a VNC server such as tigervnc and start up the daemon. (yum install -y tigervnc-server ; vncserver :3 -or whatever port you want to use). It will prompt you to set a password.

On the local machine, install the VNC client (yum install -y tigervnc) You can add "exec /usr/bin/gnome-terminal" to your ~/.vnc/xstartup file. then run: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname The port number here will be 59 and the port number you chose

In another terminal do: vncviewer :3

You should get prompted for the password set on the server.

  • 1
    I'm actually using SSH forwarding to talk to a VM running locally on my employer-provided machine. Our IT department is zealous that nobody's machine can boot to a non-blessed OS. Xfce-terminal works OK for me, but I'd like some of the polish that gnome provides. – Nicholas Clark Nov 29 '17 at 22:07
  • 1
    Exactly, I like it too. So you can tunnel VNC over SSH and run gnome-terminal remotely. – bootbeast Nov 29 '17 at 22:48