如何在无头服务器上远程启动 gnome-terminal? (无法通过X11转发启动)

如何在无头服务器上远程启动 gnome-terminal? (无法通过X11转发启动)

我有一个无头虚拟机(运行 Ubuntu 服务器 17.04),我使用 SSH 访问它。我对 X11 转发的基础知识很熟悉,并且我可以很好地转发 xterm 和朋友。 XFCE终端也转发OK。

我希望能够使用 Gnome 终端,但它似乎无法启动。相反,它只是挂起一段时间并最终出错:

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

有趣的是,如果我的 VM 上运行本地桌面会话(通过 startx 启动),则 gnome-terminal 可以通过 X11 远程工作。

我猜测需要运行某种 Gnome 服务,但我无法弄清楚它是什么或如何在完整桌面会话的上下文之外启动它。我通常不会启动它们,因为默认情况下虚拟机是无头的。

有人知道我可以做些什么来让 Gnome 终端远程工作,而不必在我的虚拟机上本地启动 GUI 桌面会话吗?

答案1

这不起作用,因为gnome-terminal(像其他任何gnome-thing)将尝试连接到 dbus,并在很长一段时间没有收到响应后失败。

最简单的解决方法就是为您的会话启动一个 dbus 实例:

export $(dbus-launch)
gnome-terminal

如果您开始了韦兰会议于偏僻的自从您第一次运行 以来export $(dbus-launch),您必须再次运行它,否则将在远程显示器上gnome-terminal启动 Wayland 实例,而不是在转发的显示器上启动 X11 实例。gnome-terminal

这种情况下的另一个解决方法是显式运行 X11,gnome-terminal-server该 X11 将在最后一个使用它的窗口关闭后终止。例子:

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

答案2

可以在 vanilla Ubuntu 或 Debian 中使用以下命令来完成:

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

在我的笔记中,我有一些共同的标志dbus-launch--exit-with-x11--exit-with-session

剩下的问题是加载需要一段时间。

在我看来,这似乎是本地gnome-terminal与远程的对话gnome-terminal-server;它需要拉下代码并修改它,但它的软件相当简单,太简单了。

编辑:此外,您可以在不需要x11-dbus软件包的情况下完成此操作(默认情况下,Ubuntu 中没有该软件包,尽管它很小)。

这并不适用于所有gnome-terminal版本,但我在 Ubuntu 22 和 Debian 11 上测试过它并且它有效。

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

除了终端命令的样式/长度之外,这些方法还存在差异。

最初的方法dbus-launch将启动gnome-terminal实例,gnome-terminal-server因为它与远程计算机交互的方式。

但是,该--disable-factory方法将启动一个gnome-terminal实例,该实例可以与 Ubuntu 22 扩展坞等无缝协作。

希望这两个选项之一满足您的要求。还有其他方法,但在我看来,这些方法是最好的,因为它们非常简单。

答案3

在从单个会话进行 X11 转发的简单案例中,请参阅 https://askubuntu.com/a/1279065/463121

登录后:

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

然后 gnome-terminal 速度很快并且可以通过 X11 转发。

如果开始出错,可能是个人 dbus 守护进程被卡住了,如果您可以终止所有用户进程并重新登录,那就没问题了。

编辑:或者甚至:

$ dbus-update-activation-environment --all

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

答案4

通过 X 启动应用程序可能会非常慢。
我在通过 SSH 与世界各地的客户系统建立 VNC 隧道方面取得了很多成功。

在远程计算机上,安装 VNC 服务器(例如 TigerVNC)并启动守护程序。 (yum install -y Tigervnc-server ; vncserver :3 - 或您想要使用的任何端口)。它会提示您设置密码。

在本地计算机上,安装 VNC 客户端 (yum install -y Tigervnc) 您可以将“exec /usr/bin/gnome-terminal”添加到 ~/.vnc/xstartup 文件中。然后运行: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname 这里的端口号将是 59 和您选择的端口号

在另一个终端中执行: vncviewer :3

系统应该提示您输入在服务器上设置的密码。

相关内容