OpenEuler-WSL简单使用
今天早上看到了一篇文章,[华为 openEuler 欧拉操作系统上架微软商店,推出 Win11/Win10 Linux 子系统 WSL 版本](https://www.ithome.com/0/589/658.htm)。之前已经在自己的电脑上尝试过wsl1和wsl2的 ubuntu 和 FedoraRemix 了,由于工作需要还是保留了 FedoraRemix 作为日常的轻量级环境使用,这里我想尝试一下这个OpenEuler试试。本文也是主要来讲述这个经历的,和各位分享,以作学习。
对应的视频为openEuler-WSL开箱试用体验。请配合食用。

一.openEuler和WSL背景
我个人对这个系统也没有太深入的了解,于是顺手点进去看一下。 [OpenEuler](https://www.openeuler.org/zh/) 官网对其做了一些描述:
openEuler是一款开源操作系统。当前openEuler内核源于Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。
嗯,其实还是了解不多,然后我查询了一下,找到了知乎大佬的评论,

嗯,大概有点简单认识了,当然也没必要刻意的贬低openEuler哈。
另外就是WSL,可能很多的朋友没有接触过,他的全名是 `Windows Subsystem For Linux` ,中文叫做`适用于Linux的Windows子系统`,在微软官方的 [页面](https://docs.microsoft.com/zh-cn/windows/wsl/about) 有如下的解释:
适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
嗯,其实可以理解为一个和Windows融合很密切的linux系统,在windows下面使用linux的程序,这个目标其实虚拟机也可做到,但是从易用性上来讲是远远不如的,另外就是虚拟机其实会附带很多的不关注的系统部件,以及归功于微软爸爸的优化,从性能上讲其实差距也很大。wsl的linux一般只是一个精简的系统,在一定程序上和docker可能更类似。(个人理解,详细的比较等可以参考各类评测和文档。)

二.安装和使用
现在我们回到正题,打开 openEuler-WSL 的[windows商店页面](https://www.microsoft.com/store/productId/9NGF0Q0XP03D)。这里提供的是20.03 LTS SP1 的版本,其实还好。
一点吐槽:这个作者展示的屏幕截图的机器名字竟然是 `Apple` 前缀,这个开发者到底是什么人?~手动滑稽~

需要注意的是WSL的安装需要在windows 中设置并打开相应的功能,我自己的机器在之前已经安装过了,因此更多的只展示对应的页面,不会做更多的其他展示。[openEuler的代码仓库](https://gitee.com/openeuler/wsl)和[WSL官方页面](https://docs.microsoft.com/zh-cn/windows/wsl/install)均有相应的介绍,我们按照步骤执行:
系统要求:可以参考微软官方页面,但是通常来说需要windows10的版本,通常的X86的机器一般需要1903以后的版本来运行WSL
步骤 1 - 启用适用于 Linux 的 Windows 子系统
以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell”> 单击右键 >“以管理员身份运行”),然后输入以下命令:
如果只是安装WSL1 ,那么到这里可以直接去安装镜像了,如果需要安装WSL2则还需要继续以下步骤。这里其实也可以直接在图形界面操作,按下 WINDOWS + X 点击菜单中的应用和功能(F) :

在接下来的界面点击右上角的程序和功能 :

不论如何手段其实打开控制面板的这个页面都可以,然后点击启用和关闭Windows功能(这里再次吐槽傻逼微软做了好多年的windows10了都还没能做到UI大一统,现在竟然还想做WIN11了,简直是,科技以换皮为本)

在这个windows功能的页面其实包含了你当前windows 的很多的系统级别的功能选项,这里我们需要勾选适用于Linux 的Windows子系统。这样就达到了以上的命令行想要的效果。
注意:由于各位自己的系统版本不同这里提供的功能也不相同,就例如家庭版就不提供Hyper-V虚拟机功能,这个时候其实得用命令去强行打开。
步骤 2 针对WSL2的一些补充设置
1. 启用虚拟机功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。管理员Powershell模式下使用如下命令启动
而如果使用图形化操作,则同样的,进入到Windows功能页面,勾选虚拟机平台选项即可。

2. 下载并安装 Linux 内核更新包
下载最新包:
[适用于 x64 计算机的 WSL2 Linux 内核更新包](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi)
这个内核包是微软自己针对WSL2构建的,按照WSL2的逻辑其实是基于这个内核去驱动wsl下的各种程序的,具有完全的系统调用兼容性。而WSL 1 使用的是由 WSL 团队构建的转换层。
当然,根据你的架构类型,你可能需要选择不同的内核安装包。
3. 设置WSL2为默认版本
通常的安装之后可能默认版本是WSL1(新版本可能是WSL2),打开Powershell命令行,执行:
有关wsl命令的更多使用,根据版本不同而不同,可以执行`wsl --help`自行查看

步骤 3 安装你想要的WSL发行版
通常情况下,你可以打开自己的Windows应用商店选择你想要的linux发行版,在新版本中如果使用wsl install命令会默认安装ubuntu,通常需要“-d”参数指定发行版,详情可参考帮助命令。
在本次尝试中,我们尝试华为的openEuler,在之前的设置都已经准备好之后点击其[商店链接](https://www.microsoft.com/store/productId/9NGF0Q0XP03D)中的安装即可。
在迅速的进度条走完之后你就成功的安装咯,如果其他的操作都已经成功的进行,这时候你可以进行openEuler的开箱了。安装完成后你应该可以在开始菜单看到它:

三.开箱使用OpenEuler-WSL2
我的系统暂时未被推送Windows11,这里我设置的WSL2,在通常的使用上和WSL并无区别,在windows11上微软引入了wslgui,这个和我们的实现逻辑类似。后续的设置操作在微软官方的文档中也有描述,这里我根据自己平常的使用逻辑进行。
1.开箱(OOBE)和设置用户和密码
点击开始菜单中的openEuler图标,将会启动一个终端操作界面,这个是系统所带的默认终端窗口。保持第一次的仪式感,我们第一次都从这个窗口启动吧。其实,通常情况下你也可以在任何一个能感知到wsl的终端(如powershell自带终端或者Xshell等自己使用的终端和wsl进行交互,使用wsl请参考帮助文档)。

第一次启动的时候系统会执行初始化和部分安装操作,这个操作会将打包好的系统镜像释放,根据电脑性能需要数秒到数分钟不等,基本都挺快的。

接下来就是设置用户名和密码,没有用过Linux的朋友需要注意,终端里面输入密码是不会有输入的变化的,不会用星号(*)进行占位,大家自己要指导自己输入的密码,输入错误了可以狂按backspace。

密码输入完成后就成功执行了初始化了,这里可以看到系统的信息,这个也是你每一次登录后的信息,这里没有做过多其他的设置,你设置的这个用户就是你的默认自动登录的用户,可以通过sudo执行管理员级别命令,详细的权限知识请学习linux。
2.便捷的使用,游离于两个系统之间。
除开直接点击默认的安装程序所带的图标,你还可以通过以下但不限于以下的方式登录,在这个过程中你可以根据你自己的方便选择,在后续的使用中也可以随时的感受不同的操作方式以及和使用虚拟机等模式的不同。
通常,你需要打开你的虚拟机,如果是冷启动,可能需要几十秒到1分钟不等,然后进去图形界面或者终端进行操作,但WSL的冷启动通常也只需要3s以内。(如果虚拟机常驻windows后台且不关机的大佬请略过)另外,如果ssh链接虚拟机也需要设置密钥认证等才能直接进入,否则频繁的密码输入也会很麻烦。
如果你有安装windowsTerminal,你可以使用windowsTerminal登录,只需要直接打开,就能够自动检测到WSL发布版本的存在。当然,windowsTerminal本质上也就是一个美观和强大的终端,和默认终端没有本质上的区别。
但是WSL能做到和Windows紧密的结合,当然有更加方便的的使用方式。首先,由于WSL和windows可以互相访问文件系统(注:WSL2当前版本使用虚拟磁盘管理linux下的ext4文件系统,而WSL1则直接使用windows的文件系统)那么,你的工作目录可能已经存在在windows的文件系统下(当前版本不支持U盘),那么直接到你的目录下打开你的linux吧。

在你所需要的文件夹,按住shift单击鼠标右键,你可以看到在此处打开Linux shell使用此选项,可以直接完成打开linux并定位到你所在的windows目录。如果你安装的有windowsTerminal,直接右键单击在windows终端中打开(注意,这里你需要在windowsTerminal中将你想要的发行版设置未默认打开),也可以直接达到进入linux环境并定位到当前目录。如果没有设置未默认可以直接切换过来,当设置中的启动目录为“父进程目录时”也将直接到达windowsTerminal父进程启动时所在的目录。

这样,你可以直接使用linux下的命令操作windows上的文件,例如:
1. md5sum和sha256sum: 在linux下面默认带有文件校验的程序,可以计算文件的md5,而不需要下载程序进行校验。

2. 你可以使用linux中的vi等编辑器编辑windows上的文件,以及其他更多的使用方式,而不需要复杂的文件移动等操作,某些软件在linux上可能具有与更多的自由,例如understand代码分析和一些开发相关的工具等,至少对于python的部署,肯定是在linux上更加舒服(PS.其实真的必须说到windows10直接在应用商店安装python一样的简单),另外对于一些文件操作,基于linux的文件操作可能在处理很多小文件的情况下更具有优势。(这一点也需要注意微软官方提到的关于WSL1和WSL2在文件IO上的区别并结合自己的使用需求确定)
同样的,对于使用Linux不熟悉的同学自然也可以使用windows来操作linux,由于WSL会自动将windows PATH导入到linux环境,所以其实你可以在linux终端上使用windows中的命令处理linux下的东西。
最简单的我们可以使用explorer.exe启动资源管理器去管理linux下面的文件(打开之后你可直观的看到WSL的文件系统)
这就是新安装的openEuler的家目录:

在这个界面,你可以直接使用windows下的各种软件,可以和windows下的其他可读文件系统进行各种拷贝。无需操心两个系统间的文件系统差异。
3.WSL启动gui
WSL的镜像本身是一个精简的系统,但可以安装各种应用程序,如果程序可本身带有界面,可以考虑如下的办法启动。
1. 如果系统本身是windows11等高版本系统,WSL2本身已经支持了gui,那么直接运行程序即可。
Windows11所使用的WSL版本支持WSLgui和显卡加速,可以运行基于cuda的相关计算程序,具体的请参考微软官方说明,我还没试过。555
2. 如果是基于老版本的WSL或者WSL2,我通常的解决方案是使用MobaXterm启动X 服务,承载WSL上的gui程序,MobaXterm也是一个相当优秀的终端,其实和WindowsTerminal各有千秋,MobaXterm的主要业务其实是支持rdp,ssh,等等各种服务的终端连接的,它自带了X服务,简单易上手。通常建议下载一个免费版本的绿色版本使用,功能完全够用。[MobaXterm Download](https://mobaxterm.mobatek.net/download.htmlhttps://mobaxterm.mobatek.net/download.html)
已经安装有WSL的情况下,同样可以自动识别到已经安装的Linux发行版,如果不能识别也可以手动添加,自动同样一键直连。MobaXterm还自带了系统资源检测,ftp服务,和X服务等,功能相当全面。下图中已经登录OpenEuler,右上角的X服务已经打开。

然后根据你的WSL版本,你需要在~/.bashrc中添加如下的变量(部分发行版开发者会内置,openEuler需要自己写)
你可以使用记事本之类的你方便的东西去添加。添加过后openEuler的.bashrc文件长这样!

然后,装一个带gui的程序吧,例如这里我们选择 xterm ,你可以选择你自己的程序,但是复杂的程序你可能需要安装很多的依赖库,甚至你也可以安装一个完整的图形化桌面环境如GNOME,KDE,MATE和Xface等,甚至在系统兼容的情况下也可以去试试DDE,自己想办法处理好依赖就行。
前文已经说过 OpenEuler 和 CENTOS有很多的共同,基础的软件包管理器自带的是rpm、yum和dnf,还是具有很弄的红帽系列的风味儿的。经过测试,openEuler自带的软件源连接还不错,当然,如果自己想你也可以换源。
安装好之后可以直接启动,xterm本质上就是一个终端,但是作为现有终端的一个gui子程序启动的,是直接在windows下面启动的。

在这个基础上,你可以自己安装你想要的各种GUi程序去运行也可以,通常情况下,实体机器OpenEuler上能运行的程序都可以运行(部分涉及底层硬件等的程序不能运行,因为WSL和docker在某些硬件上可能没有完美的实现实机).
4. openEuler下的简单C++开发环境(Vscode-remote)
直接在终端用vi下开发的请自己查阅相关资料即可,如果在WSL自己安装linux版本的IDE开发的也可以自己安装,当然,一般也没太大必要,在系统轻量化的前提下,这里我们使用windows本版的Vscode远程到WSL下开发,这样可以代码编辑等操作和图形界面的渲染都放在windows下面的code下面,代码也位于windows文件系统下面,linux只需要负责应用程序的构件和运行。
1. 安装各种所需的编译器等
这里暂时先安装以下的软件包。
2. 确保你安装的有windows版本的Vscode,请在安装时允许Code目录添加到windows的PATH变量中,否则你需要手动添加。
如需添加,在开始菜单打字搜索环境变量即可找到设置项。

安装好之后记得安装插件remote-WSL,微软官方出品。

多说一句,官方三件套,remote -SSH 就是给用ssh协议链接虚拟机或者超算等linux环境使用的。Remote - Containers 则是给基于容器的Linux环境使用的,微软爸爸还是爱linux。。。
3. 联网情况下在你的代码所在的路径直接运行windows 版本的vscode。
如果没有网,你可能需要提前手动下载remote-server去你的WSL的家目录下面,这个可以去remote-wsl的官方文档找到。这个比较蠢蛋的一个问题在于每一个Vscode的commit都会要求一个新版本的remote-server,因此没有网路的环境需要自己下载一个和你的windows版本commit对应的remote-server,平常也尽量不升级。在平常的联网的笔记本则不需要操心这个问题。

第一次运行的时候会自动安装remote-server,安装完成后你就可以直接在Windows的Vscode下面编辑你的Linux代码了。

4. 安装linux环境下的必备插件,这里暂时先装一个C++吧。今晚上的网似乎不咋样。其他插件类似,整个使用逻辑其实类似在Linux或者Windows下直接使用的。
5. 如果使用命令行构建自己写命令就行,当然如果要用C++插件来负责这个可以使用task执行。微软官方文档都有写到。
6. 如果使用gdb直接调试那么直接上就行,code下面可以直接打开linux的相同目录下的linux终端,如果使用c++插件调试C++代码,需要设置以下 `launch.json`,这个也可以参考C++插件的文档,应该有简单的设置方式。
7. C++插件至少还是要提供代码的智能感知的嘛,这个我们需要配置下c_cpp_properties.json这个同样可以图形化配置。
这几个点我的其他的视频中可以讲到,没讲到也就敬请期待。

三.总结
上文的安装和使用其实在其他WSL的情况也是适用的,之前我用的fedoraRemix也是相同的玩法,后续大家也可以去研究其他的玩法。
最后,我打算去应用商店给 OpenEuler 评分。以下是我个人使用之后的简单的评价。由于时间有限,也是今天刚开始用,所以很多问题也不清楚,后续大家可以一起使用,给他们提提意见,帮助他们搞得更好嘛。
1.免费,这个很优秀,开箱体验也和其他发行版一样做的不错了,(类比Ubuntu);
2.需要自己手动设置DISPLAY以确保可以在WINDOWS10 下面通过MobaXterm等终端启动图形界面,这个可以放在应用程序包内置。
3.镜像基于centos,对于国内的一些政企开发等都比较友好。
4.支持,加油!
尬

reference:
openEuler : https://www.openeuler.org/zh/
WSL-microsoft:https://docs.microsoft.com/zh-cn/windows/wsl/about
ithome文章:https://www.ithome.com/0/589/658.htm
windows商店下载页面:https://www.microsoft.com/store/productId/9NGF0Q0XP03D
...