该网页属于一组探索 Smart Zynq 板功能的小项目。
该项目也发表在 HelloFPGA上,推荐给中国读者。还有一个简短的视频演示了本页描述的方法。
介绍
在 Linux 计算机上,图形软件可以在另一台计算机上打开窗口(window)。换句话说,该软件(例如 Google Chrome)可以在一台计算机上运行,但该软件的用户坐在另一台计算机前。微软 Windows也有类似的解决方案,但这些解决方案通常会提供糟糕的用户体验。 Linux 更适合远程工作。
此功能并不经常使用,因为人们通常在自己的计算机或笔记本电脑上工作。但当计算机没有连接显示器时,此功能可能会很有用。
本教程介绍如何在 Xillinux 上运行图形软件,以便将鼠标、键盘和显示器连接到微软 Windows计算机。
X server
Linux 桌面的基础是 X-windows。这是一个非常古老的软件,但至今仍然运行良好。与微软 Windows计算机不同,图形界面基于 X server。这是一个实现 TCP/IP server的常规计算机程序(在用户空间(user space)中运行)。该服务器通常监听端口 6000(port 6000)。任何想要在计算机屏幕上显示窗口的程序都通过 TCP/IP连接到该服务器。所有图形信息均通过此 TCP/IP 连接发送。用户的键盘敲击和鼠标移动也通过该连接传输。
控制窗口的程序可以在同一台计算机上运行,也可以在不同的计算机上运行。这并不重要,因为连接是基于 TCP/IP的。
在当今的大多数 Linux 计算机上,无法从另一台计算机通过 TCP/IP 直接连接到 X server 。出于安全考虑,此功能已关闭。此外,还有一个安全的替代方案可以在两台 Linux 计算机之间建立这种连接: “ssh -X”。然而,在 Linux 计算机上运行的图形程序通常能够连接到另一台计算机的显示器。
因此,在微软 Windows计算机上运行 X server 非常有用。该 X server 允许在不同计算机上运行的程序在微软 Windows计算机上呈现其图形用户界面(GUI)界面。我将提出两个选择: 首先,完整的 Linux 桌面将出现在微软 Windows计算机上。下一步是只展示一个属于 Linux 计算机上运行的计算机程序的窗口。
准备工作
首先,下载并安装vcxsrv 。安装过程与任何微软 Windows应用程序相同。
下一步是找到运行微软 Windows的计算机的 IP 地址: 在命令提示符(Command Prompt)中使用 ipconfig ,如下所示:
> ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . : 192.168.1.11
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.3
下一步是关闭微软 Windows Defender Firewall(Microsoft Windows Defender Firewall)。否则,在 Xillinux 上运行的计算机程序将无法连接到 X server。事实上,即使是 Xillinux 的 ping 也会失败。
显然,关闭 firewall 会使计算机容易受到来自网络的攻击。因此,建议在执行此操作之前考虑计算机网络是否受到外部 firewall 的保护。
转到“Turn Windows Defender Firewall on and off”。
然后关闭防火墙:
firewall 关闭后,验证 Xillinux 电路板是否可以与微软 Windows计算机连接。例如,在 Xillinux上尝试 ping :
root@localhost:~# ping 192.168.1.11 PING 192.168.1.11 (192.168.1.11) 56(84) bytes of data. 64 bytes from 192.168.1.11: icmp_seq=1 ttl=128 time=0.797 ms 64 bytes from 192.168.1.11: icmp_seq=2 ttl=128 time=0.790 ms 64 bytes from 192.168.1.11: icmp_seq=3 ttl=128 time=0.782 ms ^C --- 192.168.1.11 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.782/0.789/0.797/0.033 ms
在微软 Windows上运行 Linux 桌面
要启动 vcxsrv,请单击名为 XLaunch的图标。
在第一个 pop-up 窗口上:
- 选择 One Large 窗口。
- 对于 Display number,选择零。默认值 -1,允许程序选择 server的编号。这可能会导致令人困惑的行为。
在第二个 pop-up 窗口上: 选择“Start no client”。
在第三个 pop-up 窗口上: 选择“disable access control”。这使得可以从 Xillinux 电路板进行连接。
在这三台 pop-up 窗口之后, vcxsrv 又开了一个又大又空的窗口。窗口的一切都是黑色的。
现在我们要用 Xillinux的桌面(desktop)来填充这个大的窗口。在 shell 上的 Xillinux 电路板上键入以下内容:
root@localhost:~# DISPLAY=192.168.1.11:0 /etc/X11/Xsession
执行此命令几秒钟后,图形桌面将出现在微软 Windows计算机上。
也可以使用 ssh 来启动桌面。例如,假设 Xillinux 电路板的 IP 地址是 192.168.1.123。该命令可在命令提示符窗口(Command Prompt window)(微软 Windows计算机上)中使用。
> ssh root@192.168.1.123 "DISPLAY=192.168.1.11:0 /etc/X11/Xsession"
使用 ssh之前需要设置 root user 的密码。
请注意,可以在 vcxsrv的窗口中使用 Copy ,然后在微软 Windows中的常规窗口上使用 Paste 。反之亦然。
“/etc/X11/Xsession”是启动桌面的命令。 “DISPLAY=192.168.1.11:0”为 environment 变量赋值。这告诉程序连接到远程计算机。
DISPLAY 分配由两部分组成。第一部分是 IP 地址(本例中为192.168.1.11 )。第二部分是 Display Number。回想一下,当您启动 vcxsrv时, Display Number 被选择为 0。这就是为什么 DISPLAY 的第二部分是“:0”。这告诉 TCP client 连接到端口 6000。如果我们选择不同的 Display Number,我们需要相应地改变 DISPLAY 。例如,如果 Display Number 为 5,则 DISPLAY 应改为“192.168.1.11:5”。在这种情况下, TCP client 将尝试连接到端口 6005 (port 6005)。
在微软 Windows上打开单个 Linux 窗口
我现在将展示如何在 Xillinux上运行图形计算机程序,以便窗口在微软 Windows计算机上打开。
像以前一样启动 vcxsrv ,但有一点不同: 不要选择“一个大窗口”,而要选择“多个窗口(Windows)”。除了这一点不同之外,其他选择与之前相同。
与之前不同的是,三台 pop-up 窗口之后就不会再开新的窗口了。配置完成后看起来好像什么也没发生。但这是一种误导。 X server 正在运行并正在等待请求。
例如,在 Xillinux上尝试:
root@localhost:~# DISPLAY=192.168.1.11:0 gnome-text-editor &
这将在微软 Windows计算机上启动文本编辑器。也可以启动终端窗口(terminal window):
root@localhost:~# DISPLAY=192.168.1.11:0 lxterminal &
以这种方式打开终端窗口有一个优点: 不再需要添加“DISPLAY=192.168.1.11:0”部分: 这是在此终端(terminal)上启动的所有命令的默认设置。
如前所述,可以通过 ssh发送命令: 在微软 Windows的命令提示符上键入以下命令以启动终端窗口:
> ssh root@192.168.1.123 "DISPLAY=192.168.1.11:0 lxterminal"
与之前一样,此示例假设 Xillinux 电路板的 IP 地址是 192.168.1.123。
不幸的是,似乎没有一种简单的方法可以关闭 X server。当 X server 运行在该模式下时,没有代表程序的窗口。因此,停止 server 的方法是使用 Task Manager: 找到名为“VcXsrv windows xserver”的任务,然后单击“End Task”。