笔者这两天将WSL1转换为了WSL2,一路上遇到了些问题,思前虑后认为应当整理总结以飨读者。我遇到的问题一览:

WSL / WSL2 问题 及 解决

  • 转换为WSL2
  • WSL2占用内存过大怎么办?
  • WSL2与 **** 冲突怎么办?
  • WSL2占用C盘空间过大怎么办?
  • WSL2如何使用Windows的代理?
  • WSL2如何设置Xserver?
  • 为什么经常WSL2比WSL1还慢?
  • 安装Docker选择基于WSL2报错了怎么办?
  • 如何安装多个相同版本WSL?
    • 使用LxRunOffline 安装WSL的后续问题及解决
      • 创建用户,并加入管理员组
      • 修改默认登录名
        • 增加应该有的环境变量
  • WSL中怎安装32位的包?

建议在阅读本文前,可以先参考微软官方的FAQ
本文部分参见了这篇文章(WSL1全面使用指南)当中有讲到怎么安装WSL,介绍了很Imba的WSL管理工具LxRunOffline(下载直连),以及非常有必要的更换软件源,和可选的设置中文环境等。大家可以参考看看。

笔者计算机水平很菜,都是业余瞎摆弄,如有疏漏和错误之处,还请读者积极指出,以帮助大家进步!

环境配置

笔者建议将Windows版本升级到2004,同时将VMware升级到15.5.5。因为在这样的版本条件下,VMware兼容Hyper-V,即实现了VMware与Docker / WSL2的兼容。这件事情很酷。

转换为WSL2

将Windows升级到2004的版本号后,可以在命令行cmd(或者powershell)中执行wsl --set-version [镜像名称] [版本号] 命令:

C:\WINDOWS\system32>wsl --set-version Ubuntu 2
Conversion in progress, this may take a few minutes...
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
The distribution is already the requested version.

即可将该WSL1转换为WSL2。
在转换的过程中,可能会遇到一些问题:

  • 需要去 这里 下载WSL2的Linux内核更新包。如果是x64的电脑,下载 这个 就可以了。
  • "参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)"如果遇到这个问题,下载NoLsp.exe工具(非官网下载地址),然后用管理员权限打开终端(cmd或者powershell都行),执行对应命令就可以了。

顺利完成转换WSL2后,你可能还会遇到一些问题,比如怎么占用那么大内存,怎么安装图形界面,怎么使用代理等。WSL2和WSL1不同,WSL2是完整的虚拟机,其不能和Windows共享IP,所以设置Xserver和代理时会有区别。

问题与解决

本文建立在WSL1已经顺利配置好的基础上,再遇到的WSL2的问题。故对最基础的WSL1的问题没有怎么提及,具体可以参见前面贴出的WSL全面使用指南。

WSL2占用内存过大怎么办?

WSL2不会自动释放内存的BUG已经在windows更新后修复了,故此条可不看
参考网站:用 wslconfig 配置全局选项
在Users\用户名路径下(%UserProfile%)创建文件.wslconfig,
并配置内容为:

[wsl2]
memory=4GB
swap=0

即可限定WSL2使用的内存上限,同样可以限定使用的CPU。注意,这个配置文件是针对宿主机上所有的WSL2的。

WSL2与 **** 冲突怎么办?

参考网站:关于使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法。
临时解决方案:
以管理员身份运行cmd,并执行命令

netsh winsock reset

然后重启计算机即可。
如何以管理员身份运行CMD?参照:

长期解决方案:
下载NoLsp工具(需要****才能下载);热心网友提供的(onedrive链接(某度链接翻车了))然后以管理员身份启动CMD,并执行

NoLsp.exe C:\windows\system32\wsl.exe

注意下载的NoLsp位置和WSL的位置

WSL2占用C盘空间过大怎么办?

参考文章:win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录
既然WSL2占用C盘空间过大, 那么可以想办法将之迁移到别的盘。注意如果迁移到HDD机械硬盘,WSL2的启动速度会降速到2s才能打开。

这个地方分为两部分,即分开迁移WSL2和Docker。(没在Win10安装Docker Destop的可忽略后者)

建议使用LxRunOffline.exe(下载直链)迁移WSL2(一键迁移,很方便)
迁移方法:

在有LxRunOffline的路径下,使用cmd或者别的WSL运行LxRunOffline(这里用的是cmd),输入指令:

LxRunOffline move -n [待迁移WSL的名字] -d [目标路径]

然后等一会即可。

WSL2如何使用Windows的代理?

不是所有软件所有指令都可以使用代理,笔者不知道别的办法,自己发现可以用curl测试是否代理成功。
这里有三步走:

  1. 在代理软件中打开“允许局域网的连接”等选项
  2. 设置Windows防火墙
  3. 设置WSL2,使之可以代理

关于1.打开“允许局域网的连接”,各个代理软件客户端都有这个功能,但放的位置不尽相同,需要自己找一找。
关于2,设置防火墙放行:

为了待会方便,这里顺便把Xserver也放行:

如果用的是VcXsrv,那就把对应的也打开就好了

现在开始第 3.设置WSL2,使之可以代理。
WSL2不像WSL1,共享Windows的IP,所以不能直接用localhost,而是要先找到对于WSL2而言Win10的IP是多少。可以通过以下命令看到:

cat /etc/resolv.conf


而且…这个IP经常变,所以应当让它被自动的设置好。可以执行一条命令,并将该命令加入到~/.bashrc中,以实现每次启动终端时自动获取宿主机IP:

# echo host_ip=$"(cat /etc/resolv.conf |grep \"nameserver\" |cut -f 2 -d  \" \")" >>~/.bashrc # 这条指令有时会失效,请使用下面这条。
# 上面注释掉的指令有时会失效,建议使用下面这条。下面懒得换图了,也以这里为准
echo host_ip=$(cat /etc/resolv.conf | grep -o -E "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}") >>~/.bashrc

此外,再添加一个脚本(笔者命名为 setproxy)实现控制是否设置代理。根据代理的种类不同,这里需要写的代码也不同:

#!/bin/bash
export ALL_PROXY=socks5://$host_ip:你的端口
# 注意,如果你使用的不是socks,而是http或者https就设置成对应的。比如:
# export ALL_PROXY=http://$host_ip:你的端口
# export ALL_PROXY=https://$host_ip:你的端口

将这个脚本放到~/目录下:

echo "export ALL_PROXY=socks5://$host_ip:你的端口" > ~/.setproxy

并设置快捷方式到~/.bashrc中,使得之后可以直接调用命令setproxy便自动执行这个脚本实现代理。

echo "alias setproxy=source ~/.setproxy" >> ~/.bashrc

最终实现的效果如下:
在~/.路径下有文件.setproxy,其内容为:

给~/.bashrc增加的两行:

# 这里就是懒得换图的地方,下面的图示“1”的部分应该是下面这段代码
host_ip=$(cat /etc/resolv.conf | grep -o -E "[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}")


设置好后,source ~/.bashrc,即可测试是否使用上了代理:

WSL2如何设置Xserver?

注:笔者在使用VcXsrv
4步走:

  1. 在Windows端安装好Xserver软件,比如Xming或者VcXsrv,并点击xLaunch启动。需要注意两点:
  2. 设置防火墙,允许访问xserver。参见前面设置代理那里,
  3. 设置WSL2,将DISPLAY输出到宿主机ip:端口号(默认是0,也可以是前面自己输入的数字)。如何设置宿主机ip,参见前面设置代理的地方。并将该命令写入~/.bashrc后是这个样子:

echo “export DISPLAY=$host_ip:0.0” >> ~/.bashrc

然后source ~/.bashrc刷新一下就好了,输入xeyes测试一波:

为什么经常WSL2比WSL1还慢?

我猜是这样的,WSL1与其说是Linux系统,不如说是一个跑在Windows上的软件,所以在其执行和调用Windows的东西就非常快。而WSL2是一个完整的虚拟机,要想访问Windows的东西就比较麻烦,需要绕远路,故会比较慢。
所以如果想要WSL2的运行速度变快,就可以把需要处理的东西先手动拷贝到WSL2的本地文件夹下,然后再处理就好了。
关于如何可视化访问WSL2的文件:使用Windows的文件管理器explorer.exe就好

安装Docker选择基于WSL2报错了怎么办?

参考文章:基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop: exit code: -1的解决方法
在cmd中执行指令:

netsh winsock reset

即可

如何安装多个相同版本WSL?

这又需要用到LxRunOffline.exe工具了。
首先从这里下载Linux系统镜像,比如Ubuntu18.04这种。下载好后解压缩,手动将解压出的所需版本的【distro.appx】修改后缀名为.zip,并再次解压缩到任意路径,然后进入该文件夹。使用LxRunOffline工具选中install.tar.gz:根据提示即可安装

使用LxRunOffline 安装WSL的后续问题及解决

创建用户,并加入管理员组

找到root ALL=(ALL:ALL) ALL,并在下面追加

# User privilege specification
root    ALL=(ALL:ALL) ALL
wsl2    ALL=(ALL:ALL) ALL       # 加入管理员权限
wsl2    ALL=(ALL) NOPASSWD: ALL # 无密码切换为管理员

修改默认登录名

先查看需要默认登陆名的ID,ID 登陆名

LxRunOffline.exe su -n 【WSL的名字】 -v 【上一步看到的UID】
增加应该有的环境变量

可以直接在 ~/.bashrc 中添加

# 可以查看常规安装的 WSL 中的PATH `echo $PATH`,直接复制过来就行
PATH="$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/c/ProgramData/Anaconda3/Scripts:/mnt/c/Program Files (x86)/Common Files/Intel/Shared Libraries/redist/intel64/compiler:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/dotnet/:/mnt/c/myApplication/tools/command/ffmpeg/bin:/mnt/c/myApplication/tools/command/mingw64/bin:/mnt/c/Users/mage/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin"

WSL中怎安装32位的包?

参考sudo apt-get install libz1:i386的github答疑
在WSL中执行指令:

dpkg --add-architecture i386 && apt-get update

即可使用apt-get来安装32位的软件了,比如各种i386

WSL / WSL2 问题大全 及 解决方案相关推荐

  1. 三菱服务器报系统错误,10个三菱PLC常见错误代码大全及解决方案

    10个三菱PLC常见错误代码大全及解决方案的在这10个三菱PLC常见错误代码中,一般工程师经常会遇到这样问题,往往很简单,但有些三菱PLC工程师无法解决,下面小编再跟你分享10个三菱PLC常见错误代码 ...

  2. 【win10/win11下启动wsl/wsl2出现“占位程序接收到错误数据“启动失败的解决办法】

    win10/win11下启动wsl/wsl2出现"占位程序接收到错误数据"启动失败的解决办法 出现场景: 出现原因: 解决方法: github上有相关的issue: https:/ ...

  3. 网吧无盘服务器风扇不转会不会卡,网吧无盘系统卡tftp的原因大全和解决方案参考...

    中国的无盘网吧技术非常成熟,特别是各种商业无盘,基本是傻瓜式的操作了,但是也会有部分无盘客户机在启动时卡TFP的现象,下面说下无盘卡在TFP的原因分析和解决方案吧: 相信很多无盘用户都遇到过客户机无法 ...

  4. 硬盘故障大全与解决方案

    硬盘故障大全 2.BIOS设置中硬盘模式的含义 3.Fdisk无法读取硬盘分区 4.Windows XP挂起到硬盘后的异常故障解决 5.报废硬盘维修实录 6.常见硬盘自举失败的分析 7.从死神手中抢回 ...

  5. 解决重启电脑后WSL/WSL2虚拟机IP地址变换的问题(非标题党)

    看到很多人已经给出了方法,但是所有已知方法都在Windows内进行,不符合虚拟机的理念.下面给出一种快捷且不影响Windows的方法. 下面的方法仅适用于简单的配置要求,例如bashrc.zsh.gi ...

  6. Geant4在Ubuntu(WSL)中,安装过程详解,附Geant4一键安装脚本

    背景(撰写本攻略的缘由) 本文是 Geant4 及ROOT 在windows子系统(WSL)中的快速安装 的姊妹篇.上文应该是全网第一篇中文的在WSL中安装Geant4的教程. 当时笔者还很年轻,对L ...

  7. Windows 10 May 2020 中 WSL 与 WSL2 的性能比较

    科技媒体 Phoronix 对 Windows 10 May 2020 中 WSL 和 WSL 2 的性能进行了测试,参与测试的发行版为 Ubuntu 20.04 on WSL/WSL2 ,以及 Ub ...

  8. win10 + Terminal + WSL+ oh-my-zsh 配置漂亮实用的windows终端及配置ubuntu不加.exe打开windows程序

    win10 + Terminal + WSL+ oh-my-zsh 配置漂亮实用的windows终端及配置ubuntu不加.exe打开windows程序 未安装wsl/wsl2的请参照以下链接自行安装 ...

  9. 【Python环境】使用WSL +MobaXterm 在windows系统上使用Linux应用

    文章目录 概述 设置步骤 使用WSL在windows上跑ubuntu 使用MobaXterm打开应用 VSCODE Sublime WSL python + windows Pycharm 一定得读 ...

最新文章

  1. [家里蹲大学数学杂志]第254期第五届[2013年]全国大学生数学竞赛[数学类]试题
  2. Java命令行界面(第14部分):google-options
  3. C++——已知a+b、 a+c、b+c、 a+b+c,求a、b、 c
  4. php xmldom扩展,如何使用比根更深入的PHP DOM向XML添加新元素?
  5. 【Python3网络爬虫开发实战】 1.7.1-Charles的安装
  6. git代码库迁移保留commit历史_svn 迁移到 git 仓库并保留 commit 历史记录
  7. Python3 异常: name ‘basestring‘ is not defined
  8. eclipse 离线安装python开发工具 PyDev
  9. WebRTC-集成qsv硬解码实现
  10. 遥感影像校正效果检测系统代码设计与实现
  11. 2022-2028全球民宿行业调研及趋势分析报告
  12. IFIX组态----安全与权限配置
  13. 2014中秋节,用java为QQ游戏美女找茬写辅助
  14. 实验室服务器系统崩溃,选课系统崩溃解救报告
  15. react-native <0.69 Exceptions.h:5:10: fatal error: ‘fbjni/fbjni.h‘ file not found
  16. 关于我的大学ACM江湖
  17. Qualcomm MSM8916 将开关机动画放置到指定分区做法
  18. 有木有收Java兼职的
  19. 常见C++开源网站项目
  20. Alluxio代码结构

热门文章

  1. WPS/WORD设置每一页显示50行代码或者是固定数量的行数
  2. ubuntu删除错误的ATI驱动
  3. linux中白屏变黑屏咋变,解决 APP启动白屏黑屏问题
  4. 2013年网站内容建设新趋势
  5. C:勇敢羊羊不怕困难!2022-2023年度第四届全国大学生算法设计与编程挑战赛(秋季赛)之羊驼
  6. 在键盘上输入数n,编程计算sum=1!+2!+··· + n!的结果
  7. excel单元格下拉选项怎么设置_使用Excel制作搜索式下拉菜单,让你不再烦恼下拉选项多内容...
  8. php操作Word之com组件-获取word文档页码和更新目录
  9. SQL Server查看库、表占用空间大小
  10. 毕业设计房屋出租研究现状