一次不正經(jīng)的Remote_WSL2體驗(yàn)

緣起

?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)境

參考:MicrosoftDocs/wsl2

系統(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)行以下命令:
    # 驗(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
    
    等待數(shù)分鐘后即可升級完成。
2.1. ——踩到的坑
  • 在執(zhí)行轉(zhuǎn)換wsl2的過程中提示:
    Exporting the distribution failed
    bsdtar: Write error
    
    轉(zhuǎn)換失敗。
    ?檢查任務(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中。

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程序,等待未來版本解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容