X2Go
X2Go 允许通过网络访问计算机的图形桌面。该协议通过 安全 Shell 协议进行隧道传输,因此是加密的。
安装
有两个可用部分。可以使用以下软件包进行安装
- x2goserverAUR - X2Go 服务器
- x2goclientAUR - 基于 Qt5 的 X2Go 客户端
服务端
配置安全 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 username@host
是否成功。现在您可以创建多个会话,这些会话将显示在右侧,可以通过鼠标单击选择。每个条目都包含您的用户名、主机名、IP 和 SSH 连接端口。此外,您可以定义多个速度配置文件(从调制解调器到 LAN)以及要远程启动的桌面环境。
访问本地桌面
要访问本地桌面(即当前在服务器上运行的桌面,而不是新的桌面),如果用户匹配(例如用户 foo 访问用户 foo 的会话),则可以在 X2Go 客户端的“会话类型”中选择“X2Go/X11 桌面共享”或“连接到本地桌面”选项(取决于您的客户端版本)。
但是,要访问不同用户的本地桌面,需要安装 x2godesktopsharingAUR 并启动 x2godesktopsharing
。
在客户端和服务器(桌面)之间交换数据
在 X2Go 客户端(例如笔记本电脑)上,可以共享本地目录。服务器将使用 fuse 和 SSHFS 访问此目录,并将其挂载到服务器上您的主目录的子目录 media 中。这使您可以在服务器上访问笔记本电脑数据或交换文件。也可以在每次会话启动时自动挂载这些共享。
临时离开会话
X2Go 的另一个特殊功能是暂停会话的可能性。这意味着您可以在一个客户端上离开会话,甚至可以在另一个客户端上在同一点重新打开它。这可以用于在 LAN 中启动会话,并在以后在笔记本电脑上重新打开它。会话数据在此期间存储在服务器上的 SQLite 数据库中并进行管理。会话状态由名为 x2gocleansessions 的进程记录。
故障排除
桌面环境无法启动
本地会话阻止 X2Go 新会话
当本地已经运行桌面会话并且 X2Go 尝试启动新会话时,可能会发生故障。这通常是与 D-Bus 相关的问题,有关详细信息,请参见 [2]。
如果 D-Bus 启动失败,请尝试使用自定义桌面命令而不是默认会话类型。对于该命令,请使用桌面启动器作为 dbus-launch
的选项,例如 dbus-launch startxfce4
。这是一种启动会话总线实例的方法,设置适当的环境变量,以便新会话可以找到总线。
路径问题
可能是桌面环境的可执行文件 startkde、startgnome 或 startxfce4 在使用 SSH 登录时不在 $PATH
中。在这种情况下,不要简单地选择 KDE、Gnome 或 XFCE 的默认值,而是使用可执行文件的完整路径,例如 /usr/bin/startxfce4
。您也可以启动 openbox 或另一个窗口管理器。现在您应该被要求输入服务器的密码和用户名,登录后您将短暂看到 X2Go 徽标和桌面。
x2goclient 中没有选择屏幕
iproute2 中的回归导致 ss 在指定 -u
标志时(如 /usr/bin/x2golistdesktops
中所做的那样)不显示任何结果。[3]
会话无法正确注销
由于 此错误,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 新会话 完全相同的修复方法。
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_key
和 c:\Users\User\.x2go\etc\ssh_host_dsa_key.pub
替换为新生成的密钥文件即可。
来自 [6] 的其他解决方法也可能有所帮助。
远程会话的合成窗口管理器失败
当运行 x2goserver 的计算机也用于本地会话时,合成窗口管理器无法通过与 x2goclient 的远程连接加载,应使用更简单的窗口管理器代替。以下示例使用 Compiz 和 GNOME 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 客户端连接将失败。
性能问题
如果出现性能问题(应用程序无响应或冻结),请尝试关闭声音支持、打印支持和文件共享隧道。