我正在尝试设置远程桌面连接,以便通过 wifi 从我的笔记本电脑(均运行 Trisquel)访问我的台式电脑。我尝试过 VNC,但速度非常慢,因此我正在寻找其他选择。理想情况下,我想做的是通过 SSH 启动远程 X 会话,该会话将使用 X 转发在我的笔记本电脑上的单独 tty(即 tty8)上运行。看起来这应该是可能的,但我正在尝试了解它是如何工作的。
通过 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 默认情况下不包含的内容?
我只是想弄清楚这个问题并更好地理解它。
答案1
startx gnome-session -- :1 tty8
如果您在ssh -X
会话中运行此命令,您将无法gnome-session
为自己实现远程操作。相反,您实际上是在tty8
远程主机的虚拟控制台上尝试为恰好坐在该计算机上的任何人远程启动 GNOME 会话。
相反,您需要首先设置 SSH 密钥,以便可以使用自己的帐户在远程主机上运行命令,而不会提示输入密码或 SSH 密钥密码。然后你会运行这样的东西在您当地的系统:
startx ssh -X <remote host> gnome-session -- :1 tty8
您可能需要添加&
到末尾以使命令在后台运行。
基本上,你会想要:
1) tty8 上的 X 服务器,作为其会话进程运行...
2) ...将 SSH 连接 X 转发到远程主机,其中...
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 会话中拥有一个大窗口,然后该窗口将包含远程桌面会话。
答案2
我为此使用 Xnesthttps://www.x.org/archive/X11R7.5/doc/man/man1/Xnest.1.html
安装后(Debian/ubuntu/mint/etc 的 apt 中)打开终端并执行以下操作
user@localhost:~$ Xnest :1 &
user@localhost:~$ export DISPLAY=:1
user@localhost:~$ ssh -Y user@remotehost
(login, etc)
user@remotehost:~$ mate-session
或者,您可以打开一个 VT(ctrl+alt+F1 等)并通过使用启动一个新的 X 服务器X :1
,然后执行相同的操作export DISPLAY=:1
并 sshing in。我个人更喜欢 Xnest。