打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WSL使用心得
userphoto

2023.05.12 湖北

关注

# 先说重点

Windows Subsystem for Linux (WSL)是Windows提供的Linux虚拟机。我用了四年多,踩过一些坑,总体体验良好。

我的日常工作主要使用OCaml语言相关工具,也在WSL里编译LLVM/Clang、z3等项目,运行Linux平台的工具比如texlive、博客(Ruby、Rust),管理实验室的server,出于好奇跑过pytorch和CUDA。WSL可以在十分钟之内编译Clang(优化后不到五分钟)。

WSL虚拟机磁盘镜像保存在Windows本地的某个vhdx文件里。WSL提供Windows本地文件和虚拟机实例内的文件实时互相访问:虚拟机内通过路径/mnt/<driver>访问Windows本地文件,Windows本地通过路径\\wsl.localhost\Ubuntu访问虚拟机内的文件。

我主要使用VSCode的Remote Development插件,通过ssh,在虚拟机内访问本地文件。(坑)目前的WSL架构下(WSL2),跨OS的文件互相访问有IO瓶颈。我的日常项目没有太多IO操作所以影响不大。如果要编译大型项目,或者有操作会在当前目录安装大量文件,请将项目目录置于虚拟机本地路径。WSL的虚拟机的$PATH继承了Windows本地的环境变量,你也可以在虚拟机内运行Windows本地程序。

总之,WSL提供了一种“不在Windows原生环境下”进行开发的方法,是一个还不错的虚拟机。除了一些坑,当下缺点主要在于WSL基于一个微软定制的Linux kernel。kernel相关的工具或者需要额外的操作、或者尚未支持。

最近遇到的两个坑,

WSL默认给虚拟机分配一半的物理内存。可以通过修改C:\Users\<id>\.wslconfig来分配更多内存。详见: <https://learn.microsoft.com/en-us/windows/wsl/wsl-config#configuration-setting-for-wslconfig>

WSL内的git使用Windows内git-credential-manager来管理credential,需要修改~/.gitconfig。详见:<https://learn.microsoft.com/en-us/windows/wsl/tutorials/wsl-git#git-credential-manager-setup>


(上面的内容是这些年来的使用感悟,下面的内容是这两天现学的。)

# WSLg

最近偶然发现Windows 10 Build 19044实装了WSLg,内置了对Linux GUI apps的支持。此版本之前,通过配置Linux内的X Server,使用Windows程序(比如vcxsrv)来渲染。如果要使用WSLg,记得取消对`$DISPLAY`及相关环境变量的修改。

我试了OCaml的SDL绑定和PulseAudio绑定,表现良好。用VLC播放高清视频,流畅。播放无损音乐,略卡顿。暂不清楚原因。

现在,你的电脑里同时运行了你的虚拟机实例(图中user distro),WSLg实例(图中WSLg system distro),和Windows本地程序msrdc.exe。WSLg提供图画和声音的中转:接受你的user distro的音画请求,转发到Windows本地程序msrdc.exe。

在你的虚拟机实例能发现相关设置:

$ ls /mnt/wslg
distro/  dumps/          PulseAudioRDPSink=    PulseServer=  stderr.log    weston.log
doc/     pulseaudio.log  PulseAudioRDPSource=  runtime-dir/  versions.txt  wlog.log
$ echo $DISPLAY:0
$ echo $PULSE_SERVER/mnt/wslg/PulseServer

在你的虚拟机里可以来快速检查图画和声音运行情况:

$ xclock

$ pactl play-sample

偶尔会遇到PulseAudio服务器链接中断:

$ pactl play-sample 
Connection failure: Connection refused
pa_context_connect() failed: Connection refused

解决方法是重启WSLg实例里的weston(参考<https://github.com/microsoft/wslg/issues/426#issuecomment-907635787>)。

# enter WSLg distro from Windows Terminal
PS wsl --system

# find the westop pid
$ ps x | grep weston
  131 ?        Sl     0:00 /usr/bin/weston --backend=rdp-backend.so --modules=wslgd-notify.so --xwayland --log=/mnt/wslg/weston.log --socket=wayland-0 --shell=rdprail-shell.so --logger-scopes=log,rdp-backend,rdprail-shell

# kill it to restart it
$ kill -9 131

Linux常见的声音服务有ALSA和PulseAudio。跳过PulseAudio而直接使用ALSA的程序,有方法提出可以通过`libasound2` (ALSA library)里的插件来获得支持,详见<https://github.com/microsoft/wslg/issues/864>。其他issues里有人提到这个方法可行。不过我测试mame不通过。再等等官方的更新吧。

另外,WSLg提供的是对GUI app的支持,目前并不提供对全desktop的支持(不能跑xfce)。这个问题里有讨论<https://askubuntu.com/questions/1385703/launch-xfce4-or-other-desktop-in-windows-11-wslg-ubuntu-distro>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
WSLg:为WSL增光添彩 | silaoA的博客
The Initial Preview of GUI app support is now available for the Windows Subsystem for Linux | Window
Windows 10新版改进:资源管理器可直接访问Linux文件
Windows10现在可以运行Linux GUI应用程序了~
你管这玩意叫双系统?直接在 Windows 上体验 Linux
linux虚拟机访问本机Windows共享文件设置方法-51Testing软件测试网
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服