WSL2 SpeedRun Any%
本文最后更新于:2024年10月19日 凌晨
前情提要
众所周知,这个世界对Windows
开发者不太友好🥹
大量开源项目很难在Windows
上跑起来,要么是依赖支持不完善,要么是噼里啪啦
由于纯Linux
笔记本的日常App生态不够完善,因此程序员一般人手一台Mac
但是,我对这Windows
爱得深沉😢
不过好消息是 巨硬(微软)推出了WSL(Windows Subsystem for Linux)
至此,Windows
成了最好的Linux
虚拟机
WSL2
WSL2
与WSL
有着本质的不同
WSL
通过指令转译运行于Windows
内核之上,没有完整的 Linux
内核,可能会存在兼容性问题
而WSL2
是运行于Hyper-V
虚拟化平台之上,运行一个完整的 Linux
内核,整体性能会更好
此时,Windows
和WSL2
成了平级关系,均成了虚拟机,会有那么一点点的性能损失
不过WSL2
自带显卡直通(nvidia-smi
查看),人工智能专业狂喜
缺点是WSL2
与Windows
的文件系统互访会稍慢
总体上来讲,没有特殊需求还是更推荐WSL2
(现在默认也是这个版本)
Install
闲话少叙,本篇是速通,还是来讲讲WSL2
的安装吧
首先我们需要开启两个Windows
功能:
- 适用于Linux的Windows子系统
- 虚拟机平台
安装之后会提示重启
接下来,直接到微软商店里搜Ubuntu
就有了(推荐22.04版本,24.04可能会有点问题)
或者使用Powershell
(管理员权限):
1 |
|
不加
-d Ubuntu-22.04
也可以,会下载默认版本--web-download
:从 internet 而不是 Microsoft Store 下载 WSL 的最新版本,如果网络有问题可以试试
wsl --list --online
:可以用于列出所有支持的发行版
当Ubuntu下载完毕后,会自动进行安装,大概几分钟就好了
1 |
|
然后会提示输入用户名和密码
至此,你就成功地进入了WSL2
完结撒花(🫡🎶😉✌️)
Launch
之后有多种途径可以进入WSL
命令行
直接在命令行输入
wsl
即可1
2C:\Windows\System32>wsl
cls@MrBeanCPC:/mnt/c/Windows/System32$但要注意,此时的工作目录是
Windows
的C盘(/mnt/c)(😾)可以通过
cd ~
切换回去,但不太方便Windows
终端下拉列表我们可以看到最后一个就是
Ubuntu
开始菜单
在开始菜单中(Win键),我们可以看到两个新的应用已经被添加
WSL Settings
是在最近的更新中才添加的可视化配置工具,非常好用而
WSL
打开之后就会进入到默认的Linux发行版,也很方便
Get out of C:\
如果你的C盘够大,可以跳过这一节
安装位置
默认情况下,WSL 2 使用一个虚拟硬盘(VHD)来存储文件:
C:\Users\<YourUsername>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_<version>\LocalState\ext4.vhdx
迁移
为了不让C盘爆掉,我们还是需要进行一次迁移
其实也不难,仅数个步骤:
停止WSL
1
wsl --shutdown
我们还可以通过
wsl -l -v
查看所有安装的linux子系统状态(Stopped/Running)1
2
3PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2导出
1
wsl --export <名称> <要保存的路径>
例如:
wsl --export Ubuntu-22.04 D:\ubuntu.tar
注意,这里的名称要与
wsl -l -v
显示的Name
对应(😾)取消注册
然后我们需要先把原本的Linux删除(C盘)
1
wsl --unregister Ubuntu-22.04
酱紫,上文提到的VHD就消失了(C盘空间释放)
需要注意的是,
WindowsApps
文件夹中还会留有一个Ubuntu-22.04
的应用,可以在开始菜单(Win键)右键卸载& ↑如果直接点击这个应用的话,会自动在C盘再次重装
Ubuntu
(😾)导入
此时,我们可以将
ubuntu.tar
重新导入系统(可选目录)1
wsl --import <Name> <安装目录> <.tar路径> --version 2
例如:
wsl --import Ubuntu D:\WSL-Ubuntu D:\ubuntu.tar --version 2
此时,我们已经完成了
Ubuntu
的目录迁移可以在终端的下拉列表中看到一个新的配置文件
其实这个也没有什么特别的,点进设置我们可以看到其内部也是调用了
wsl
命令用
wsl
命令启动了名为Ubuntu
的发行版,且cd
启动目录到了~
, Just但是直接进入
Ubuntu
,我们会发现默认用户是root
(为什么root在终端没有高亮!震怒🙃)设置默认用户(可选)
进入
WSL2
后,我们可以通过编辑/etc/wsl.conf
配置默认用户1
2[user]
default=mrbean加这两行就行
然后记得
wsl --shutdown
关闭重启一下(😾)// 什么,你说你不会用vim or nano
// 别急,直接装个gedit(往下看)
WSLg
WSLg
是微软的又一黑科技(他真的,我哭死)
aka, WSL GUI
可以直接在Windows
中打开并显示Linux
的GUI
程序(显示在任务栏的那种)
小试牛刀一下:
1 |
|
注意:Ubuntu 24.04启动(非sudo情况下)WSLg可能出现启动慢的情况
神不神奇,gedit
的界面直接无缝显示在了Windows
中
而且你还能在Windows
的开始菜单中看到他(Text Editor)
貌似是RDP协议巴拉的
但是大部分的GUI程序其实显示的时候都会有一个白色边框
emmmm,非常膈应人
只能说,可以用,但是,aaaa
关于解决方案的话,好像资料并不多,这里有一个issue可以看看:Run X11 windows without windows manager decoration · Issue #530
Linux Chrome安装详见:使用 WSL 运行 Linux GUI 应用 | Microsoft Learn
(否则没有浏览器的话Jetbrains
的登录、认证跳转会失败)(😾)
中文支持
WSL2
貌似默认不能显示中文(会变成方框)
可以参考一下这篇博客:安装中文环境和字体
安装中文环境和字体
1
sudo apt install language-pack-zh-hans
手动配置一下
locale
(选择zh_CN.UTF-8 UTF-8
)1
sudo dpkg-reconfigure locales
// 空格选择,TAB切换按钮
映射
Windows
字体到Ubuntu
打开
/etc/fonts/local.conf
1
sudo vim /etc/fonts/local.conf
输入以下内容
1
2
3
4
5<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>刷新字体缓存
1
fc-cache -f -v
最后重启WSL
1
wsl --shutdown
WSL Settings
网络
好了,这是一个老生常谈的问题
不过好消息是,近期的WSL2
更新了mirrored
镜像模式(默认是NAT),可以和主机共用一个IP
开启后,还能自动检测Windows
的代理设置,简直不要太方便
只要打开WSL Settings
,并将网络-网络模式改为Mirrored
,然后重启即可
通过ifconfig
命令就可以看到ip的变化了
延迟关闭
这里顺便说一下,关闭Ubuntu
命令行界面之后,WSL并不会马上关闭,而是等待60s不活动之后再关闭
WSL2与Windows互通
文件
两个系统分别都可以访问对方的文件系统,但是跨文件系统会比较慢
而且WSL2
的文件可以直接在Windows
的资源管理器中查看(嘿嘿)
在WSL2
中,Windows
的磁盘路径为:/mnt/c
, /mnt/d
(c d是盘符,以此类推)
而在Windows
中,WSL2的路径为:\\wsl.localhost\Ubuntu\
都可以用自身的软件打开对方的文件,没有问题,但是很慢(不建议)
命令
他俩命令也是互通的,惊不惊喜,意不意外
在WSL2
,可以调用Windows
的notepad,explorer等程序,如
1 |
|
而在Windows
中,可以使用wsl xxx
这样的形式调用WSL命令,如
1 |
|
甚至可以命令混写:
1 |
|
秀儿
端口无权限问题
注意:开启Hyper-V
之后,可能导致某些端口无权限访问,例如heox server
默认使用的4000端口(😾)
1 |
|
这里提示的并不是端口占用,而是无权限
使用netstat -ano|findstr ":4000"
也是找不到什么结果的
这是因为开启Hyper-V之后这一段端口被系统保留了,无法使用
可以使用以下命令查看
1 |
|
1 |
|
所以没办法,只能手动改用其他端口了
Peace
Ref
使用 WSL 运行 Linux GUI 应用 | Microsoft Learn
[WSL2教程] WSL安装linux系统以及从C盘迁移至其他盘
超详细的WSL教程:Windows上的Linux子系统_哔哩哔哩_bilibili
Run X11 windows without windows manager decoration · Issue #530 · microsoft/wslg (github.com)
在Windows10\11的WSL2中使用图形化应用Chrome和搜狗拼音输入法_win11 wsl2 图形化-CSDN博客
WSL2 基于WSLg运行Clion等GUI应用 - 知乎 (zhihu.com)
关于适用于 Linux 的 Windows 子系统的常见问题解答 | Microsoft Learn
给WSL应用程序创建Windows快捷方式 - oaksharks - 博客园 (cnblogs.com)