我有本地机器 (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_B
rdp/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 -
。
然后重新启动 lightdmservice lightdm restart
或systemctl restart lightdm.service
根据您的操作系统版本。
最后 - 检查 (B) Xorg 是否正在侦听 6000netstat -antp | grep -F 6000