我正在尝试设置远程桌面连接,以通过 wifi 从我的笔记本电脑(均运行 Trisquel)访问我的台式电脑。我已经尝试过 VNC,但速度非常慢,所以我正在寻找其他选择。我最理想的做法是通过 SSH 启动一个远程 X 会话,该会话将使用 X 转发在我的笔记本电脑(即 tty8)上的一个单独的 tty 上运行。看起来它应该是可能的,但我试图弄清楚它是如何工作的。
通过 SSH 隧道的 X 转发似乎适用于单个 X 应用程序,使用ssh -X
. 我还可以使用以下命令(安装了 xinit)在 tty8 上启动一个新的本地 X 会话:
startx lxsession -- :1 tty8
所以,把两个和两个放在一起,我应该能够通过 SSH 连接启动远程会话,方法是在使用 SSH 登录到远程机器后键入以下命令,对吧?:
startx gnome-session -- :1 tty8
但不,它不起作用!我收到以下错误:
X: user not authorized to run the X server, aborting.
根据我的阅读,我似乎需要使用 XDMCP 和/或 X 嵌套来完成此操作。
所以,我的问题是:为什么有必要使用这些额外的包来做到这一点?我认为 X 应该具有网络透明性,在这种情况下,它为什么会知道/关心我尝试使用的 tty 是在本地机器上还是在远程机器上?XDMCP/X 嵌套给图片带来了什么,X 默认不包括?
我只是想弄清楚这一点并更好地理解它。
如果您在
ssh -X
会话上运行此命令,您将不会gnome-session
为自己实现远程。相反,您实际上是在尝试tty8
在远程主机的虚拟控制台上远程启动 GNOME 会话,无论谁碰巧坐在那台计算机上。相反,您需要先设置 SSH 密钥,以便您可以在您自己的帐户上在远程主机上运行命令,而无需提示输入密码或 SSH 密钥密码短语。然后你会在你的本地系统上运行这样的东西:
您可能需要添加
&
到末尾以使命令在后台运行。基本上,你会想要:
1) tty8 上的 X 服务器,作为其会话进程运行...
2) ... 到远程主机的 X-forwarding SSH 连接,其中...
3) ...
gnome-session
启动并将其显示通过 SSH 连接传回本地 tty8 上的“空”X 服务器。请注意,如果 GNOME 使用 GPU 的高级 3d 加速功能来渲染其桌面,那么在本地运行时它将使用直接渲染(= GNOME 窗口管理器和 X 服务器之间的直接内存访问)。像这样运行远程会话时,无法直接渲染(因为 GPU 与窗口管理器进程不在同一台计算机上!),这可能会减慢速度。在这种情况下,您可能必须选择更简单的窗口管理器。
XDMCP 是一种用于控制X11 终端的协议:精简的计算机设备,其唯一工作是充当其他计算机的 X11 显示器+鼠标+键盘。XDMCP 协议是在 SSH 之前开发的,完全不安全。它不适用于您的情况,除非您专门将显示管理器(
gdm
、kdm
或xdm
任何其他*dm
)配置为支持 XDMCP,因为 XDMCP 在现代系统上默认禁用,因为它不安全。如果你这样做了,那么你可以startx
让你的本地 X 服务器假装它是一个 X11 终端,并让它与远程主机建立直接的、未加密的、非 SSH 转发的连接。(拒绝吧”。)另一方面,X 嵌套将允许您在 :0.0(或
tty7
)上的常规本地 X11 会话中拥有一个大窗口,然后该窗口将包含远程桌面会话。我为此使用 Xnest https://www.x.org/archive/X11R7.5/doc/man/man1/Xnest.1.html
安装后(它在 Debian/ubuntu/mint/etc 的 apt 中)打开一个终端并执行
或者,您可以打开一个 VT(ctrl+alt+F1 等)并启动一个新的 X 服务器,只需使用
X :1
然后执行相同的export DISPLAY=:1
操作并 sshing。我个人更喜欢 Xnest。