X2Go

来自 ArchWiki

X2Go 允许通过网络访问计算机的图形桌面。该协议通过 安全 Shell 协议进行隧道传输,因此是加密的。

注意: X2Go 并非与所有桌面环境兼容。您可以先查看 X2Go 桌面环境兼容性。如果您想连接到现有的 Xorg 会话,兼容性尤其重要。此外,X2Go 不支持许多图形应用程序(包括 Firefox)所需的 GLX 1.4。要使这些应用程序工作,需要 进一步的技巧

安装

有两个可用部分。可以使用以下软件包进行安装

服务端

配置安全 Shell 守护进程

X2Go 使用 安全 Shell 工作,因此您需要配置 sshd 守护进程以允许 X11 转发。请按照 OpenSSH#X11 转发OpenSSH#守护进程管理 中的说明进行操作。

检查 fuse 内核模块是否已加载

为了使服务器能够访问客户端计算机上的文件,需要 fuse 模块。可以检查 lsmod | grep fuse 是否返回匹配项,否则加载 fuse 内核模块

设置 SQLite 数据库

在服务器上运行以下命令以初始化 SQLite 数据库(这是 x2go 服务器工作所必需的)

# x2godbadmin --createdb

控制发布的应用

X2Go 可以在客户端的菜单中发布已安装的应用程序。这由 /etc/x2go/applications/ 中的文件控制。但是,此位置默认情况下未创建,可以通过创建指向 /usr/share/applications/ 的符号链接来创建。或者,除了创建符号链接之外,还可以创建一个文件夹并仅链接所需的应用程序。

有关更多信息,请参见 [1]

启动 X2Go 服务端守护进程

现在您需要做的就是启动系统 x2goserver.service

客户端

在客户端计算机(想要访问服务器的计算机)上运行X2Go 客户端

$ x2goclient

有关可用选项的列表,请参见 x2goclient(1)

注意: 确保客户端计算机可以通过 SSH 会话连接到服务器,方法是从客户端检查 ssh username@host 是否成功。

现在您可以创建多个会话,这些会话将显示在右侧,可以通过鼠标单击选择。每个条目都包含您的用户名、主机名、IP 和 SSH 连接端口。此外,您可以定义多个速度配置文件(从调制解调器到 LAN)以及要远程启动的桌面环境。

访问本地桌面

要访问本地桌面(即当前在服务器上运行的桌面,而不是新的桌面),如果用户匹配(例如用户 foo 访问用户 foo 的会话),则可以在 X2Go 客户端的“会话类型”中选择“X2Go/X11 桌面共享”或“连接到本地桌面”选项(取决于您的客户端版本)。

但是,要访问不同用户的本地桌面,需要安装 x2godesktopsharingAUR 并启动 x2godesktopsharing

在客户端和服务器(桌面)之间交换数据

在 X2Go 客户端(例如笔记本电脑)上,可以共享本地目录。服务器将使用 fuseSSHFS 访问此目录,并将其挂载到服务器上您的主目录的子目录 media 中。这使您可以在服务器上访问笔记本电脑数据或交换文件。也可以在每次会话启动时自动挂载这些共享。

临时离开会话

X2Go 的另一个特殊功能是暂停会话的可能性。这意味着您可以在一个客户端上离开会话,甚至可以在另一个客户端上在同一点重新打开它。这可以用于在 LAN 中启动会话,并在以后在笔记本电脑上重新打开它。会话数据在此期间存储在服务器上的 SQLite 数据库中并进行管理。会话状态由名为 x2gocleansessions 的进程记录。

故障排除

桌面环境无法启动

本地会话阻止 X2Go 新会话

当本地已经运行桌面会话并且 X2Go 尝试启动新会话时,可能会发生故障。这通常是与 D-Bus 相关的问题,有关详细信息,请参见 [2]

如果 D-Bus 启动失败,请尝试使用自定义桌面命令而不是默认会话类型。对于该命令,请使用桌面启动器作为 dbus-launch 的选项,例如 dbus-launch startxfce4。这是一种启动会话总线实例的方法,设置适当的环境变量,以便新会话可以找到总线。

路径问题

可能是桌面环境的可执行文件 startkdestartgnomestartxfce4 在使用 SSH 登录时不在 $PATH 中。在这种情况下,不要简单地选择 KDE、Gnome 或 XFCE 的默认值,而是使用可执行文件的完整路径,例如 /usr/bin/startxfce4。您也可以启动 openbox 或另一个窗口管理器。现在您应该被要求输入服务器的密码和用户名,登录后您将短暂看到 X2Go 徽标和桌面。

x2goclient 中没有选择屏幕

iproute2 中的回归导致 ss 在指定 -u 标志时(如 /usr/bin/x2golistdesktops 中所做的那样)不显示任何结果。[3]

有关更多信息,请参见 [4][5]

会话无法正确注销

由于 此错误,X2Go 会话可能无法正确注销。启动会话的脚本会输出许多日志行,这可能会使 X2go 感到困惑。一个简单的工作方法是创建一个自定义会话脚本,并将日志输出重定向到文件或 /dev/null,然后将您的 X2Go 客户端指向此自定义脚本。

这是一个 XFCE 会话的示例脚本

 #!/bin/sh
 #
 #xfce4-session spits out quite a bit of text during logout, which I guess
 #confuses x2go so we would get a black screen and session hang.
 #adding redirect to a logfile like "~/logfile" or "/dev/null" nicely solved it
 # see https://bugs.x2go.org/cgi-bin/bugreport.cgi?bug=914
 /usr/bin/xfce4-session > /dev/null

通知区域消失

如果您登录后,但通知区域丢失,则可以使用与 #本地会话阻止 X2Go 新会话 完全相同的修复方法。

共享文件夹未挂载 (Windows 客户端)

X2go windows 客户端使用的 ssh 守护进程默认使用已弃用的 ssh-dss 密钥,并且由于 Arch 不接受它们,您的共享文件夹将无法挂载。请查看此 错误报告 以获取更多信息。

这可以在 windows 端通过生成不同类型的密钥来解决

 C:\Program Files (x86)\x2goclient\ssh-keygen -b 2048 -t rsa

只需将 c:\Users\User\.x2go\etc\ssh_host_dsa_keyc:\Users\User\.x2go\etc\ssh_host_dsa_key.pub 替换为新生成的密钥文件即可。

来自 [6] 的其他解决方法也可能有所帮助。

远程会话的合成窗口管理器失败

当运行 x2goserver 的计算机也用于本地会话时,合成窗口管理器无法通过与 x2goclient 的远程连接加载,应使用更简单的窗口管理器代替。以下示例使用 CompizGNOME Flashback,但可以针对其他桌面环境进行修改。

创建一个脚本来检测要使用的窗口管理器

/usr/local/bin/mk-gnome-wm.sh
#!/bin/sh
xdpyinfo 2> /dev/null | grep -q "^ *Composite$" 2> /dev/null
IS_X_COMPOSITED=$?
if [ $IS_X_COMPOSITED -eq 0 ] ; then
    gtk-window-decorator &
    WM="compiz ccp --indirect-rendering --sm-client-id $DESKTOP_AUTOSTART_ID"
else
    WM="metacity --sm-client-id=$DESKTOP_AUTOSTART_ID"
fi
exec sh -c "$WM"

然后创建一个匹配的会话文件

/usr/share/gnome-session/sessions/mk-gnome-wm.session
[GNOME Session]
Name=GNOME fallback with adaptative WM
RequiredComponents=gnome-panel;gnome-settings-daemon;
RequiredProviders=windowmanager;notifications;
DefaultProvider-windowmanager=/usr/local/bin/mk-gnome-wm.sh
DefaultProvider-notifications=notification-daemon

创建一个相应的桌面文件

/usr/share/xsessions/mk-gnome-wm.desktop
[Desktop Entry]
Name=GNOME fallback with adaptative WM
Exec=gnome-session --session mk-gnome-wm
Icon=
Type=Application

现在您应该能够远程连接而不会出现问题。

/bin/bash: 连接时没有这样的文件或目录 (或者你使用的任何 shell)

在您的 ssh 配置中,如果您 chroot 用户,则该用户需要在其 chroot 目录中拥有自己的 /bin 目录。否则,您将无法连接。

X2Go 客户端:无法从本地 Wayland 会话连接到远程 X2Go 服务器:“与远程服务器的连接已关闭”

X2Go 客户端从本地 Wayland 会话按预期启动,但尝试连接到远程 X2Go 服务器失败。此问题通常由 Wayland 上的 Qt 引起。

请按照 桌面条目#修改环境变量 中的说明进行操作,并更改以以下内容开头的行

Exec=x2goclient

Exec=env QT_QPA_PLATFORM=xcb x2goclient

X2Go 客户端:无法连接到 xyz:22 - 无法应用选项

x2go 客户端无法解析带有令牌的自定义用户 ssh 配置文件。

此 ssh 配置

Host xyz
    IdentitiesOnly yes
    IdentityFile %d/.ssh/%L.key

将导致连接失败,并显示调试输出

x2go-DEBUG-../src/sshmasterconnection.cpp:622> "Cannot connect to xyz:22" - "Couldn't apply options"

此 ssh 配置有效

Host xyz
    IdentitiesOnly yes
    IdentityFile ~/.ssh/mysupersecret.key

X2Go 服务器:localhost ssh 隧道在服务器上失败,sshd 错误:error: connect_to localhost port xyz: failed.

X2Go 服务器需要在服务器上使用 IPv4 进行 localhost ssh 隧道。如果您将 sshd 服务器配置为仅使用 IPv6

AddressFamily inet6

X2Go 客户端连接将失败。

性能问题

如果出现性能问题(应用程序无响应或冻结),请尝试关闭声音支持、打印支持和文件共享隧道。

参见