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