Raspberry pi 3 *反向*远程桌面

Raspberry pi 3 *反向*远程桌面

我有本地机器 (A) 和 Raspberry PI 3 (B)。
B 连接了 HDMI 显示器,并且正在运行 Raspbian 操作系统。

我想在 A 上运行 X 应用程序 - 比如说我在 A 上的 Libre Office Impress 演示文稿,并使其在连接到 B 的屏幕上可见(显示)。
我想在 A 机器前执行此操作:

  • 不是ssh -X to_A来自 B,
  • 也不使用 B 中的 VNC 来获取 A 的输出

我不是在寻找:

  • 使用来自 A 的 ssh 在 B 上运行 X 应用程序,并将其输出显示在 A 上(这可以通过from_a $ ssh -X machine_Brdp/remmina/vnc 客户端完成)
  • 使用 A 中的 ssh 在 B 上运行 X 应用程序,并将其输出显示在 B 上(例如,这可以通过在 ssh 中导出显示并正确配置 xhost 来完成from_a $ ssh machine_b from -> at_a_but_sshed_onto_b $ xhost + && export DISPLAY=:0 xeyes
  • 需要直接物理访问 B 的解决方案

我尝试的是设置(B)以便运行远程X项目...如果我没有忘记任何事情 - 因为nmap -p6000 machine_B返回该端口是关闭,并运行(从 A 的命令行):

A_machine $ env DISPLAY=B_machine:0 xeyes

其中 B_machine 被设置/etc/hosts并且~/.ssh/config失败。

我怀疑,我完全错过了复制 X11 的步骤魔法饼干来自.Xauthority...但也许这一步不是必需的,还有更简单的方法吗?

编辑:回应 @Rostislav Kandilarov 问题 - 似乎 lightdm 启动了 X 服务器,但最快我将能够检查它是否是星期一,以及验证它是否以--nolisten tcp.

答案1

(已编辑,下面是旧答案)

附加要求是您希望从 A 执行所有这些操作,而不接触 B,在 B 上运行 X 服务器并使用 A 上的应用程序连接到它的问题是,该 X 服务器仅使用输入设备(键盘、鼠标) )连接到 B。因此,要使用您的应用程序,您必须使用这些您不想要的输入设备。

原则上你可以尝试共享 A 的输入设备,但随后的结构就开始变得错综复杂......

所以虚拟网络控制器很多在这种情况下更容易。

在 A 上设置 a vnc4server。此服务器还将充当 A 上应用程序的 X 服务器。xvnc4viewer在 A 上启动 a,并使用它来启动和控制您的应用程序。在 B 上启动另一个 vncviewer 并将其连接到 A 上的服务器,它将显示该应用程序。它可以很简单directvnc(直接使用 RaspPi 的帧缓冲区,无需绕行 X,因此 RaspPi 的工作量更少),或者如果您想继续在 B 上运行现有的 X 服务器,另一个xvnc4viewer


最简单的方法是使用远程桌面,例如虚拟网络控制器,很可能已经作为软件包包含在您的发行版中。这通常比通过 ssh 或其他方式进行 X 转发效果更好,因为它的压缩效果更好,并且不会在线路上使用 X 原语。

当然,还有多种方法可以通过 ssh 或直接设置 X 转发。例如,您可以通过从 B 登录ssh -X到 A,在 A 上运行您的应用程序,然后将输出显示在 B 上。(您排除了反向方向,但没有提及这一点,所以我不太明白当然如果你想要的话)。

您还可以通过以下方式配置 X 服务器以进行远程会话XDMCP。或者使用正确的xauth设置让单个应用程序使用远程 X 服务器DISPLAY

但我仍然建议先尝试 VNC。

答案2

因此,如果您在 (B) 上使用 Raspbian OS,并且没有像您怀疑的那样进行任何特定的定制,那么您可能正在使用 lightdm 。

当然,您需要告诉 lightdm 强制 X 服务器监听 tcp(端口 6000)。您可以通过xserver-allow-tcp=true在全局部分的conf 文件中进行设置来完成此操作[Seat:*]。您可能还需要明确指定xserver-command=X -listen tcp(看看这里)。您可以选择任何额外文件/etc/lightdm/lightdm.conf.d/*.conf或直接在/etc/lightdm/lightdm.conf.

接下来,如果您不太关心安全性,您可能还需要在 (B) 上运行某种形式的xhost +命令,例如xhost + IP_OF_(A).如果您确实关心 LAN 漏洞你不应该首先直接使用 X over tcp ,但是如果没有 ssh ,您可以通过在 (B) 上运行来在 (A) 和 (B) 之间交换 MIT-MAGIC-COOKIE ,从而提供一点破解难度xauth extract - $DISPLAY | ssh (A) xauth merge -

然后重新启动 lig​​htdmservice lightdm restartsystemctl restart lightdm.service根据您的操作系统版本。

最后 - 检查 (B) Xorg 是否正在侦听 6000netstat -antp | grep -F 6000

相关内容