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$ 訪問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM