感谢
感谢知乎用户 @一米粒 同学帮助我找出了关于WSLg的问题,我一开始忽略了图形化界面对WSL和Windows版本的新要求,现在已经更新了系统要求和检查WSL更新的方法。
感谢某不知名的康同学,她的问题帮助我进一步了解了更新的WSLg内容,明确了现在正式版可用的系统版本,并且找到了相应的安装包。文章中安装图形化界面的部分已经再次修改,并增加了直接下载WSLg安装包安装的方法。
康同学的认真耐心态度值得同志们学习。
写在开头
本教程介绍了基于WSL2的Linux子系统通过Conda安装NCL的方法。
正文内容更新了好多次!但是录视频很尬所以视频一直没更新,请优先阅读文章。
NCL(NCAR Command Language)是由美国国家大气研究中心(NCAR)开发的高级语言,主要适用于气象数据的处理和可视化。NCAR官方已于2019年2月正式宣布转向python。对于现有的NCL语言,不会再有功能更新,但仍长期可用——其安装文件和脚本示例都能在官网进行下载、查看。以下提到的NCL指的是对NCL语言以及NCAR图形工具的统称,和最大多数人所理解的NCL一致,也和官网的文档一致。
写这篇NCL安装教程,是因为Windows是最广泛使用的操作系统,而NCL本身只对Mac OS、Linux提供直接的支持,很多朋友缺乏对Unix-like系统和操作命令的了解。并且,网络上部分教程使用Cygwin或传统虚拟机环境,或使用apt、预编译二进制文件的方法来在Windows下使用NCL都有着不同程度的缺点:Cygwin和传统虚拟机环境占用空间大,有时安装麻烦,非Hyper-V支持的话还会和许多系统虚拟化软件造成冲突、难以共存linux环境变量,且NCL最后一个功能版本6.6.2官方已经放弃Cygwin支持;在Linux环境下使用apt或预编译文件安装NCL会导致各种奇怪的bug,例如apt安装的NCL版本无法使用默认的填色绘图。至于官方的NCL安装教程我觉得对于初学者远不够详细,至少我把网址丢给同学以后再一点一点地指导他们做,远不如我帮他们装一遍来得方便;官方对教程的更新也不及时(其实就是已经不更新了),对Windows的教程并不完善并且没有直接在Windows的教程里指导使用Conda,其实已经并非最方便的安装方法;而Windows下的Linux子系统已经随着更新变得越来越易用,也支持了x11图形界面和图形驱动,逐渐成为Windows下使用NCL,或者说使用任何Linux常用发行版的首选。
基于以上原因,使用基于WSL2的Linux子系统通过Conda安装NCL,可能是Windows平台下最佳的NCL安装方法。WSL2基于Hyper-V虚拟化,运行效率高,且不会与Windows冲突,而虚拟化在未来Windows11的新特性和安全上将扮演不可或缺的角色,服从Windows官方最新的虚拟化标准是极其重要的;通过Conda安装NCL,是官方最推荐的方法,也是我各种尝试以后最稳定且简单的安装方法。
本文的操作并不涉及很多Linux命令,只有少数现成的;但是在操作NCL软件之前,用户应该对Linux命令有初步的了解,例如ls cd cp mv等等命令。具体可以百度“Linux常用命令”并自己练习。熟悉Linux操作几乎是操作NCL所必须的。这对本文中的安装内容也有帮助。
配置要求
微软官方对WSL2的硬件要求为:Windows10版本号大于等于2004或Windows11(查看方式设置-系统-关于-版本号)、64位处理器带二级地址翻译(SLAT),4GB系统内存、BIOS支持系统级别的虚拟化。理论上更旧的版本也可以运行,但如果需要在Linux中使用图形化界面(WSLg),则需要Windows10 21H2 21362及以后的版本(21362至今为止仍是win10预览版,并非21H2的正式版,如果win10没有继续更新,则需要升级至Windows11来使用WSLg。总之,以版本号大于21362来作为判断标准)。
满足了WSL2的配置,那么其他软件的要求也全部满足。以上配置如果看不懂并不需要特别在意,无脑的(大概率)判断方法为:只要你的电脑买来就是win10的(不是旧版本win7win8升上来的),并且最近一年来有进行过系统更新或者说系统没提醒你激活要过期的(最低要求的2004非企业、教育版都已经过期了,只要没过期都是达标的),都可以安装。如果需要使用WSLg,则需要特别留意版本,低于21H2 21362的话应主动更新至Windows11(仅建议八代Intel以及受支持的AMD Ryzen更新)。
环境配置
首先配置运行NCL的环境:基于WSL2的Linux子系统、系统中安装Conda。
BIOS开启虚拟化
先确认自己电脑支持虚拟化,请自行通过电脑型号善用搜索引擎。还是上面那句话,近两三年市面上绝大多数电脑都支持虚拟化,你的电脑99%支持。
确认支持后,再自己的电脑有没有开启虚拟化:打开任务管理器,点击性能选项卡-CPU-右下方虚拟化
已启用则直接进行下一步“为电脑安装WSL2”。
各机型进入BIOS方法各不相同,具体请搜索“电脑机型+BIOS”,例如:
进入后界面也不相同,找到虚拟化相关的选项开启,Intel平台多为“Intel Virtual Technology”,少部分机型如戴尔什么的也会叫“Intel Virtualization Technology”,AMD 平台叫做“SVM Support”,具体也可以搜索“电脑机型+开启虚拟化”。开启后记得保存并重启(一般是F10)。
为电脑安装WSL2
WSL2是一个在Windows下运行的Linux系统框架,可以运行主流Linux系统,这里以默认的Ubuntu系统为例。
安装WSL2的框架总而言之就是做一件事:确认Windows开启了Hyper-V、适用于Linux的Windows子系统、虚拟机平台三个功能。
方法:在“启用和关闭Windows功能”页面确认以上三项打开,如果某一项没有,则需要手动安装。
如果其中某一项没有,则应单独进行安装;全部勾选后确定,若提示重启则重启。
(安装适用于Linux的Windows子系统(WSL)的命令为:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
家庭版需要先使用命令安装Hyper-V,再使用命令安装WSL。具体方法可以看我之前文章:中的“添加Hyper-V(家庭版)”到“安装WSL子系统”这部分。这篇文章中所指导的安装WSL2环境是更加麻烦但是更保险、更完整的方法)
Windows10环境下Docker安装、改变镜像存储路径并配置WRF的方法 - 刘芦苇杆子的文章 - 知乎
三项功能确认打开以后,到微软商店搜索Ubuntu(或者其他受支持的Linux发行版)点击安装。
WSL2、Ubuntu安装成功后,开始菜单出现Ubuntu图标。
进入PowerShell(Windows Terminal打开默认就是)输入以下命令检查更新WSL
wsl --update
点击Ubuntu图标可以直接启动Ubuntu。第一次启动Ubuntu,需要创建管理员账号和密码。按屏幕顺序输入用户名和密码。需要注意的是,用户名只能小写,第一次创建的用户名有管理员权限,建议名字上体现出root来以免弄错,例如:reedrod_root。密码用一个好记的,毕竟子系统的账户密码不一定常用,后面忘了就麻烦。
提示成功以后关闭窗口,此时打开Windows Terminal,点击标签页右边的小箭头,此时会出现Ubuntu的选项,说明Ubuntu已经配置成功
在Linux子系统中安装NCL
在Windows中进入Linux子系统,可以点击Ubuntu图标、可以在终端命令行输入bash、可以使用Windows Terminal进入,这里介绍第三种方法。
打开Windows Terminal,从标签页下拉中选择Ubuntu。Windows Terminal适合本地终端,且具有完善的配色方案,是未来Windows的默认终端工具。
现在安装、更新一些必要软件。
更换镜像源
这一步可做可不做,目的是将官方服务器切换为速度更快的服务器。主流国内镜像源有清华、中科大、阿里云、网易等。具体操作可以自行搜索。
更新软件源列表。这一步也不是很重要,目的是和镜像源比对软件版本,让系统知道哪些软件需要更新,相当于刷新应用商店的更新列表,但还没有点击更新。sudo apt-get update
更新软件
sudo apt-get dist-upgrade
这里更新的apt管理的软件,相当于我们在Ubuntu自带的“应用商店”更新了应用,这一步并不是很重要,因为我们主要使用的是另一个“应用商店”——Conda,这是因为apt的NCL包好像库总有些缺失,导致默认的填色图画不了,官方也不建议我们使用apt安装NCL。
安装Conda
Conda是一个软件环境管理系统,它主要适用于python,也同样支持其他语言,上面类比apt时说像应用商店,但Conda实则更像一个分门别类的大商场。Apt把所有的软件放在同一个房间销售,当软件要求独特的环境时,如果配置不好,就会产生冲突;而Conda则面对不同的条件配置了不同的房间,要使用NCL时可以切换到NCL的房间常用linux系统,里面的环境是为了NCL专门配置的,避免了冲突。Conda在Linux、Windows、Mac上都可用,而NCL官方直接支持Linux和Mac端的Conda,Conda上的Ncl环境是bug最少的环境,通过Conda安装NCL也是官方最推荐使用的方法。根据NCL官方建议,本文采用MiniConda安装,主流的Annaconda同样可用,但是AnnaConda中所附带的常用包并非NCL常用,而MiniConda则是精简版,使用上没有任何区别。
在Conda官网找到Linux平台下的最新下载链接,python版本选择默认。
安装方式为使用wget命令下载安装脚本,再运行脚本安装Conda。下载脚本同样可以在Windows下载,放到相应目录中即可使用sh命令安装
例如(记得修改路径):
sh /mnt/c/users/***/Downloads/Miniconda3-latest-Linux-x86_64.sh
安装过程中会遇到各种询问,由于是新的系统,一路yes过去就行,这样安装完成的Conda是默认开机自启动的。如果是系统本身有安装其他软件需要用到环境变量时,需要注意Conda有没有将已有的环境变量修改。
安装完成之后注意不能直接使用,需要手动更新环境变量,因为Conda写入的环境变量并未应用。命令为
source ~/.bashrc
如果没有自动进入ncl环境,应当手动刷新环境变量(我没有明确遇到这个问题,所以都刷新一遍总没问题吧)
source ~/.profile
source /etc/profile
如果仍然不行,可能是因为Conda安装过程中没有写入环境变量,B站用户@小小闪电皮卡丘发现华为电脑的电脑管家可能会导致这个问题。出现该问题则需要手动写入Conda环境变量,请自行搜索编辑Linux下Conda环境变量的方法。环境变量如果正常,会自动启动Conda,启动后命令行的开头出现(base)说明conda正常使用。
下面开始在Conda下创建Ncl环境。相当于NCL官方在Conda的服务器上列了一个表格,告诉用户的电脑安装NCL需要安装哪些包或者库。系统从Conda服务器上获取表格后,为NCL单独创建一个房间,为它配置好所有的环境,并将NCL搬进房间。默认的服务器如果比较慢,同样可以对Conda的镜像源进行换源,国内有清华、北京外国语等镜像源可用,具体换源方法自行百度。
使用命令:
conda create -n ncl_stable -c conda-forge ncl
安装,同时自己为这个“房间”命名,这里就用官方示例中的ncl_stable
启动Conda
NCL安装完成后,(自动进入Ncl环境)linux 虚拟软件,可以看到此时命令行前的括号已经从(base)变为了自己刚刚命名的Ncl环境,这里为ncl_stable,说明当前环境是Ncl环境。第二次启动时,conda是开机自启的,默认在base环境下,需要使用Conda activate命令切换至Ncl环境。
确认x图形可用
21H2 21362之后的Windows10预览版以及Windows11支持WSLg,即可以在子系统中运行图形化窗口,这一步有助于提升体验,但并非必要。
首先确认系统版本(查看方式设置-系统-关于-版本号),应大于21362,之后在PowerShell(管理员)中输入
更新时理论上自动安装WSLg,可以在PowerShell下使用
或者
可以看到WSLg的版本信息则说明安装成功(版本号不重要)。
如果没有则可以尝试手动下载安装包,官方GitHub地址为
/microsoft/wslg/releases
这里找到最近的Latest Release下载就好了,比如我看到的最新版本是1.0.26,就下载这里面的wsl_graphics_support_x64.msi
下载完成后双击安装,和exe安装包同理。我还没有合适的电脑给我当小白鼠所以安装过程我暂时没有,也不知道要不要重启,总之安装完以后再次查看WSLg有没有安装成功。如果有显示WSLg版本号了,那么继续往下。
在Ubuntu环境中运行
如果展示出时钟图像,则说明x图形化界面可以使用;全新安装WSL没有附带x11linux 虚拟软件,故不会展示xclock图像,会提示安装软件或报错,按照传回命令
安装相应软件后就可以直接运行,运行成功会展示时钟图像,关闭即可。
如果安装x图形仍然出现问题,更新显卡驱动可能可以解决(我暂时没机会试)可以参考微软官方的文档中关于安装驱动程序的部分:
/zh-cn/windows/wsl/tutorials/gui-apps
官方已经更新要求系统Windows11以上了,可能是新功能或者兼容性需要吧。但是GitHub至我最后一次编辑文章为止,要求一直保持21362这个版本号,我认为应该以这个为准。
接下来测试官方的NCL示例脚本
如果出现图片窗口,且命令行输出数据,则说明x11和ncl都可用。
最后说明
如果x11始终用不了也不用担心,这个并不是必要操作。直接把生成的图片保存为文件再查看也完全ok,仅仅是效率稍低一些。
无法使用x11图形是无法使用上述示例脚本的,应该用官方的第二条脚本:
ncl $NCARG_ROOT/lib/ncarg/nclex/nug/NUG_multi_timeseries.ncl
这个脚本会在当前目录下生成一个png格式的图片,在挂载的Windows目录下(例如/mnt/c是C盘根目录)运行该脚本后,就可以在Windows系统对应目录下查看到这个图片
举个例子,比如要在D盘的NCLData文件夹下生成上面这个测试图片,那么我应该在WSL中这样操作:
首先再次确认conda开启,处于ncl_stable环境而非base环境,然后切换到对应目录下
再使用刚刚的脚本
ncl $NCARG_ROOT/lib/ncarg/nclex/nug/NUG_multi_timeseries.ncl
运行正常时如图弹出NCL的声明,不报错
此时输入
ls
可以看到当前目录下有一个NUG_multi_timeseries.png文件
说明已经成功,此时在Windows下“此电脑-D:/NCLData”找到并打开文件即可。
最后最后再次感谢@一米粒同学和康同学!