Arch Linux WSL2 配置记录

参考文章:

在安装 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 的字体设置(这里就不细说了):

安装 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 图形环境

  1. 在 windows 上安装 VcXsrv
  2. 首先找到软件的安装路径,比如 C:\Program Files\VcXsrv,然后对两个可执行文件 vcxsrv.exe 和 xlaunch.exe 进行操作:右键点击可执行文件 –> 属性 –> 兼容性 – > 更改高 DPI 设置 –> 勾选替代高 DPI 缩放行为。如果不做这一步,VcXsrv 的显示效果会不够清晰
  3. 打开软件。Display settings 选择左下的第三个(我通常都选左上的第一个),Display number 输入 23789(前文提到过,如果这个端口被占用了就换一个),然后下一步,下一步
  4. 在 Extra settings 界面,下方的 Additional parameters for VcXsrv 里填写-screen 0 1280x720+100+100以设置窗口大小和位置
  5. 如果使用的是 WSL 2,那么还需要勾选 Disable access control,然后下一步
  6. 你可以 Save configuration 保存配置文件,这样将来就可以双击配置文件直接启动或者开机时自启
    1. 按 win+R 键打开运行窗口,输入shell:startup,回车,会打开一个文件夹
    2. 将配置文件或者它的快捷方式复制进该文件夹,这样开机时就会自启已经配置好的 VcXsrv
  7. 点击完成,这时看到的是黑色的窗口,因为我们还没启动 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 命令补全响应慢

  1. 首先,禁止将 windows 的 path 加进 wsl 中。具体步骤见上文。
  2. 由于在 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$ 访问
本文到这里就结束了,有疑问欢迎评论哦😉
posted @ 2020-03-04 21:08  hyuuko  阅读(8605)  评论(7编辑  收藏  举报