之前看过 @pika02 在公 的帖子【Gaussian 16 在虚拟机和WSL中的相对效率】[1],测试发现 g16 在 WSL 下的效率超过了配置很麻烦的 VBox 和 VMWare,与原生 Linux 相比只损失了 ~10%。这对于笔者这种经常在本地运行一些懒得提交超算的小任务的人来说简直是福音。另外,在开发方面,随着 VS Code 的 Remote 功能的完善,使用 VS Code + WSL 可以带来十分丝滑的开发体验。完善的 GNU 工具链也可以让人脱离各种闭源商业软件的魔爪。
笔者之前一直使用 VBox,这次借着换电脑的机会,决定将工作迁移到 WSL 上。关于 WSL 的安装, 上教程很多了,这里对于普通的步骤就只粗略讲一下,重点强调一些踩过的坑,以及个人使用比较顺手的工具/配置。
笔者秉持 GNU 精神,在主要功能相似时,优先选择开源免费的软件
安装WSL
首先管理员身份开终端,启用 WSL:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
重启之后在 Microsoft Store 搜索下载 Ubuntu,笔者安装的是 20.04 LTS 版本。
下完之后在开始菜单的程序列表里找到 Ubuntu,运行,完成安装和用户设置。
安装和配置终端 – cmder
虽然 Windows Terminal 非常惊艳,但是其自定义的空间还是不够大,而且透明效果做得不好,所以笔者还是选择了一直使用的 cmder。直接去官 [2]下载即可。下载之后,进入设置,在 Startup–Tasks 下选择WSL:bash即可运行 WSL 终端。但是使用过程中发现 vim 出现各种问题,具体来说包括方向键失灵、保存退出后直接刷掉整个缓存区等等搜了半天发现是 conemu 的兼容性问题导致的。解决方法是用 WSL 的 bash.exe代替 cmder 自带的启动命令。如图,在 Command 框里输入如下命令即可。
%windir%system32bash.exe ~ -cur_console:p5
在 Task parameters 里面可以替换 .ico 图标,这样子在任务栏里就可以显示出 Ubuntu 的 logo 了(如果你也看腻了 cmder 自带的 λ 图标)。
最后,按照自己的喜好配置透明度、配色方案、字体、背景等等即可。笔者的配置是:
Font: Consolas bold
Color scheme: Babun
Active window transparency: 75
Inactive window transparency: 50
效果如图,可以直接叠在浏览器或者 Zoom 上面:
为了方便使用,可以将 cmder.exe 的路径添加到环境变量PATH,这样就可以 win+R 输入 cmder 直接打开终端。
安装 X Server – VcXsrv
由于 WSL 不自带图形界面,所以要通过 X forwarding 转发到 Win10 内来查看图形界面。笔者使用的是开源免费的 VcXsrv[3]。安装好后运行 Xlaunch,前两步配置直接回车使用默认配置,第三步把 Native opengl 关掉(以免影响 vtk、qt 等图形库的使用),即可开始运行 X Server。
在 WSL 这边:打开终端,修改DISPLAY 环境变量。可以把放到你的~/.bashrc里:
export DISPLAY=localhost:0
然后就可以快乐地使用图形界面辽~ 这样配置好之后感觉 XManager 全家桶完全是抢劫。
安装桌面环境
由于可以 X forwarding,所以 WSL 也可以用桌面了。这里笔者因为主要的工作环境还是 Win10,觉得没必要费力 tweak WSL 桌面,而且不想占太多硬盘,所以选择了以前树莓派上用过的 xfce4 组件。执行如下命令即可安装:
sudo apt update
sudo apt install -y xfce4
由于桌面的图形界面是默认全屏,如果采用 VcXsrv 的默认配置就会直接叠在 Win10 桌面上,把任务栏都覆盖掉,影响使用。如果工作时要频繁切回 win10,推荐另开启第二个 Xlaunch,第一步里选择 One large window,然后在准备开启桌面的终端里运行export DISPLAY=localhost:1,把桌面转发到开启的第二个 X Server。
然后即可运行startxfce4开启 WSL 桌面了。需注意,在 WSL 桌面里开启的终端也要设置export DISPLAY=localhost:1,才能将 GUI 的应用开启在 WSL 桌面这个窗口内,否则会另开一个 Win10 下的 VcXsrv 窗口。最终效果如下:
如果在 WSL 桌面里工作更多的话,可以把主要用的跨平台软件(尤其是 Linux 下体验更好的,比如 VESTA、POV-Ray)都装到 WSL 下,不在 Win 下再装一遍了。
如果想要沉浸式体验,就 VcXsrv 开全屏,实测延迟比微软的远程桌面低很多,系统占用也低。缺点是似乎长期挂机有几率 session 挂掉,要手动重启。另外,快捷键会和 Win10 冲突,需要自定义一下常用的快捷键。
如果觉得极简桌面不过瘾,想要更加原汁原味的体验,可以选择原生 Ubuntu 桌面 或者 Gnome,安装方法是相似的。
浏览器设置
需要注意,WSL1 不支持目前的几个主流浏览器联 (firefox、chromium)。笔者找到的能使的只有比较非主流的 basilisk、palemoon、seamonkey。这里笔者选择 seamonkey:
cat <<EOF | sudo tee /etc/apt/sources.list.d/mozilla.list
deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main
EOF
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2667CA5C
sudo apt-get update
sudo apt-get install seamonkey-mozilla-build
安装好后运行seamonkey即可。界面很简陋,用起来有点儿卡顿,但总算能上 了:
不顺手的话可以干脆放弃在 WSL 下看 页,把浏览器的默认命令修改成 Win10 里的浏览器路径,类似下图:
这样的话,WSL 桌面里点开浏览器会直接跳回你设置的 Win10 下的浏览器。
文件路径
WSL 安装在你的系统盘里,其根目录路径是:
C:Users用户名AppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalStaterootfs
可以把它登记到书签栏,方便跳转。在 windows explorer 里打开,窗口间直接拖动文件即可完成 WSL 与 Win10 间的传输。
在 WSL 下访问 Win10 的文件需要通过 /mnt/,为了方便访问,可以通过ln -s命令创建一个软链接。File Manager 里也可以开两个窗口(一个Win,一个WSL)拖拽传文件。可惜是不能像虚拟机一样从Win Explorer 直接往 Linux 桌面里拖了。
连接服务器
主要的计算任务当然还是交到服务器上的。WSL 自带 SSH,就不需要像以前一样再配置 PuTTY 之类的了。为了不用每次输密码,首先生成本机的 key:
ssh-keygen -t rsa
然后把公钥登录到服务器上:
ssh-copy-id [username]@[server.ip]
还想继续省力气,可以在 ~/.ssh/config 里设置服务器的信息,这样就不用每次输一遍用户名和地址了。设置完之后,可以直接ssh -X [Host]进行连接(X 表示开启 X forwarding)。scp 传输文件也会更方便。
如果更习惯图形界面管理文件的话,推荐开源免费的 WinSCP[4]或 FileZilla[5]。
VS Code – Remote WSL
装过 WSL 之后开 VS Code 应该会提示安装这个插件,没有提示的话就手动搜索安装
在 Win10 下可以点击左下角开启 Remote,类似 Remote SSH,左下角变绿表示成功连接。
安装 Open MPI
首先,如果程序没有特殊要求,强烈建议安装最新版本,充分利用你的硬件(尤其当你用的是较新款的 CPU):
sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev
如果有特殊要求,那就去 OpenMPI 官 [6]下载特定版本,解压后进去运行以下命令安装。注意要提供 prefix 路径否则会覆盖系统里的 OpenMPI。
./configure --prefix=/xxx/ --disable-builtin-atomics
make all install
由于安全原因,WSL ubuntu 的
/proc/sys/kernel/yama/ptrace_scope默认值为 1,这导致并行时进程之间共享内存出现问题,运行 OpenMPI 程序会出现类似如下 错:
3 more processes have sent help message help-btl-vader.txt / cma-permission-denied
WARNING: Linux kernel CMA support was requested via the
btl_vader_single_copy_mechanism MCA variable, but CMA support is
not available due to restrictive ptrace settings.
对于小任务影响不大,但是对于内存需求大的任务,内存共享不通畅会导致总占用爆炸。此问题的解决方法是把 ptrace_scope 的值改为 0:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
(持续更新,未完待续)
参考
1.Gaussian 16 在虚拟机和WSL中的相对效率
http://bbs.keinsci.com/thread-16405-1- 1.html
2.Cmder https://cmder.net/
3.VcXsrc https://sourceforge.net/projects/vcxsrv/
4.WinSCP https://winscp.net/eng/docs/introduction
5.FileZilla https://filezilla-project.org/download.php
6.OpenMPI https://www.open-mpi.org/software/ompi/v4.0/
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!