WSL2+linux配置流程超详细指南

WSL2+linux配置流程超详细指南

再也不用问“debian系如何安装qq”这样的傻批问题了
win10最全面的安全工具是kali
甚至还可以远程开发
状态栏两个系统的文件管理器,我愿称之为梦幻combo

前言

为什么说最好的linux发行版是windows子系统?

这几天把win10重装后一直在整蛊软件,系统迁移-系统安装这篇记录写到一半,才把win10部分写完,linux系统部分就没下文了。这是为什么呢,这是因为守望先锋出新年活动了,其实是因为我玩了几天manjaro后,充分认识到了纯linux作为桌面环境的无奈和局限性:各种工具、插件的配置,源与代理,办公软件的替代与安装,字体渲染,浏览器同步等等大大小小的问题,真实老折磨人了。国外桌面环境软件到国内日常使用确实是各种水土不服,(现在进一步认识到deepin用爱发电的真诚),到头来各办公软件还得是deepin-wine-XXX,转了一圈截图、资源监视器等软件还得是dde自带的最好用。虽然yay确实比apt香,而且manjaro对双显卡支持更好,但是优雅的gnome3桌面必须跟一堆插件才能满足日常使用,定制性强的kde5桌面必须配置一大坨东西才跟得上审美要求。

最后,我把目光投向了win10的linux子系统,WSL2(Windows Subsystem for Linux)。

在win10的基础上,可以完成linux的大部分要求。win10文件资源自动挂载到linux的/mnt,无需考虑文件系统的问题从而实现无缝切换,性能比VMWare高,内存占用更低,VSCode对WSL的支持贼棒。最重要的一点是,不折腾,搞炸了就删掉,代码全在win10里,稳得一批,不需要花大精力在操作系统上,专心软件就行了。

这篇文章最好的参考是官网文档 适用于 Linux 的 Windows 子系统文档

安装

正好win10里没怎么装安全相关的工具,与其一个一个装,不如虚拟机装个kali,全齐了,到时候用不上了删掉也方便,没有垃圾文件残留用户文件夹。

具体流程可以看微软官方的这篇帖子,讲的最正规的了:

适用于 Linux 的 Windows 子系统安装指南 (Windows 10)—-日期:2020/09/15

但是我是看的民间版本,这个流程更加简单无脑:

在Windows运行完整的Linux桌面GUI!Kali on WSL2安装与简单配置指南—-日期:2020/09/15

下面我要开始复制粘贴了,顺便更正一些东西。

升级系统

首先检查当前系统版本,按Win+R,输入winver,可以看到当前的系统版本:

原作者的版本
我的版本

此处显然,19042是要比19041要更新的,毕竟我的系统镜像前几天从官网下的,所以向后兼容。
如果不是2004版本的话,要把系统升级到2004版本,微软说是有推送,但时好时坏,检查不到更新的同学请自行下载官方的“易升”工具检查更新

下载 Windows 10 (microsoft.com):更新助手可以帮助你更新到 Windows 10 的最新版本。若要开始更新,请单击“立即更新”。

启用Linux子系统

在升级到2004版之后,可以开始安装系统了,如果没有启用Linux子系统的话,得先启用。

PS:由于WSL2是使用Hyper-V虚拟机的,所以开启之后会和VMware、VirtualBox冲突,可以通过升级VMware和Vbox到支持HyperV的版本解决。

使用管理员权限打开PowerShell,输入以下命令,启用Linux子系统:

1
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

重启系统。

启用虚拟化

使用管理员权限打开PowerShell,输入以下命令:

1
2
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

重启系统。

下载WSL2的Linux内核

介绍地址:步骤 4 - 下载 Linux 内核更新包
下载直链:适用于 x64 计算机的 WSL2 Linux 内核更新包

下载后安装。

设置子系统的默认版本为WSL2

使用管理员权限打开PowerShell,输入以下命令:

1
wsl --set-default-version 2

安装Kali Linux

打开应用商店,搜索安装Kali Linux。装ubuntu也行,记得装评分最好的。

安装完成后选择“启动”,就会开始解压安装,然后输入用户名和密码就ok了。

升级原有linux系统到WSL2

如果原本就安装有WSL,可以直接升级到WSL2。
使用管理员权限打开PowerShell,输入以下命令:

1
wsl --set-version kali-linux 2

安装Win-Kex图形界面包

Win-Kex工具包是Kali提供的在Windows上运行的图形化工具包,可以一键傻瓜式在WSL中跑图形界面。
在Kali命令行中输入命令安装:

1
sudo apt update && sudo apt install kali-win-kex

安装完成后就可以启动图像界面了,命令如下:

1
2
3
4
5
6
7
8
9
10
11
cd ~ # 注意要先切换当前目录到home目录再启动kex,不然会获取不到key。
# 模式kex是启用全屏模式,和窗口模式同使用vnc连接,若vnc报错可尝试另外两种方式,占用内存相对更大。
kex
# 窗口模式,缺点是VNC容易出问题
kex --win -s
# 增强会话模式,缺点是和有一个类似工具栏的小窗口,命令太长记不住
kex --esm --ip -s
# 无缝模式,缺点是应用的字体渲染清新脱俗
kex --sl -s
# 关闭
kex stop

第一次启动会让你输入一个新密码,这个密码是作为kex的连接密码保存起来。

配置

说在前面,如果你对系统进行了update + upgrade的全面升级,开始菜单许多软件的启动link会失效,另外,这十有八九导致了我kex --win -s出现TigerVNC Viewer : 10061错误,窗口化模式挂掉。虽然可以用其它可视化模式替代,但还是请谨慎操作。

换国内kali源

查看帖子:https://blog.n0ts.cn/574.html

如果你有代理,可以无所畏惧,这步省略即可,用官网的源是最稳的,没有就代理老老实实换个源吧,不然下载kali工具包可能会出事。

kali源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#官方:deb http://http.kali.org/kali kali-rolling main contrib non-free

#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

#清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

#浙大
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free

#东软大学
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib

更新镜像源方法:

编辑 vi /etc/apt/sources.list
添加镜像源到文件中,随意一个即可,保存退出
执行apt-get update 更新包

执行apt-get upgrade 更新依赖关系包 (请谨慎选择,更新强迫症非要执行这条命令也没关系)

执行apt-get dist-upgrade 分析依赖关系包进行升级
执行apt-get clean 清理多余的安装包

汉化命令行

1
2
sudo apt-get install locales
sudo dpkg-reconfigure locales

空格选中en_US UTF8zh_CN UTF8并回车,然后选中zh_CN UTF8回车,选择系统语言。

安装中文字体:

1
sudo apt-get install xfonts-intl-chinese ttf-wqy-microhei

随后会提示是否将home用户文件夹下的文件名(desktop改为桌面),建议还是desktop吧,切目录时省了切换中文输入法。

安装Kali Linux工具包

  1. 安装标准工具包

    1
    sudo apt install kali-linux-default

    或者

    安装大工具包(大概7、8G,建议标准工具包就行了)

    1
    sudo apt install kali-linux-large

配置Windows Terminal快捷方式

命令行输入kali可以打开虚拟机,也可以在Windows Terminal中配置快捷方式,下次就可以通过这个下拉菜单打开Kex的图形界面了。

另外,每次打开kali时,有一个python2作为python向后兼容的提示:

提示下面建议在~/目录下新建一个.hushlogin的空文件,照做就行了。

简单配置下root密码

使用linux的第一步给删除加一个确认,防止手残党自取灭亡。后续可给rm加装回收站功能:

1
alias rm="rm -iv"

然后给你的管理员设个密码,因为有一些命令只能由root执行:

1
2
3
4
5
sudo passwd root
新的 密码:
重新输入新的 密码:
passwd:已成功更新密码
su / su m4 切换用户

配置Windows Terminal快捷方式方法:

更详细的配置方法查看kali官方文档:https://www.kali.org/docs/wsl/win-kex/ ,我后面也会详细介绍。

打开Windows Terminal的配置文件,加入以下配置项:

1
2
3
4
5
6
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ececc031d2}",
"hidden": false,
"name": "Win-KeX",
"commandline": "wsl kex wtstart",
}

之后点击“Win-Kex”菜单项就可以直接启动图形界面了。

按照刚才的配置会默认进入全屏界面:

看到上面的提示没有?press F8 to open the context menu。按F8进入菜单,退出图形界面。

图形界面可能出现的问题

dbus-launch

WSL报错Failed to execute child process “dbus-launch” (No such file or directory),这是因为缺少相关程序,安装即可:

1
sudo apt-get install x11-xserver-utils dconf-editor dbus-x11 -y

Error 0x80370102

图形界面基于VNC程序,我配置时出现了Error 0x80370102 ,这是因为第一次配置失败我卸载了一次,将win10部分功能移除了,完全卸载方法我会在后文提到,这里说一下Error 0x80370102的处理办法:

wsl2的Error 0x80370102 解决方案

解决问题主要是3步

  • 安装条件检查
    按照指南安装
    恢复到初始状态

安装条件检查:

  1. 任务管理器->性能:若未启用系统虚拟化,前去BIOS打开。

  1. 开启虚拟机平台功能和windows子系统:

  1. 管理员启动powershell,启用win10功能:

    1
    2
    3
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  2. 按照教程再安装一遍

如果还不成功,记得在bash中运行kex stop,然后重新启动kex。

虚拟机系统占用过高

调整虚拟机的内存设置,在用户目录创建个.wslconfig文件, 在powershell中切换到~目录,输入notepad .wslconifg,提示新建文件,填入设置参数如下:

1
2
3
[wsl2]
memory=2GB
swap=0

另外,用完子系统后,务必记得powershell命令shutdown:

1
wsl --shutdown

我们看到,WSL是没有关闭和重启选项的,子系统里也不能通过shutdown关闭,把windows termian的shell标签叉掉,虚拟机系统仍然在运行。所以不用了记得在powershell使用shutdown命令关闭。
此外,关闭窗口模式的命令是kex stop,可以一起记一下。

关于内存占用,如果这个办法不奏效,可以看这位博主的帖子,他提到是Hyper-V的后台占用。

Win10中Vmmem程序资源占用过高解决办法

kex默认模式出现vnc错误:10061

这个是vnc错误,我第一次启动成功没问题,后续出现了这个错误。查了好久没有解决方法,想了一下,可能是之后做了update和upgrade导致了错误。你可以在Stack Exchange社区的[windows-subsystem-for-linux]话题下查找TigerVNC关键字找到此issues:Posts containing ‘tigervnc’ - Unix & Linux Stack Exchange

解决方案:

kex stop+kex重启
实在不行可以采用其他方式开启虚拟机:

  • 增强会话模式kex --esm --ip -s
    无缝模式kex --sl -s

因为其他模式没有使用TigerVnc程序。详情查看下一节更多图形界面的模式
如果一定要使用kex启动,重装kali吧,具体办法可以看结尾的卸载WSL

更多图形界面的模式

在kali官网提供了Win-KeX Version 2.0的说明文档:

Win-KeX三种模式手册
Win-KeX Version 2.0更新说明—-2020.11.18

翻译+整合,如下:

我们很高兴向您介绍Win-KeX v2.0,它具有以下功能:

  • Win - kex Sl (无缝版) – 再见边界
  • 声音支持
  • 多会话支持
  • KeX 会话可以作为根会话运行
  • 能够从任何地方启动”kex” - 无需再将 CDing 引入 Kali 文件系统
  • 共享剪贴板– 在 Kali 和 Windows 应用之间剪切和粘贴内容

Win-KeX 的安装一如既往的轻松:

1
sudo apt upgrade && sudo apt install -y kali-win-kex

更多安装流程查看:Win-Kex安装

Win-KeX 现在支持模式有:

窗口模式(win)

若要在具有声音支持的窗口模式下启动 Win-KeX,请运行
kex --win -s
terminal配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Basic Win-KeX in window mode with sound:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ececc031d2}",
"hidden": false,
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --wtstart -s",
},
//Advanced Win-KeX in window mode with sound - Kali icon and start in kali home directory:
//将 kali 菜单.png图标复制到图片目录,并将该图标和启动目录添加到配置:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ececc031d2}",
"hidden": false,
"icon": "file:///c:/users/<windows user>/pictures/icons/kali-menu.png",
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --wtstart -s",
"startingDirectory" : "//wsl$/kali-linux/home/<kali user>"
},

有关详细信息,请参阅 Win-KeX Win使用文档。

增强的会话模式(esm)

若要在增强会话模式下启动 Win-KeX,并配有声音支持和手臂解决方法,请运行
kex --esm --ip -s
terminal配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Basic Win-KeX in ESM mode with sound:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ecedc031d2}",
"hidden": false,
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --esm --wtstart -s",
},
//Advanced Win-KeX in ESM mode with sound - Kali icon and start in kali home directory:
//将 kali 菜单.png图标复制到图片目录,并将该图标和启动目录添加到配置:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ecedd031d2}",
"hidden": false,
"icon": "file:///c:/users/<windows user>/pictures/icons/kali-menu.png",
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --esm --wtstart -s",
"startingDirectory" : "//wsl$/kali-linux/home/<kali user>"
},

有关详细信息,请参阅 Win-KeX ESM使用文档。

无缝模式(sl)

要启动 Win-KeX 在无缝模式与声音支持,运行
kex --sl -s
terminal配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//Basic Win-KeX in seamless mode with sound:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ececc031d2}",
"hidden": false,
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --sl --wtstart -s",
},
//Advanced Win-KeX in seamless mode with sound - Kali icon and start in kali home directory:
//将 kali 菜单.png图标复制到图片目录,并将该图标和启动目录添加到配置:
{
"guid": "{55ca431a-3a87-5fb3-83cd-11ececc031d2}",
"hidden": false,
"icon": "file:///c:/users/<windows user>/pictures/icons/kali-menu.png",
"name": "Win-KeX",
"commandline": "wsl -d kali-linux kex --sl --wtstart -s",
"startingDirectory" : "//wsl$/kali-linux/home/<kali user>"
},

有关更多信息,请参考Win-KeX SL 使用文档

启用声音

kex --sound -s

Win-KeX 现在支持并发会话。

窗口防火墙

SL 无缝模式和声音支持都需要通过 Windows defender防火墙进行访问。当提示时,勾选”公共网络”。稍后可以转到防火墙设置,将范围限制为 WSL 网络(通常172.3x.xxx.0/20)。

组件依赖

  • Win-KeX Win窗口模式依赖 TigerVnc 实现。
  • Win-KeX 增强会话模式使用Win10的远程桌面功能实现。
  • Win-KeX SL无缝模式依赖 VcXsr Windows X Server,使用VCXsrv客户端实现。
  • 声音支持集成自 PulseAudio

安装ohmyzsh

下面是linux软件配置部分。

Manjaro-KDE安装配置全攻略

首先修改默认shell为zsh:

1
chsh -s /usr/bin/zsh

安装ohmyzsh:

1
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

如果每次执行都失败提示被拒绝,是因为国内dns无法解析raw.githubusercontent.com。连接失败就先改一下hosts文件:(我博客的图片都是托管在这里哦)

1
sudo nano /etc/hosts

把这段话复制到下面:

1
2
3
# GitHub Start
151.101.64.133 raw.githubusercontent.com
# GitHub End

安装zsh-syntax-highlighting插件:提供命令高亮

1
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

安装autosuggestions插件:记住你之前使用过的命令

1
git clone git://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-au

启用所有插件,顺便修改主题:

1
nano ~/.zshrc

主题改为我喜欢的ys,另外这个主题没有特殊符号,对字体比较友好,其他主题可以点击theme上的说明跳转到主题说明页。然后启用插件。
将plugins=(git)改为:

1
plugins=(git zsh-syntax-highlighting zsh-autosuggestions sudo extract)
  • sudo是ohmyzsh自带的插件,功能是在你输入的命令的开头添加sudo,方法是双击Esc。

  • extract也是自带插件,不用再去记不同文件的解压命令,方法是extract + 待解压的文件名

导入配置

1
source ~/.zshrc

安装谷歌中文输入法

用过一段时间的rime,中洲韵?输入方案,老有繁体冒出来,还是回归google拼音。

安装输入法框架

1
sudo apt-get install fcitx

安装谷歌输入法

1
sudo apt-get install fcitx-googlepinyin

重启

1
sudo reboot

当然,这里要重启win10才行。

VScode的WIN-WSL插件

使用适用于 Linux 的 Windows 子系统的 Visual Studio Code 入门

vscode对wsl2支持太棒了,直接在linux终端输入code就自动打开vscode并连接到wsl2。也可以自己在VScode插件扩展商店搜索Remote - WSL进行安装:

直接在linux的shell输入code,本地VScode安装

VScode搜索插件名安装,自动绑定到kali

插件效果:

远程连接kali并使用range查看运行win10本地代码

卸载WSL

官方文档:
在 Windows 10 周年更新和创意者更新上安装或卸载适用于 Linux 的 Windows 子系统的指南
WSL commands and launch configurations

关于卸载WSL,你可能会看到很多不同的博文,例如

  • 在powershell中输入下面的代码

    1
    2
    3
    wsl --list --all  # 查看所有已经安装的分发版本
    wsl --list --running # 查看正在运行的分发版本
    wsl --unregister <DistributionName> # 删除指定的分发版本
  • 在powershell中输入下面的代码(推荐)

    1
    2
    wslconfig /l  #显示出你安装的列表。
    wslconfig /u <DistributionName> #<DistributionName>为上述列表中的名字,注销子系统
  • 打开开始菜单,右键卸载掉

  • Ctrl + R键入lxrun /uninstall /full

  • 手动删除旧发行版
    如果需要,可以手动删除旧实例。 如果使用 lxrun.exe卸载旧的发行版或运行 Windows 10 春季2018更新(或更高版本),但未附带 lxrun.exe程序,则可能需要执行此操作。
    若要强制删除旧的 WSL 发行版,请使用 Windows 文件资源管理器或命令行删除 %localappdata%\lxss\ 文件夹(及其所有子内容):

    1
    2
    3
    4
    # 使用Powershell:
    rm -Recurse $env:localappdata/lxss/
    # 使用 Cmd:
    DEL /S %localappdata%\lxss\

这里,我只想说,这些办法都是对的,但是微软的尿性大家都懂,采用默认的卸载工具是绝对卸载不干净的。
直到我看到这篇帖子:

Windows Linux子系统(WSL)删除与重装的问题

原文:

最近在折腾WSL,安装了一个Ubuntu 16和一个18,但是因为有些系统问题一直无法很好的设置,打算卸载了重装,可是按照网上的教程wslconfig /l, wslconfig /u卸载之后,重新通过Windows Store安装总是有问题,Store里面显示这2个APP已经安装过了,只有启动这一个选项,但是点击启动又报错,说没找到相应的文件。重新点击获取也不行,系统显示已下载,但是点击启动却说找不到文件,搞了很久一直无法解决,最终还是查到了一个方案,在Powershell里面通过命令行的方式来解决。
首先要先查看已经安装了哪些软件包:
Get-AppxPackage -allusers | Select Name, PackageFullName
然后可以看到列表里面你想要删除的软件包,执行以下命令来删除,例如要删除Ubuntu16
get-appxpackage CanonicalGroupLimited.Ubuntu16.04onWindows | remove-Appxpackage
完成后重新在Windows Store里面下载应用即可。

wslconfig /l+ wslconfig /u,然后powershell输入上述的Get-AppxPackage+remove-Appxpackage,如果你有win10的卸载工具uninstall或者geek,进入windows应用卸载选项,卸载应用后顺便把对应的注册表删了。

最后使用everthing搜索kaliLinux关键词,将对应的文件全部删除,重启。然后用火绒或dism++之类的清理软件清理一下注册表的垃圾文件。

WSL与VMWare的冲突

VMware新版本是可以和Hyper-V共存的,我用的版本已经是16.1了:

WMWare版本信息

能启用WMWare后,发现会提示为主机启用了侧通道缓解,具体为啥我也不知道哈哈,看解释:

侧信道漏洞 MDS -英特尔® 官网 (intel.cn))

我当然是关掉咯:

更多

WSL对Docker的支持一直很好:WSL 2 上的 Docker 远程容器入门

WSL2比起WSL增加了对cuda的支持,可以用N卡炼丹了:适用于 Linux 的 Windows 子系统中的 GPU 加速机器学习培训

关于储存空间占用问题:搭建 WSL2 下的 Kali 环境(含GUI及空间优化)