无需第三方工具即可通过 SSH 转发整个桌面

无需第三方工具即可通过 SSH 转发整个桌面

有件事一直困扰着我,我一直无法找到以下方面的好信息:

你怎么或者为什么不能通过 SSH ( ssh -X) 转发整个桌面?

我非常熟悉使用 转发单个窗口ssh -X。但有时我想使用我的 Linux 笔记本电脑作为另一台 Linux 机器的哑终端。

我一直认为应该可以关闭笔记本电脑上的桌面环境,然后从命令行 ssh 进入另一台计算机并启动转发到我的笔记本电脑的桌面环境。

在线搜索会提供一堆第三方工具,例如 VNC 和 Xephyr,或者提供单窗口 ssh 命令和配置。但这不是我要找的。我希望了解一些解剖结构(xwindows?,wayland?,gdm?),以了解您将如何做到这一点,或者为什么这是不可能的。


笔记:

  1. Xephyr 不是我正在寻找的,因为它尝试在窗口中运行远程桌面
  2. 由于多种原因,VNC 不是我所寻找的,尤其是因为它不是 X11 转发,而是转发位图。

答案1

如何你可以吗?

我一直在使用Xmodulo 站点(现已暂停)中的以下方法从任何 Ubuntu 计算机远程访问我的整个 Raspberry Pi 桌面。适用于我原来的 RPi、RPi2 和 RPi3。当然,你必须修改 sshd_config 以允许在远程计算机上进行 X11 转发(我会说客户端/主机,但我相信它们在 X11 中与其他用途不同,我可能会让自己感到困惑)。注意空格——当我无法打字时,它们经常会破坏这个过程。

然后,您就拥有了整个桌面,并且可以像物理连接一样运行计算机。我使用CTRL+ ALT+切换到 Ubuntu ,然后使用+ +F7返回到 RPi 。 YMMV。一个怪癖:来回切换时,您必须在按下另一个功能键之前物理释放+ 。CTRLALTF2CTRLALT

原文链接: http://xmodulo.com/2013/12/remote-control-raspberry-pi.html

原创作品作者:Kristophorus Hadiono。遗憾的是,引用的图片已丢失。

更新(20230411):看起来该网站已备份。


方法 #3:通过 SSH 进行桌面的 X11 转发

通过 X11+SSH 转发,您实际上可以远程运行 Raspberry Pi 的整个桌面,而不仅仅是独立的 GUI 应用程序。

这里我将展示如何通过X11转发在第二个虚拟终端(即虚拟终端8)中运行远程RPi桌面。默认情况下,您的 Linux 桌面在第一个虚拟终端上运行,即虚拟终端 #7。按照以下说明操作,让您的 RPi 桌面显示在第二个虚拟终端中。

打开您的控制台或终端,然后更改为 root 用户。

sudo su

键入以下命令,这将在虚拟终端 8 中激活 xinit。注意,您将自动切换到虚拟终端 8。您可以通过按CTRL+ ALT+切换回原来的虚拟终端 7 F7

xinit -- :1 &

切换到虚拟终端8后,执行以下命令远程启动RPi桌面。当询问时输入 pi 用户密码(见下图)。

DISPLAY=:1 ssh -X [email protected] lxsession

您将把远程 RPi 桌面以及从活动虚拟终端 7 启动的小型终端带到新的虚拟终端 8(见下图)。

记住,不要关闭该终端。否则,您的 RPi 桌面将立即关闭。

您可以通过按CTRL+ ALT+F7CTRL+ ALT+在第一和第二个虚拟终端之间移动F8

要通过 X11+SSH 关闭远程 RPi 桌面,您可以关闭活动虚拟终端 8 中看到的小终端(见上图),或者终止虚拟终端 7 中运行的 su 会话。

答案2

我还没有对此进行测试,但据我所知,应该可以关闭本地 X11 服务器(通常通过停止 X11 显示管理器,无论是gdmsddm、 classicxdm还是任何其他*dm),然后登录到虚拟控制台并启动自定义 X11 会话,对于 GNOME 如下所示:

xinit ssh -X user@remote-server gnome-session 

或者对于 KDE 来说是这样的:

xinit ssh -X user@remote-server startkde

通常,X11 显示管理器将启动 X11 服务器,显示登录对话框并处理身份验证(可以选择在身份验证之前和/或之后以 root 身份运行一些初始化脚本),然后以登录用户身份运行单个命令或脚本这将成为会议的支柱。该脚本的经典默认版本可能为/etc/X11/Xsession,但 Gnome 和 KDE 等桌面环境可能会用自己的命令替换它。此命令/脚本将在会话的生命周期中保持活动状态:如果它因任何原因终止,X11 显示管理器将假定会话已注销或崩溃,并将重置 X11 服务器并重新开始。

当您在startx没有 X11 显示管理器的情况下从虚拟控制台启动单个 X11 会话时,它是一个包装脚本,用于xinit启动 X11 服务器和会话命令/脚本。

你想要做的是启动X11服务器,但是使用ssh -X代替本地会话命令来运行实际的远程主机中的 X11 会话命令/脚本。

xinit命令将启动本地 X11 服务器,但它的唯一客户端将是该ssh命令。这ssh将建立 X11 转发、连接到远程主机、登录并运行在远程主机上启动适当的桌面环境会话所需的任何命令。由于$DISPLAY变量和~/.Xauthority文件将由 设置ssh -X,因此任何 X11 应用程序(包括 X11 窗口管理器)都应该能够运行。

然而,由于X11服务器将无法在本地访问,各种提高性能的X11协议扩展将自动不可用,并且网络连接+SSH加密将导致一些明显的延迟。窗口管理器和任何其他 X11 应用程序之间的任何交互都必须通过 X11 服务器,这意味着每路都要经过两次网络。所以肯定会比运行本地桌面更慢。

某些桌面小部件也可能会感到困惑,因为在远程运行时,您不一定具有对主机的硬件设备和/或系统 D-Bus 的所有预期访问级别。

答案3

我可以做(我认为!)你想用 Lubuntu/LXDE 做的事情 - 我可以使用登录到远程 Lubuntu 机器ssh -Y,以及本地运行的 X 服务器(例如 Mac 上的 Quartz,或者 Windows 上的 Xming 或 vcxsrv),运行lxsession,并获得本地运行的 LXDE 任务栏。它似乎可以拾取并管理其他 X 窗口,包括本地运行的窗口!大多数 X 服务器都可以选择在客户端操作系统中作为单独的浮动 X 窗口运行,或者在可以全屏运行的背景下运行。请参阅此屏幕截图,其中lxsession(我认为任务栏本身称为lxpanel、几个本地 xterm、通过 ssh 登录并启动的 Mac iTerm 会话lxsession、一个远程lxterm和远程xeyes.

在此输入图像描述

其他发行版将需要不同的命令来运行桌面,例如对于 Ubuntu 或带有 GNOME 的 Mint,我认为是gnome-session,尽管我无法让它在我的其他机器上工作。

答案4

我认为你需要读一点书。你可能会觉得奇怪,X 将键盘和鼠标描述为服务器,而巧妙的事情发生的地方描述为客户端 - 但这确实有道理(客户端发起到服务器的连接),这个概念可能是基础您对如何达到预期结果的困惑。

有多种方法可以实现您的目标。一些评论员建议使用 ssh 连接运行 xinit。 drkvogel 建议通过 ssh 调用单个程序 - 但是当该程序能够启动其他程序时,它会提供您所描述的有效功能,而不会切断您与本地计算机的连接。

但即使在 Linux 出现之前,人们就在 X 终端上运行 X 应用程序,这些终端确实是真正的终端——无法在本地运行任何应用程序。用于配置此类设备的协议称为 XDMCP。快速谷歌,我发现它描述了如何配置显示管理器 - 这是提供初始登录功能的 X 客户端。那篇文章只提到在服务器上使用 xnest(带有屏幕和键盘的东西),但也可以专门使用完整的显示来进行远程会话

X -query client.host.net

其中“X”是 xinit 运行的第一个东西,而 client.host.net 是 X 客户端将运行的位置,并且应该托管修改后的显示管理器。

请注意,网络传输相当不安全 - 如果您想通过不受信任的网络进行连接,请考虑使用 VPN。

请注意,X 不提供任何音频功能 - 仅提供视频/键盘和鼠标。如果这很重要,请看看香料。

更新一些更勤奋的谷歌搜索发现了这个:https://tldp.org/HOWTO/XDM-Xterm/index.html

相关内容