本文根据 Xillinux (xillybus)官方的子网站 www.01signal.com 中的内容整理而来,如对原始内容感兴趣的可访问下列链接进行查看 01signal: 在 Windows 计算机上使用 Linux desktop
也感谢xillybus 官方对原始内容的梳理, 本文仅在上述内容中对文中部分翻译内容做了调整,以便更好的理解。
介绍
在 Linux 计算机上,图形软件是可以在另一台计算机上打开窗口(window)并显示 。换句话说,该计算机上运行的软件(例如 Google Chrome)也可以在另一台计算机上显示并运行,也就是该软件的操作者实际是坐在另一台计算机前对软件进行操作的。 Windows 也有类似的解决方案,但这些解决方案通常在体验上比较糟糕。 相较Windows 来说,Linux 更适合远程工作。
此功能并不经常使用,因为人们通常在自己的计算机或笔记本电脑上工作。但当计算机没有连接显示器时,此功能可能会很有用。
本教程将介绍如何在 Xillinux 系统上运行图形软件,并让软件在远程Windows 计算机上进行显示和控制(使用Windows 电脑的鼠标和键盘进行控制 )。
X server
Linux 桌面 的基础是 X-windows。这是一个非常古老的软件,但至今仍然运行良好。与 Windows 计算机不同,图形界面基于 X server服务器。这是一个实现 TCP/IP server的常规计算机程序(在用户空间中运行)。该服务器通常监听 port 6000。任何想要在计算机屏幕上显示窗口(window)的程序都通过 TCP/IP连接到该服务器。所有图形信息均通过此 TCP/IP 连接发送。用户的键盘敲击和鼠标移动也通过该连接传输。
控制窗口显示的程序可以在同一台计算机上运行,也可以在不同的计算机上运行。这并不重要,因为连接是基于 TCP/IP的。
在当今的大多数 Linux 计算机上,无法直接从另一台计算机通过 TCP/IP 直接连接到 X server 。出于安全考虑,此功能已关闭。此外,还有一个安全的替代方案可以在两台 Linux 计算机之间建立这种连接: “ssh -X”。然而,在 Linux 计算机上运行的图形程序通常能够连接到另一台计算机的显示器。
因此,在 Windows 计算机上运行 X server 非常有用。该 X server 允许在不同计算机上运行的程序在 Windows 计算机上呈现其 GUI 界面。
本文将介绍两种方式:一、在 Windows计算机上打开并显示完整的 Linux 桌面。二、在 Windows计算机上打开并显示单个Linux 的软件窗口。
一、准备工作
1)下载并安装 vcxsrv 。安装过程与任何 Windows 应用程序相同(按默认参数安装即可)。
https://sourceforge.net/projects/vcxsrv/
2)查看当前windows 系统的IP 地址 : 在 CMD命令行窗口中使用 ipconfig命令查看 ( 如下图所示,本机当前IP是192.168.1.111)。
3) 下一步是关闭 Windows 防火墙。否则,在 Xillinux 上运行的计算机程序将无法连接到 X server。事实上,即使用Xillinux ping 也会失败。
值得注意的是:关闭防火墙会使计算机容易受到来自网络的攻击。因此,建议在执行此操作之前考虑计算机网络是否受到外部防火墙的保护。
在控制面版里找到防火墙设置的页面 关闭windows 自带的防火墙(如果安装了 第三方防火墙,也请先关闭)
4) 防火墙关闭后,验证 主板上运行的 Xillinux系统 是否可以与 Windows 计算机连接。
例如,在 Xillinux上尝试 ping windows 电脑 (第一步中查询得到的windows IP地址)。
ping 192.168.1.111
二、在 Windows计算机上打开并显示完整的 Linux 桌面
1 )启动刚才我们安装的 vcxsrv,请单击名为 XLaunch的图标。
2 )在软件第一个窗口上:
- 选择 One Large Window。
- 对于 Display number,修改成0 (原先默认值 -1),允许程序选择 server的编号。这可能会导致令人困惑的行为。
3)在第二个软件窗口界面上: 选择“Start no client”。
4)在第三个窗口界面上: 选择“disable access control”。这使vcxsrv软件允许Xillinux 主板进行远程连接。
5) 之后点选完成
6)完成上述操作后 vcxsrv 会打开一个又大又空的窗口。窗口中的一切都是黑色的(没有显示任何内容)。
7)现在我们要用 Xillinux的 桌面来填充这个大的窗口 。在Xillinux 主板的终端命令行中键入以下内容(可以使用putty 连接串口方式)(备注 192.168.1.111是之前查询的本地Windows 主机的IP地址,请根据实际情况调整)
DISPLAY=192.168.1.111:0 /etc/X11/Xsession
执行此命令几秒钟后,Xillinux的图形桌面将出现在 Windows 计算机上(并且整个xillinux 系统都是可以通过windows 电脑的鼠标和键盘进行操控的)。
备注:除了用putty 控制串口来启动远程桌面外,我们也可以使用 ssh 来启动远程桌面。例如,假设 Xillinux 主板的 IP地址是 192.168.1.113,Windows 系统的IP地址是192.168.1.111。则在Windows 系统的CMD命令行中输入下列命令:
使用 ssh之前需要先设置 root 用户的密码,具体参考Xillinux 章节九 通过 SSH 远程登录 Xillinux
ssh root@192.168.1.113 "DISPLAY=192.168.1.111:0 /etc/X11/Xsession"
“/etc/X11/Xsession”是启动 desktop的命令。 “DISPLAY=192.168.1.111:0”为 environment variable赋值。这告诉程序连接到远程计算机。
DISPLAY 分配由两部分组成。第一部分是 IP 地址(本例中为192.168.1.111 )。第二部分是 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 的软件窗口
除了在Windows上打开并显示完整的Linux 桌面之外,我们还可以单独在Windows上打开并显示单个Linux 的软件窗口。
1)像之前一样启动 vcxsrv ,但有一点不同: 不要选择 One Large Window,而是选择 Multiple Windows。除了这个差异之外,其余的设置和之前相同(记得在第三个窗口界面上: 勾选“disable access control”)。
2)与之前不同的是,当我们点了最后一步的完成后,系统没有弹出一个很大的黑色窗口,而是看起来像是什么都没发生一样,但这其实是一种假象,X server正在后台运行,并等待请求中。
3)接下来我们尝试在Windows 上远程打开并显示Xillinux 上的一些软件界面
我们尝试在 Xillinux上输入下列命令来打文本编辑器(gnome-text-editor) 并在远程Windows上显示
DISPLAY=192.168.1.111:0 gnome-text-editor &
之后 Windows 计算机将会出现一个文本编辑器(文本编辑器其实是运行在Xillinux 系统中的,可以理解为被远程映射显示在了Windows 系统中,并可以由Windows 的鼠标键盘进行操作)。
也可以通过下列命令远程启动并显示 Xillinux 的命令行终端
DISPLAY=192.168.1.111:0 lxterminal &
以这种方式打开Xillinux 命令行终端的一个优点: 如果我们再需要以上述方式显示任何软件界面,就不再需要添加“DISPLAY=192.168.1.111:0”部分: 这是在此命令行终端上启动的所有命令的默认设置。例,如果我们需要再次打开一个文本编辑器我们就直接输入 gnome-text-editor & 即可 而不用输入DISPLAY=192.168.1.111:0 gnome-text-editor & 了
备注:和之前操作一样我们也可以通过 ssh发送命令: 在 Windows的CMD上键入以下命令以启动 Xillinux的命令行终端界面:(此示例假设 Xillinux 主板的 IP address 是 192.168.1.113 Windows 主机的IP 地址是 192.168.1.111)
ssh root@192.168.1.113 DISPLAY=192.168.1.111:0 lxterminal"
关闭X server
不幸的是,当X server 运行在Multiple Windows模式下时,似乎没有一种直观的方法可以关闭 X server(关闭的文本编辑器和命令行终端仅是其中的一个窗口,而X server 一直在后台运行并等待请求中,没有一个实体的界面)因此,停止服务的方法就是在任务管理器中找到VcXsrv 任务,并右键结束任务。
写在后面
本文提供了一种全新的思路,让原本只能在HDMI显示器上显示的Xillinux图形桌面,以及只能通过连接主板的USB鼠标键盘操作的Xillinux 应用, 可以以一种全新的方式在远端Windows 上进行显示,操作和控制。
这种方式除了让Xillinux 的桌面运行条件大大降低外(原本需要HDMI显示器才能显示桌面),也让类似Smart Zynq SL 这种硬件上没有USB接口的设备也能体验Xillinux 图形桌面的魅力(原本没有USB键鼠就无法对图形桌面进行控制了)。