参考文章:
在安装 WSL 之前
建议先把文档看一遍:适用于 Linux 的 Windows 子系统文档
如果你选择用 WSL
以管理员身份打开 powershell,运行如下命令以启动需要的组件:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
然后重启。
如果你选择用 WSL 2
WSL 2 要求系统版本应该在 Windows 10, Version 2004, Build 19041 及以上。
以管理员身份打开 powershell,运行如下命令以启动需要的组件:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后重启。并且在 此处 下载并安装适用于 x64 计算机的最新 WSL2 Linux 内核更新包。
打开 powershell,运行如下命令以将 wsl 的默认版本设置为 WSL 2:
wsl --set-default-version 2
基本安装
安装 Windows Terminal
先在 Microsoft Store 安装 Windows Terminal,详见 Windows Terminal 文档
安装 Arch WSL
在yuk7/ArchWSL - releases下载Arch.zip
,解压,双击 Arch.exe 进行安装。详见yuk7/ArchWSL - Wiki。
换源更新
PS: 以下部分都以 root 用户身份运行命令。
passwd # 设置密码
# 设置软件源
echo 'Server = https://mirrors.neusoft.edu.cn/archlinux/$repo/os/$arch' > /etc/pacman.d/mirrorlist
echo 'Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch' >> /etc/pacman.d/mirrorlist
# 添加写保护,防止被修改
chattr +i /etc/pacman.d/mirrorlist
# 初始化 keyring
pacman-key --init
pacman-key --populate
pacman -Syu # 更新
其他镜像源请见通过 Pacman Mirrorlist 生成器生成的国内源列表,用自己学校的更快哦!建议看看 镜像状态列表,使用 Mirror Status 较低的国内镜像站
启用 multilib 库
multilib 库包含 64 位系统中需要的 32 位软件和库。
vim /etc/pacman.conf
,取消这几行的注释:
[multilib]
Include = /etc/pacman.d/mirrorlist
并且取消该文件中#Color
这一行的注释,以启用彩色输出。
添加 archlinuxcn 源
Arch Linux 中文社区仓库 是由 Arch Linux 中文社区驱动的非官方用户仓库。包含中文用户常用软件、工具、字体/美化包等。
vim /etc/pacman.conf
在文件末尾加上:
[archlinuxcn]
Server = https://mirrors.aliyun.com/archlinuxcn/$arch
# 其他的见 https://github.com/archlinuxcn/mirrorlist-repo,最好是用自己学校的
然后:
pacman -Syy
pacman -S archlinuxcn-keyring
创建用户
有需要就创建吧。
注:此处的 yourname 是你要创建的用户名
# 新建用户。-m 为用户创建家目录;-G wheel 将用户添加到 wheel 用户组
useradd -m -G wheel yourname
# 设置密码
passwd yourname
# 因为 visudo 需要 vi
ln -s /usr/bin/vim /usr/bin/vi
# 编辑 /etc/sudoers
visudo
将以下两行行首的#
去掉
# %wheel ALL=(ALL) ALL
# %wheel ALL=(ALL) NOPASSWD: ALL
在 powershell 中进入到 Arch.exe 所在文件夹,设置 WSL 默认登陆用户和默认的 WSL:
.\Arch.exe config --default-user yourname
wsl -s Arch
重新打开,就是在 yourname 用户了。
安装常用软件
PS: 这部分以 yourname 用户身份运行命令。
安装 yay
sudo pacman -S --needed base-devel
出现:: fakeroot is in IgnorePkg/IgnoreGroup. Install anyway? [Y/n]
,选 n,接下来一直回车即可。
sudo pacman -S --needed yay
# yay 换源
yay --aururl "https://aur.tuna.tsinghua.edu.cn" --save
安装其他的一些软件
sudo pacman -S --needed neofetch lolcat bat tokei tree screenfetch
neofetch | lolcat -a
安装 gcc、clang、qemu 等
sudo pacman -S --needed gcc clang lib32-gcc-libs gdb make binutils git openssh man-pages ccls
安装 qemu(有需要就安装吧):
sudo pacman -S --needed qemu-arch-extra
安装 zsh
给 windows 安装以下字体,并且改变 windows terminal 的字体设置(这里就不细说了):
- MesloLGS NF powerlevel10k 作者推荐
- FiraCode NF 我更喜欢这个
安装 zsh 并且将其设置为默认 shell:
sudo pacman -S --needed zsh
# 编辑 /etc/passwd 文件,将 root 用户和 yourname 用户的 /bin/bash 改为 /bin/zsh
# 或者使用 chsh -s /bin/zsh 来改变当前用户的默认shell
sudo vim /etc/passwd
touch ~/.zshrc
# 在yourname用户创建软链接,让root用户也使用yourname用户的.zshrc
# 我觉得这样比较方便
sudo ln -s ~/.zshrc /root/.zshrc
使用 proxychains 代理终端程序
可以使用 windows 的 qv②ray/clash/ssr 等代理软件来代理 wsl 中的程序!先安装 proxychains:
sudo pacman -S --needed proxychains-ng
首先,sudo vim /etc/proxychains.conf
,将proxy_dns
这一行注释。(这样能够让 proxychains 代理 yay)
如果用的是 WSL 1,那就 sudo vim /etc/proxychains.conf
,将最后一行的 socks4 127.0.0.1 9095 修改为:
socks5 127.0.0.1 7890
这个 7890 是我的 qv②ray 的 socks5 端口号,改成你自己的。如果你用的是 WSL 2,由于目前 WSL 2 和 windows 的 ip 不同,我们需要先cp -f /etc/proxychains.conf ~/.proxychains.conf
,然后在~/.zshrc
中添加以下内容:
# 获取windows的ip
export WIN_IP=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`
# 删除 ~/.proxychains.conf 中 [ProxyList] 所在行到文件末尾的全部内容
sed -i '/\[ProxyList\]/,$d' ~/.proxychains.conf
# 往文件末尾添加socks5设置,这个 7890 是我的 qv②ray 的 socks5 端口号,改成你自己的
echo '[ProxyList]\nsocks5 '${WIN_IP}' 7890' >> ~/.proxychains.conf
# 设置别名;使用 ~/.proxychains.conf 作为proxychains的配置文件;让proxychains quiet(不输出一大串东西)
alias pc='proxychains4 -q -f ~/.proxychains.conf'
# 用来手动开关代理,建议走 http 协议,因为 wget 不支持 socks5
my_proxy=http://${WIN_IP}:7891
alias p-on='export all_proxy='${my_proxy}' http_proxy='${my_proxy}' https_proxy='${my_proxy}''
alias p-off='unset all_proxy http_proxy https_proxy'
然后:
# 在 yourname 用户中
sudo ln -s ~/.proxychains.conf /root/.proxychains.conf
source ~/.zshrc
如果你发现还是无法代理,那可能是因为你的代理软件没打开允许来自局域网的连接
选项
注:pc ping google.com
是没有效果的,因为 proxychains 只会代理 TCP。
安装 antigen
注:安装 antigen 时会从 github 下载文件,准备好代理软件。
使用 antigen 管理 zsh 的插件:
pc yay -S antigen
往~/.zshrc
中添加如下内容,以启用历史命令、按键绑定、命令补全、语法高亮、powerlevel10k 主题:
# 初始化 antigen
source /usr/share/zsh/share/antigen.zsh
# Load the oh-my-zsh's library
# oh-my-zsh 会启用历史命令、按键绑定等功能
antigen use oh-my-zsh
# 启用一些 bundle
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions
# Load the theme
antigen theme romkatv/powerlevel10k
# Tell antigen that you're done
antigen apply
然后pc zsh
,antigen 就会给你安装插件,安装完后就会开始让你选择 powerlevel10k 的主题样式,如果没出现,就p10k configure
,我比较喜欢 pure 这个主题。~/.p10k.zsh
是 powerlevel10k 主题的配置文件,项目主页 有详细的介绍。
之后给 root 用户创建软链接:
# 在 yourname 用户中
sudo ln -s ~/.p10k.zsh /root/.p10k.zsh
systemd
WSL 不支持 systemd,但可以使用其他方法运行 systemd。详见systemd/systemctl。之前有 genie-systemd aur 软件包,但现在没了,还好我找到了PKGBUILD。
vim PKGBUILD
,填入如下内容:
# Maintainer: Arley Henostroza <arllk10[at]gmail[dot]com>
# Contibutor: facekapow
pkgname=genie-systemd
_pkgname=genie
pkgver=1.28
pkgrel=1
pkgdesc="A quick way into a systemd \"bottle\" for WSL"
arch=('x86_64')
url="https://github.com/arkane-systems/genie"
license=('custom:The Unlicense')
depends=('daemonize' 'dotnet-runtime>=3.1' 'dotnet-host>=3.1' 'inetutils')
makedepends=('dotnet-sdk>=3.1')
conflicts=('genie-systemd')
provides=('genie-systemd')
source=("${url}/archive/${pkgver}.tar.gz")
sha256sums=('688253faad5e3c40c9277dac00a481f48bc5ed62cf2bc82c2c1234d92604ea96')
prepare() {
tar -xzf ${pkgver}.tar.gz
}
package() {
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
ls -alh
cd genie-${pkgver}/genie
export DESTDIR=$pkgdir
make build
make install
mkdir -p ${pkgdir}/usr/bin
chmod +x ${pkgdir}/usr/libexec/genie
ln -s /usr/libexec/genie/main/genie ${pkgdir}/usr/bin/genie
}
然后进行安装(注意需要和 PKGBUILD 在相同目录)
yay -S daemonize
makepkg -si # 处理依赖并安装
然后就可以使用 genie 了
# 运行 genie -i,让ArchWSL可以正常使用systemd
genie -i
接下来让 ArchWSL 在 windows 开机时,就能够自动genie -i
。
sudo echo 'genie -i' > /etc/init.wsl
sudo chmod +x /etc/init.wsl
在 windows 上创建ArchWSL-init.vbs
文件(这里的 Arch 是该 wsl 发行版的名称,可通过wsl -l
命令查看),文件内容为:
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Arch -u root /etc/init.wsl", vbhide
然后在C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
中新建快捷方式,指向刚才创建的 vbs 文件。这样下次 windows 开机时就会自动在 ArchWSL 中执行genie -i
,然后退出,注意:wsl --shutdown
命令会把 wsl“关机”,所以你 shutdown 之后,需要再手动运行ArchWSL-init.vbs
。
PS: 我打开.vbs 文件的时候出现了Windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。
的错误,解决方法是用Default Programs Editor,把.vbs
的默认程序设置为C:\Windows\System32\wscript.exe
。
安装 xfce4 桌面并启用 X Server 图形环境
安装 xfce4
sudo pacman -S --needed xfce4 xfce4-goodies manjaro-xfce-settings manjaro-release dbus dbus-glib
# 安装过程一路回车就行
# 安装中文字体
sudo pacman -S wqy-microhei
sudo vim /etc/locale.gen
,取消下面两行的注释:
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
然后sudo locale-gen
初始化语言环境。
如果使用的是 WSL 2,在~/.zshrc
中添加以下几行 这个 WIN_IP 是在前面配置 proxychains 时设置的:
export LC_CTYPE=zh_CN.UTF-8
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
export DISPLAY=$WIN_IP:23789.0
不过如果是 WSL1 的话,export DISPLAY 那句应该改成:
export DISPLAY=localhost:23789.0
保存,关闭 wsl,重新打开 wsl。
注:23789 是我随便选的一个端口号,如果下文的步骤中启用 X Server 图形环境时提示端口号被占用就换一个端口号。
启用 X Server 图形环境
- 在 windows 上安装 VcXsrv
- 首先找到软件的安装路径,比如 C:\Program Files\VcXsrv,然后对两个可执行文件 vcxsrv.exe 和 xlaunch.exe 进行操作:右键点击可执行文件 –> 属性 –> 兼容性 – > 更改高 DPI 设置 –> 勾选替代高 DPI 缩放行为。如果不做这一步,VcXsrv 的显示效果会不够清晰
- 打开软件。Display settings 选择左下的第三个(我通常都选左上的第一个),Display number 输入 23789(前文提到过,如果这个端口被占用了就换一个),然后下一步,下一步
- 在 Extra settings 界面,下方的 Additional parameters for VcXsrv 里填写
-screen 0 1280x720+100+100
以设置窗口大小和位置 - 如果使用的是 WSL 2,那么还需要勾选 Disable access control,然后下一步
- 你可以 Save configuration 保存配置文件,这样将来就可以双击配置文件直接启动或者开机时自启
- 按 win+R 键打开运行窗口,输入
shell:startup
,回车,会打开一个文件夹 - 将配置文件或者它的快捷方式复制进该文件夹,这样开机时就会自启已经配置好的 VcXsrv
- 按 win+R 键打开运行窗口,输入
- 点击完成,这时看到的是黑色的窗口,因为我们还没启动 ArchWSL 的桌面。
打开 wsl,运行如下命令以启动桌面:
startxfce4
这时会看到终端打印出一堆彩色的 WARNING、CRITICAL 信息。打开 VcXsrv ,会看有点丑的桌面,点左上角的 所有应用程序 -> 设置 -> 设置管理器 -> 外观,更改样式、图标、字体等等。建议样式选择Matcha-dark-sea
,图标Papirus-Maia
。其他美化我就不折腾了。
一些关于 XLaunch 的文档:
除了 VcXsrv,付费软件X410也可,但是我觉得并没有 VcXsrv 好用。如果你用 X140,记得勾选 Allow Public Acess
选项,并且允许它通过防火墙访问专用和公用网络。
pacman 用法
pacman (简体中文) - ArchLinux wiki
更新
pacman -Syu
:对整个系统进行更新pacman -Syuu
降级一些过于新的软件包
如果你已经使用pacman -Sy
将本地的包数据库与远程的仓库进行了同步,也可以只执行:pacman -Su
安装包
sudo pacman -S 包名
:例如,执行 pacman -S firefox 将安装 Firefox。你也可以同时安装多个包,只需以空格分隔包名即可。添加--needed
选项可以忽略已经安装的软件。sudo pacman -Sy 包名
:与上面命令不同的是,该命令将在同步包数据库后再执行安装。sudo pacman -Sv 包名
:在显示一些操作信息后执行安装。sudo pacman -U 文件
:安装本地包,其扩展名为 pkg.tar.gz。sudo pacman -U http://www.example.com/repo/example.pkg.tar.xz
:安装一个远程包
删除包
sudo pacman -R 包名
:该命令将只删除包,保留其全部已经安装的依赖关系sudo pacman -Rs 包名
:在删除包的同时,删除其所有没有被其他已安装软件包使用的依赖关系sudo pacman -Rsc 包名
:在删除包的同时,删除所有依赖这个软件包的程序sudo pacman -Rd 包名
:在删除包时不检查依赖。
搜索包
pacman -Ss 关键字
:在仓库中搜索含关键字的包。pacman -Qs 关键字
: 搜索已安装的包。pacman -Qi 包名
:查看有关包的详尽信息。pacman -Ql 包名
:列出该包的文件。
其他用法
sudo pacman -Sw 包名
:只下载包,不安装。sudo pacman -Sc
:清理未安装的包文件,包文件位于 /var/cache/pacman/pkg/ 目录。sudo pacman -Scc
:清理所有的缓存文件。sudo pacman -R $(pacman -Qdtq)
# 清除系统中无用的包
如果你要查找包含特定文件的包:
# 同步数据库
pacman -Fy
# 查找包含该文件的包
pacman -F file_name
其他
关于 PATH
在 powershell 中可以通过 wsl 启动 windows 中的 vscode 使得以 remote 的方式打开工作区、文件夹、文件等。(在 windows 中用 wsl 打开 windows 中的软件,有种套娃的感觉呢 ✨)
wsl code 文件夹
如果想要禁止将 windows 的 path 加进 wsl 中,sudo vim /etc/wsl.conf
,添加以下内容:
[interop]
appendWindowsPath=false
然后关闭 wsl,并且在 powershell 中wsl --shutdown
,然后重新打开 wsl 以使改变生效。关于 wsl.conf 详见Automatically Configuring WSL
zsh 命令补全响应慢
- 首先,禁止将 windows 的 path 加进 wsl 中。具体步骤见上文。
- 由于在 windows terminal 里的设置,wsl 的 startingDirectory 可能是
/mnt/c/Windows/System32
,如果是,把以下内容添加到~/.zshrc
中即可。if [ "$(pwd)" = "/mnt/c/Windows/System32" ]; then cd ~ ; fi
WSL 2 内存占用过高
新建文件C:\Users\用户名\.wslconfig
[wsl2]
memory=2GB
swap=0
localhostForwarding=true
Tips
- 从文件资源管理器
\\wsl$
访问