通过SSH与Xming进行X11转发?


11

我具有SSH访问权限,并且安装了Xming以及Xming字体。根据此处的说明,我已配置PuTTY转发x11,并告诉它将桌面放置在localhost:0 。

但是,在和登录后startx,我什么也没得到。或更确切地说,它运行了一堆似乎表明一切正常的消息,但是我在控制台窗口中看到了一个游标,它的行为类似于等待状态。就是这样。

我想念什么?我需要打开一些东西才能看到桌面吗?

我想将台式机转发到工作PC,这样我就可以在午餐时玩RasPi,而无需实际插入硬件。请帮忙。

编辑:

Xming运行时发生的屏幕截图,我通过SSH并致电startx

带有Xming响应的SSH

编辑2:

这个答案startx是不必要的,因为它会启动RasPi X服务器,并且我正在Windows上使用Xming服务器。在这种情况下,如何从Windows转到Xming上的桌面/ GUI?因为即使在运行Xming并启用SSH的情况下,我也只能看到一般的控制台提示。也许我做错了。我想要的是在远程Windows PC的窗口中运行的完整,正常的RasPi GUI。我不想使用VNC。我正在通过Internet转发。我如何到达那里?


2
我还想从Raspberry到Windows计算机运行图形会话。当我看到您的消息说startx意味着启动X服务器时,我知道我需要启动一个X程序...因此,让我们启动... x-session-manager!这样,您就可以在远程计算机上进行图形化会话。谢谢,你给我开路!

Answers:


15

如果在Windows计算机上启动Xming,则您已经在运行X服务器。您不必使用来启动Raspberry Pi的X服务器startx。您的X应用程序将在Raspberry Pi上运行,但该应用程序将使用Windows的Xming X服务器。

链接的文档指出必须在Windows上启动X服务器,而没有提到必须在Linux上启动X服务器。在文档的最后一句中:

您现在应该能够从本地桌面上的主机运行X应用程序

“ X应用程序”不是指X服务器(应以开头startx),而是指xclock,xeyes等应用程序。

一个特殊的X应用程序是lxsession,它将启动LXDE的标准会话管理器(至少在我的Raspbian上)。在控制台上启动此应用程序将为您提供所需的“完整GUI”:

lxsession

就我个人而言lxsession,启动并不是很有用,对我而言,在控制台上启动X应用程序要容易得多。


1
好。我想这是我能理解的。您说的是startx是不必要的,因为它可以启动RasPi x服务器,而我正在Windows上使用Xming服务器。在这种情况下,如何从Windows转到Xming上的桌面/ GUI。因为即使在运行Xming并启用SSH的情况下,我也只能看到一般的控制台提示。您是说我只会在xming中运行实际的应用程序,而不是完整的GUI。也许我做错了。我想要的是在远程Windows PC上的窗口中运行的完整,正常的RasPi GUI。我不想使用VNC。我正在通过互联网转发。
zenbike 2012年

更新了答案。
asalamon74

完美运行,如果(如预期)响应缓慢。感谢您的帮助。
zenbike 2012年

1
…那就是您的指南建议一次通过ssh运行单个应用程序的原因……
亚历山大-恢复莫妮卡(Monica)2012年

1
@ asalamon74谢谢!哇!这只是kick子。我不必用疯狂的短线处理连接到USB的键盘和鼠标。我过去常常通过上述设置坐在电视前。现在?我只是像ssh一样运行gui!
Dheeraj Bhaskar 2013年

1

使用Cygwin / X

如果您不依赖Xming,则可以使用Cygwin / X在Windows中运行X服务器。

准备Raspberry Pi

尝试使用PowerShell 建立从Windows到Raspberry Pi 的常规SSH连接

使用PowerShell和SSH登录Windows上的Raspberry Pi

鉴于Raspbian Buster包含X11Forwarding yes在其中/etc/ssh/sshd_config,您的Raspberry Pi还应该能够将X11应用程序的可视输出转发到Windows上的X服务器。

下一步显示如何安装该X服务器。

在Windows上安装Cygwin / X

Cygwin / X为Windows提供了一个X服务器,该服务器显示在Raspberry Pi上运行的GUI应用程序。

  1. setup-x86_64.exeCygwin的网站下载并运行。

  2. 对于Cygwin的“本地软件包目录”,您可以使用C:\Users\me\AppData\Roaming\Cygwin

  3. 选择您附近的服务器以下载软件包。

  4. 将“查看”设置为“完整”并搜索xinit

  5. 在“新建”列中,使用下拉菜单将值从“跳过”更改为xinit的最新版本:

使用Cygwin安装软件包xinit

  1. openssh以相同的方式安装软件包。

从Windows连接到Raspberry Pi

  1. 开始使用Windows的开始菜单中的X服务器:Cygwin-X → XWin Server。这不会打开任何窗口,但是您应该在系统托盘中看到两个新图标:

系统任务栏中的XWin服务器图标

  1. 启动Cygwin终端: Cygwin → Cygwin64 Terminal

  2. DISPLAY环境变量设置为Windows上X服务器运行的位置:

    export DISPLAY=:0.0

  3. 通过X11转发连接到您的Raspberry Pi:

    ssh -Y pi@raspberrypi

使用Cygwin终端登录

在SSH会话中,您现在可以像Ronny一样在Raspberry Pi上启动X应用程序:

Thonny转发到Windows

另外,正如问题注释中提到的user1297一样,您可以x-session-manager模拟在通过外接显示器上的HDMI连接到Raspberry Pi时获得的体验:

Rasbpian桌面,已安装到Windows

如果要直接启动应用程序而无需先在外壳中键入其名称,请使用以下命令:

ssh -Y pi@raspberrypi x-session-manager

在macOS上

XQuartz为macOS提供了X服务器。

安装XQuartz,注销并重新登录(以使新值DISPLAY生效),然后从Bash使用SSH启动应用程序:

ssh -Y pi@raspberrypi thonny

使用XQuartz在macOS内显示Thonny


1

如果您已经在Windows上运行X服务器(与使用Xming一样),那么Windows端就已经完成了(但请参见下面的一些重要详细信息)。剩下的关键是告诉pi上的X11应用程序将其X11数据发送到Windows PC。

这是通过DISPLAY环境变量完成的。通常,如果X服务器和应用程序在同一台计算机上运行,​​则DISPLAY只会指定服务器号(例如,:0如果您仅运行一台X服务器),也可以指定服务器和屏幕(例如:0.0)。由于没有IP地址,因此会告诉应用程序的X库服务器是本地服务器,并且将相应地建立连接(可能通过某种共享内存传输)。

要告诉应用将X11数据发送到远程节点,请在DISPLAY变量中包含IP地址。例如,export DISPLAY=192.168.1.10:0。这将告诉所有X11应用程序他们需要打开与192.168.1.10节点上X服务器#0的TCP连接。如果您将DNS主机名放在网络中,则可以在这里使用。

两个潜在的问题

正如我在第一段中所写,仅运行Xming可能还不够。可能需要其他配置。

首先是必须将X11服务器配置为通过TCP接受来自远程节点的连接。今天分发的许多X服务器(我不了解Xming)仅接受来自本地运行的应用程序的连接,除非您明确配置它们。这是一项安全功能,因为每个打开的套接字都是潜在的攻击媒介。

第二个是您的X11服务器维护着一个允许连接的主机/用户的数据库。您需要将Raspberry Pi的IP地址列入白名单。您可以通过xhost在Windows上从Xming 运行命令来执行此操作,例如,从在xterm中运行的控制台运行命令。您也可以输入xhost +以禁用此安全检查,但这很危险,因为它将允许世界各地的任何应用打开与显示器的连接。如果您位于信任每个人(例如您自己的家)的LAN上的防火墙后面,那是最简单的方法,但是xhost如果不这样做,请花点时间正确配置。

选择: ssh -Y

使用上述方法,您的X11应用程序都将尝试打开与X服务器的TCP连接。这些连接不安全。LAN侦听包上的某人可以拦截它们。

为了解决此问题,-Y与其在Raspberry pi上设置DISPLAY变量,不如在连接到它时使用该参数(例如slogin -Y hostname)。-Y参数(如-X)将在节点之间创建一个隧道,以承载X11流量。这将使X11通信保持加密和安全。它还将分配自​​己的DISPLAY环境变量,以便应用程序将使用隧道。xhost由于(就您的X服务器而言)连接是本地(从SSH隧道的始发端)发起的,因此它也可以避免混乱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.