
緣起
?VSCode的Remote Development擴(kuò)展正式發(fā)布也有兩個(gè)月了。我正嘗試將開發(fā)環(huán)境逐漸遷移到WSL,但在配置Flutter時(shí),卻發(fā)現(xiàn)WSL的一個(gè)先天硬傷:
?——不能運(yùn)行32位ELF程序。
?怎么辦呢,嘗試升級到WSL2吧......
配置WSL2的系統(tǒng)環(huán)境
系統(tǒng)要求:
- Windows平臺(tái):build版本不低于18917;
- 啟用[虛擬機(jī)平臺(tái)可選組件];
- Hyper-V支持。
1. 升級到Windows Insider Preview
- 打開設(shè)置——更新和安全——Windoows預(yù)覽體驗(yàn)計(jì)劃:
這是已經(jīng)設(shè)置完成的界面:
- 選擇快速預(yù)覽通道;
- Windows更新——檢查更新,等待安裝完成。
當(dāng)前快速預(yù)覽通道最新build版本為18945
2. 開啟[虛擬機(jī)平臺(tái)可選組件]
- 以管理員身份打開powershell并運(yùn)行:
C:\> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
3. Hyper-V支持
家庭版并沒有Hyper-V組件,需要通過外部安裝開啟;
——以下教程參考此處。
- 在文本編輯器里復(fù)制以下代碼并以
*.cmd后綴保存:pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL - 右鍵腳本——以管理員身份運(yùn)行
安裝WSL2
1. 安裝WSL_ArchLinux
?考慮到Ubuntu的系統(tǒng)環(huán)境過于冗雜,故選擇重新安裝ArchLinux(真香);ArchLinux并沒有加入
Microsoft Store,如果選擇其它Linux發(fā)行版本,可直接在Microsoft Store搜索wsl。
——WSL_ArchLinux的安裝教程參考此處
請忽略Surface Go的渣渣配置
2. 升級到WSL2
警告:當(dāng)前版本如果想配置好Remote_WSL擴(kuò)展,請先暫時(shí)跳過此部分流程。
- 在powershell中,運(yùn)行以下命令:
等待數(shù)分鐘后即可升級完成。# 驗(yàn)證WSL發(fā)行版版本 C:\> wsl.exe --list -v NAME STATE VERSION *Arch Running 1 # 將發(fā)行版版本更改為WSL2 C:\> wsl.exe --set-version <Disto> 2 # Distro指WSL發(fā)行版名稱 正在進(jìn)行轉(zhuǎn)換,這可能需要幾分鐘時(shí)間... 有關(guān)與 WSL 2 的主要區(qū)別的信息,請?jiān)L問 https://aka.ms/wsl2
2.1. ——踩到的坑
- 在執(zhí)行轉(zhuǎn)換wsl2的過程中提示:
轉(zhuǎn)換失敗。Exporting the distribution failed bsdtar: Write error
?檢查任務(wù)管理器,發(fā)現(xiàn)在轉(zhuǎn)換過程中會(huì)運(yùn)行bsdtar程序,并在程序目錄下進(jìn)行寫入操作。
?如果你的ArchLinux是通過appx包安裝在C:\Program Files\WindowsApps目錄下,
?bsdtar自然會(huì)被Windows Defender瘋狂阻止......
?(老實(shí)點(diǎn),每次出問題都有你。) - 解決方法:
- 關(guān)掉WD的實(shí)時(shí)防護(hù);
- 或者,別將ArchLinux安裝在
Program Files\目錄下(Install zip package)。
在VSCode中配置Remote_WSL
1. 添加Remote_Development擴(kuò)展
- 在擴(kuò)展中搜索
remote_development并安裝:
@import "./assets/development.jpg"
會(huì)同時(shí)安裝上Remote_SSH、Remote_Containers、Remote_WSL遠(yuǎn)程工作原理:
architecture- 開啟remote后,除了UI和主題插件,其它擴(kuò)展都會(huì)安裝在遠(yuǎn)程機(jī)中,并且擴(kuò)展工具的環(huán)境配置完全依賴遠(yuǎn)程機(jī)的環(huán)境。
- 擴(kuò)展工具會(huì)被安裝在遠(yuǎn)程機(jī)的.vscode-server目錄,
Remote_WSL會(huì)將.vscode-server放在WSL的$HOME目錄下。
2. 連接WSL
- 使用快捷鍵
Ctrl+Shift+P,或點(diǎn)擊界面左下角的按鈕,打開命令面板:remote
-
New Window:使用WSL打開新的窗口; -
Reopen Folder in WSL:將當(dāng)前目錄在WSL中打開; -
New Window Using Distro:選擇一個(gè)已安裝的WSL發(fā)行版打開新窗口;
連接成功后,會(huì)在左下角看到按鈕變成了
-
3. 為WSL安裝擴(kuò)展
- 連接WSL后,已安裝在本地的開發(fā)工具列表會(huì)變成不可用,并提供
Install on WSL:按鈕,點(diǎn)擊即可安裝到WSL:
extensions - 在搜索到的擴(kuò)展頁中,安裝的按鈕也會(huì)變更為
Install on WSL:
3.1. ——踩到的坑
- 盡管遠(yuǎn)程連接操作和功能實(shí)現(xiàn)與WSL1沒區(qū)別,但在當(dāng)前預(yù)覽版本的WSL2中,存在Remote_WSL向WSL2遠(yuǎn)程安裝擴(kuò)展不成功的(災(zāi)難性)bug。
- 解決方法:
?既然Remote_WSL在WSL1中安裝擴(kuò)展沒有問題,且發(fā)行版的WSL1和WSL2版本變更并不會(huì)影響WSL的主機(jī)身份識(shí)別,那解決WSL2安裝擴(kuò)展的問題就如同把大象裝在冰箱里一樣簡單了。
1. 回滾到WSL1:
powershell C:\> wsl.exe --set-version <Distro> 1
2. 使用Remote_WSL在WSL1中安裝好VSCode擴(kuò)展;
3. 升級到WSL2:
powershell C:\> wsl.exe --set-version <Distro> 2
All done.
非重點(diǎn)的小坑
1. 環(huán)境變量
?如果WSL安裝了zsh之類的shell并作為默認(rèn)啟動(dòng),那么在使用Remote_WSL時(shí),VSCode的擴(kuò)展依賴的依舊是bash的環(huán)境變量配置,并不會(huì)啟動(dòng)zsh。
?因此,在設(shè)置如ANDROID_HOME、GOPATH之類的環(huán)境變量時(shí),不要將自定義變量設(shè)置保存在$HOME/.zshrc里。
- 如果希望VSCode和zsh都使用同樣的環(huán)境變量,解決辦法:
- 將環(huán)境變量設(shè)置保存在
$HOME/.profile中,并在$HOME/.zshrc添加如下語句:source ~/.profile - 或者,直接將變量設(shè)置添加在
/etc/profile中。
- 將環(huán)境變量設(shè)置保存在
2. Flutter——android開發(fā)
?在WSL中使用Flutter是我升級到WSL2的動(dòng)因,WSL2確實(shí)解決了運(yùn)行32bit程序的硬傷,但由于WSL2是完全的虛擬機(jī)環(huán)境,也產(chǎn)生了新的問題:
?——android虛擬機(jī)就不能用了。

?老老實(shí)實(shí)用adb接手機(jī)調(diào)試吧。
3. 運(yùn)行Windows可執(zhí)行程序
?當(dāng)前WSL2預(yù)覽版本的bug,不能通過shell打開code、explore之類的windows程序,等待未來版本解決。








