前言
虽然 WSL ( Windows Subsystem for Linux ) 可以直接访问 Windows 下的文件,但是因为文件权限的问题,把需要在 WSL 中使用的文件放在 WSL 的用户主目录是最好的解决方案没有之一。为了不撑爆系统盘,除了修改 Windows 应用安装位置,还可以把 WSL 整个安装目录进行转移,使用wsl --export
和wsl --import
这两个命令可以对 WSL 进行打包再自定义目录安装,就相当于转移。我以为这已经是相当完美的解决方案了,但最近发现了一款非常实用的 WSL 管理软件:LxRunOffline,它可以安装任意发行版到任意目录、转移已安装的 WSL 目录、备份 WSL、设置默认用户和修改环境变量等操作,完全碾压 wsl
、wslconfig
这些简陋原生管理命令。
安装 LxRunOffline
- 普通手动安装:下载解压 LxRunOffline ,并设置环境变量。
- 使用 Chocolatey 安装。
choco install lxrunoffline
- 使用 Scoop 安装。
scoop bucket add extras
scoop install lxrunoffline
LxRunOffline 选项及参数
开发者并没有在 GitHub 上给出任何选项参数说明,你需要在终端内直接输入lxrunoffline
查看,这里列举一下当前版本(3.4.0)的选项说明。相关的参数可以直接输入选项查看,比如lxrunoffline i
。
点击查看选项说明
l
, list
- 列出所有已安装的发行版。
gd
, get-default
- 获取 bash.exe 使用的默认发行版。
sd
, set-default
- 设置 bash.exe 使用的默认发行版。
i
, install
- 安装新的发行版。
sd
, set-default
- 设置 bash.exe 使用的默认发行版。
ui
, uninstall
- 卸载发行版。
rg
, register
- 注册现有的安装目录。
ur
, unregister
- 取消注册发行版但不删除安装目录。
m
, move
- 将发行版移动到新目录。
d
, duplicate
- 在新目录中复制现有发行版。
e
, export
- 将发行版的文件系统导出到.tar.gz
文件,该文件可以通过install
命令安装。
r
, run
- 在发行版中运行命令。
di
, get-dir
- 获取发行版的安装目录。
gv
, get-version
- 获取发行版的文件系统版本。
ge
, get-env
- 获取发行版的默认环境变量。
se
, set-env
- 设置发行版的默认环境变量。
ae
, add-env
- 添加到发行版的默认环境变量。
re
, remove-env
- 从发行版的默认环境变量中删除。
gu
, get-uid
- 获取发行版的默认用户的UID。
su
, set-uid
- 设置发行版的默认用户的UID。
gk
, get-kernelcmd
- 获取发行版的默认内核命令行。
sk
, set-kernelcmd
- 设置发行版的默认内核命令行。
gf
, get-flags
- 获取发行版的一些标志。有关详细信息,请参考这里。
sf
, set-flags
- 设置发行版的一些标志。有关详细信息,请参考这里。
s
, shortcut
- 创建启动发行版的快捷方式。
ec
, export-config
- 将发行版配置导出到XML文件。
ic
, import-config
- 从XML文件导入发行版的配置。
sm
, summary
- 获取发行版的一般信息。
使用 LxRunOffline 安装 WSL
与微软商店的安装方式不同,LxRunOffline 安装 WSL 更灵活,它可以安装任意发行版到任意目录,还可以自定义 WSL 名称。
如果你没有使用过 WSL ,首先以管理员身份运行 PowerShell ( WIN+X , A ),输入下面的命令开启“适用于 Linux 的 Windows 子系统”功能,并重启。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
下载 WSL 官方离线包,改后缀名为.zip
,解压后可得到名为install.tar.gz
的文件。或者在 LxRunOffline WiKi 中下载大佬们提供的镜像文件。
输入以下命令进行安装:
lxrunoffline i -n <WSL名称> -d <安装路径> -f <安装包路径>.tar.gz
加入-s
参数可在桌面创建快捷方式。
使用 LxRunOffline 设置默认用户
当修改过 WSL 的名称或目录后就无法通过微软官方提供的方法设置默认用户。这时可以使用 LxRunOffline 进行设置。
设置普通用户为默认用户
使用 LxRunOffline 新安装的 WSL 默认是以 root 用户登录,如果你需要默认以普通用户进行登录,就需要进行下面的操作。
首先运行 WSL ,输入以下命令创建用户:
useradd -m -s /bin/bash <用户名>
然后对该用户设置密码,输入命令后会提示输入两次密码。
passwd <用户名>
授予该用户 sudo 权限。
usermod -aG sudo <用户名>
为了保持和微软商店安装的效果一致,这里提及的方法是把用户添加到 sudo 用户组。其他关于 sudo 权限的设置方法以及免密设置可参考《Linux 中授予普通用户 sudo 权限的正确方法》这篇文章。
查看用户 UID ,一般是1000
。
id -u <用户名>
按Ctrl
+D
退出 WSL ,在 PowerShell 中输入以下命令:
lxrunoffline su -n <WSL名称> -v 1000
设置 root 为默认用户
root 用户的 UID 为0
,所以可以直接在 PowerShell 输入以下命令进行设置:
lxrunoffline su -n <WSL名称> -v 0
使用 LxRunOffline 转移 WSL 安装目录
LxRunOffline 可以对系统中已经安装的 WSL 进行目录转移操作,拯救爆满的C盘。
查看系统中已安装的 WSL 。
lxrunoffline l
类似于wsl -l
。LxRunOffline 不会显示默认 WSL ,查看默认 WSL 需要使用lxrunoffline gd
命令。
输入命令对 WSL 的目录进行移动。
lxrunoffline m -n <WSL名称> -d <路径>
最后查看路径,进行确认。
lxrunoffline di -n <WSL名称>
使用 LxRunOffline 备份和恢复 WSL
使用 LxRunOffline 可以方便的对 WSL 进行备份和恢复,同样可以实现转移的操作,而且还可以在转移到其它电脑上。
备份 WSL
查看系统中已安装的 WSL 。
wsl -l
然后输入需要备份的 WSL 名称和备份的目标路径。
lxrunoffline e -n <WSL名称> -f <压缩包路径>.tar.gz
类似但不等同于wsl --export <WSL名称> <压缩包路径>.tar
。LxRunOffline 备份完会生成一个.xml
后缀的同名配置文件,比如WSL.tar.gz.xml
。
恢复 WSL
输入以下命令可以恢复已备份的 WSL,和安装是相同的命令。
lxrunoffline i -n <WSL名称> -d <安装路径> -f <压缩包路径>.tar.gz
类似但不等同于wsl --import <WSL名称> <安装路径> <压缩包路径>.tar
。LxRunOffline 会读取备份时生成的配置文件并写入配置,前提是同目录且同名。否则你需要加入-c
参数指定配置文件。
使用 LxRunOffline 运行 WSL
和原生运行方式本质上是一样的。
创建快捷方式
使用微软应用商店安装的 WSL 会在开始菜单添加应用图标(快捷方式),而使用 LxRunOffline 安装 WSL 时可以通过添加-s
参数在桌面创建快捷方式。如果你安装时忘记添加参数,可以使用以下命令进行创建。
lxrunoffline s -n <WSL名称> -f <快捷方式路径>.lnk
使用命令运行指定 WSL
在有多个 WSL 的情况下,可以指定运行某个发行版。
lxrunoffline r -n <WSL名称>
等同于wsl -d <WSL名称>
设置默认 WSL
设置默认 WSL 后,可以在 cmd
和 powershell
中输入 wsl
直接调用默认的 WSL 。
lxrunoffline sd -n <WSL名称>
等同于wsl -s <WSL名称>
使用 LxRunOffline 修改 WSL 名称
查看 WSL 名称。
wsl -l
查看 WSL 安装目录。
lxrunoffline di -n <WSL名称>
导出指定的 WSL 配置文件到目标路径。
lxrunoffline ec -n <WSL名称> -f <配置文件路径>.xml
配置信息可以输入lxrunoffline sm -n <WSL名称>
查看
取消注册(这个操作不会删除目录)
lxrunoffline ur -n <WSL名称>
使用新名称注册
lxrunoffline rg -n <WSL名称> -d <WSL路径> -c <配置文件路径>.xml
推荐阅读:《打造 Windows 10 下最强终端方案:WSL + Terminus + Oh My Zsh + The Fuck》
了解更多 WSL 使用技巧点这里
本文作者:P3TERX
本文链接:https://p3terx.com/archives/manage-wsl-with-lxrunoffline.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处(作者、原文链接),商业转载请联系作者获得授权。
师傅你好,请问有没有遇见安装virtualbox后,wls打不开了,会出现报错
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80070050
新装的wls可以打开,之前装的都打开不开了,使用wls -l也不识别我之前的子系统
VirtualBox 我没用过,我一直用的 VMware ,没遇到过类似的问题。
请问在修改WSL名称部分中提到的<配置文件>具体是指哪个文件呢,在WSL路径下有三个.xml文件,哪个是配置文件呢?谢谢!
请问按照这种方法把wsl安装在非系统盘后,升级wsl2的操作按照正常操作就行吗
这就不知道了,目前 WSL2 与 VMware 有冲突,我还没尝试。