Windows启用WSL,并在WSL Ubuntu中使用gnuplot

Windows启用WSL,并在WSL Ubuntu中使用gnuplot

  • 起因
  • 步骤
    • 1. 启用WSL,安装Ubuntu 20.04LTS和Windows Terminal
    • 2. Ubuntu与Windows Terminal设置
      • 2.1. Ubuntu apt source 替换为清华tuna源
      • 2.2. Windows Terminal 默认窗口设置
    • 3. 安装和运行gnuplot
      • 3.1. 安装gnuplot
      • 3.2. 安装`XMing`,以显示gnuplot的绘图结果
      • 3.3. 解决`gnuplot: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory`的问题
  • 结果
  • 参考

起因

因写论文需要用gnuplot画图,之前一直用的MacBook Pro,这两天因电池问题送修,只能硬着头皮在Windows上用gnuplot。
在官网上下载并安装了gnuplot Windows-mingw版本后,发现使用我之前的代码画出的图和以前非常不一样,类似下图:
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第1张图片
正常的图应该类似:
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第2张图片
正好看到最近Windows发布了Windows Subsystem for Linux(WSL) Ubuntu 20.04LTS和Windows Terminal的预览版,正好一起尝尝鲜。

步骤

1. 启用WSL,安装Ubuntu 20.04LTS和Windows Terminal

控制面板\所有控制面板项\程序和功能中打开适用于Linux的Windows子系统,等待安装完毕后重启电脑。
如图:
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第3张图片
接下来,安装Ubuntu 20.04 LTS和Windows Terminal都可以在微软商店中很方便的完成。
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第4张图片
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第5张图片

2. Ubuntu与Windows Terminal设置

2.1. Ubuntu apt source 替换为清华tuna源

管理员权限打开sources.list

sudo vim /etc/apt/sources.list

将其内容替换为以下内容:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

最后更新一下apt的缓存

sudo apt update

2.2. Windows Terminal 默认窗口设置

默认的Windows Terminal打开的是PowerShell的窗口,如下图:
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第6张图片
我们想让他默认打开WSL Ubuntu的bash,可以点击标签页右侧向下箭头并选择设置(也可使用快捷键Crtl+,),将其中defaultProfile后面的一串字符(uuid)修改为对应WSL的guid(就在设置文件里可查到),即可默认打开Bash。

3. 安装和运行gnuplot

3.1. 安装gnuplot

使用

sudo apt install gnuplot

即可。

3.2. 安装XMing,以显示gnuplot的绘图结果

gnuplot在绘图完毕之后会弹出一个窗口,里面是绘制好的图像。
但是使用WSL的时候是没有图形化界面的,只有命令行界面,此时使用gnuplot的结果就无法显示出来。那么怎么办呢?
此时就需要使用XMing这个神器,托管在sourceforge上:Xming X Server for Windows官网。
下载安装一条龙之后,在WSL中设置一下再启动gnuplot就可以了:

export DISPLAY=:0.0
gnuplot

3.3. 解决gnuplot: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory的问题

apt安装好gnuplot后,直接敲击gnuplot尝试打开,但是WSL提示我gnuplot: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
凭借多年和Linux斗智斗勇的经验,我觉得可能是libQt没有安装好。故先去共享库存放地址/usr/lib下寻找

find /usr/lib -name libQt*

发现libQt5Core.so.5明明就已经安装了!路径就在/usr/lib/x86_64-linux-gnu/libQt5Core.so.5下,这就很奇怪了,为什么运行的时候还是提示不行呢?
无奈只得继续寻找解决方法。很快,在SuperUser上找到了答案,大概就是WSL的兼容性一般,相对完整的Linux内核可能缺失了系统调用renameat2()导致的虽然libQt5Core.so.5存在,但是在gnuplot程序运行时系统在寻找动态链接库的时候将这个.so忽略掉了,在GitHub上有[相关讨论]2。
总之,使用以下命令即可:

sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5

如果提示没有strip这个工具的话,需要安装binutils工具链

sudo apt install binutils

就可以顺利打开gnuplot了

结果

使用WSL中的gnuplotXMing,同样的代码就可以和原来一样plot出来,如下图:
Windows启用WSL,并在WSL Ubuntu中使用gnuplot_第7张图片

参考

如何优雅地使用Windows学术

你可能感兴趣的:(Windows启用WSL,并在WSL Ubuntu中使用gnuplot)