安裝/啟用 WSL 2


如果你現在用的是 Win11 (或者 Win10 21H2), 那麼恭喜你, 你只要系統管理員身分執行以下指令即可 "啟用執行 WSL 並安裝 Linux 的 Ubuntu 發行版本".

wsl --install
Install WSL

WSL 安裝畫面

然後, 記得電腦要重新開機.

舊版 WSL 2 安裝說明


如果你用的是 Win10 ver.2004 但又不想安裝更新, 其實也可以使用 WSL 2 只是步驟很麻煩.

Step 1: 請你以系統管理員身分執行:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

然後, 記得電腦要重新開機.

註一: 這一步其實也可以用圖形介面操作: 請在 Windows 的搜尋框中輸入 "開啟或關閉 Windows 功能" (部份即可, 不必全部輸入), 即可找到 "開啟或關閉 Windows 功能" 這個對話框. 然後勾選 "Windows 子系統 Linux 版" 和 "虛擬機器平台" 這二個功能 (如下圖 1). 系統就會完成安裝並要求重新開機.

Step 2: 重新開機之後還要安裝
WSL2 Linux 核心更新套件 (適用於 x64 電腦).

Step 3: 然後再將 WSL 改為預設使用 WSL 2.

wsl --set-default-version 2

Step 4: 再來, 是到 Windows 的搜尋框上輸入 'store', 連線到 Microsoft Store 去下載 "Ubuntu 發行版" (如下圖2).
下載完成後, (依指示) 啟用 "Ububtu 發行版".

注意: WSL 2 的 Ubuntu 發行版已經升級過一次, 之前 WSL2 預設的 Ubuntu 發行版是 Ubuntu-20.04 版 (目前則是 Ubuntu-22.04). 而且預設的使用者家目錄 (user home directory) 就是使用者在 Windows 的家目錄. 但是目前這個版本已經下載不到了.

Download Ubuntu

下載 Ubuntu 發行版.

WSL 指令常用參數


日常使用


  • 列出已安裝的 Linux distro 及其狀態
    wsl -l -v
    # 或者是
    wsl --list --verbose
    

    輸出範例:

      NAME          STATE           VERSION
      CentOS7       Stopped         2
      CentOS8       Stopped         2
    * Ubuntu        Running         2
      Ubuntu-22.4   Stopped         2
    

    註: 前面有 * 者為預設連線的 distro.

  • 連線至某個已安裝的 <Distro> (使用預設帳號).
    wsl -d <Distro>
    # 或者是
    wsl --distribution <Distro>
    
    新版 WSL2 會一併安裝一個用於啟動該 distro 的執行檔. 執行檔名稱和 distro (相同或類似). 例如: 安裝了 Ubuntu 這個 distro, 就會有 ubuntu.exe 這個執行檔; 而安裝了 Ubuntu-22.04 這個 distro, 就會有 ubuntu2204.exe 這個執行檔. 這些執行檔的路徑是位於 %LOCALAPPDATA%\Microsoft\WindowsApps. 如果沒有意外的話, 這個路徑應該是環境變數 PATH 使用者設定中的第一組, 所以我們不需要自行修改環境變數 PATH. 另外, 它只是一個符號連結 (symlinks), 真正的執行檔位於該目錄下的一個對應的子目錄底下.
  • 使用其他帳號 (連線預設 <Distro>).
    wsl -u <user_name>
    # 或者是
    wsl --user <user_name>
    

    例如:

    wsl -u root
    
  • 在 Windows 裡查詢 Linux <Distro> 的 ip addr
    wsl -d <distro> ip addr show eth0
    

    輸出範例:

    查詢 Linux distro 的 ip address

    查詢 Linux distro 的 ip addr

Windows 與 WSL distro 互動


  • 在 Windows 直接執行某個 Linux 指令 (預設 <Distro>)
    指令多於一個可依 bash 習慣使用 ; (或者 &&, ||) 連結在一起
    wsl <linux-command>
    

    例如: 列出家目錄中所有的檔案資訊:

    wsl ls -al ~

    輸出範例:

    WSL 執行 linux 指令

    指令 wsl ls -al ~ 輸出範例

  • <Distro> 裡, 也可以使用 windows 應用程式.
    # 取得網路設定
    ipconfig.exe /all
    
    # 打開檔案總管
    explorer.exe .
    
    # 使用 Windows 的 ping
    ping.exe google.com
    
  • 混用二者的指令其實也是可以的. 例如在 WSL distro 裡:
    ipconfig.exe | grep IPv4 | cut -d: -f2
    

    或者在 Windows 裡:

    wsl ls -la | FIND /I "CUDA"
    
  • 如果你想在 WSL distro 裡使用 docker, 不用安裝 Linux 版的. 請安裝 Docker Desktop for Windows, 它可以設設定讓 WSL distro 也可以使用 docker 指令.
  • 如果你想在 WSL distro 裡使用 VS Code, 不用安裝 Linux 版的 VS Code, 直輸入:
    code .
    
    系統會自動幫你安裝 VS code Server, 然後啟動 Windows 端的 VS code 起來工作.
    VS Code Server Installed

    自動安裝 VS Code Server

    VS Code connect to Server

    連接上 WSL distro 的 VS Code 圖示

相互存取路徑寫法


  • 在 Windows 存取 <Distro> 內的檔案, 檔案路徑寫法:
    • / 改為 \
    • 前面加一段 \\wsl$\<Distro>

    例如: 想存取自己在的 Ubuntu home 目錄裡的檔案 /home/myName/sample.txt 則應該將檔案路徑改為
    \\wsl$\Ubuntu\home\myName\sample.txt

  • <Distro> 存取 Windows 裡的檔案, 檔案路徑寫法:
    • 磁碟機代號改為 /mnt/<drive>
    • \ 改為 /

    例如: 想存取 D:\Data\mySQL\test.sql 應該改為
    /mnt/d/Data/mySQL/test.sql

設定


  • 設定特定 <Distro> 使用 WSL 2
    wsl --set-version <Distro> 2
    
  • 設定 WSL 預設使用 WSL 2
    wsl --set-default-version 2
    
  • 設定預設連線的 Linux <Distro>
    wsl -s <Distro>
    # 或者是
    wsl --set-default <Distro>
    

進階設定: 啟用 systemd


WSL 預設將 systemd 關閉, 但有許多程式需要 systemd 才能使用. 啟用步驟:

  • 修改 /etc/wsl.conf (第一次此檔不存在)
    sudo vi /etc/wsl.conf
    
    檔案內新增以下二行
    [boot]
    systemd=true
    
  • 退出 distro, 確實停止整個 WSL 行程, 再重新連線該 distro
    wsl --shutdown
    
  • 驗證 systemd 已啟用
    systemctl list-unit-files --type=service
    

使用 GUI


  • 新版的 WSL 核心已經包含執行 GUI 程式必需的元件. 我們只要安裝想用的 Linux GUI 程式即可.
    安裝前一般要先更新一下軟體倉儲的資料:
    # 更新軟體倉儲資料
    sudo apt update
    
    • 安裝 gedit:
      # 安裝 gedit
      sudo apt install gedit -y
      
    • 安裝 giggle:
      # 安裝 giggle (GUI 介面 for Git)
      sudo apt install giggle -y
      
    • 安裝 GIMP:
      # 安裝 GIMP
      sudo apt install gimp -y
      # 修復錯誤訊息 "(gimp:30464): Gtk-WARNING **: 23:59:40.884: Unable to locate theme engine in module_path: "pixmap"
      sudo apt install gtk2-engines-pixbuf
      
    • 安裝 Nautilus:
      # 安裝 Nautilus
      sudo apt install nautilus -y
      
    • 安裝最新版 libreoffice:
      # 安裝最新版 libreoffice
      sudo add-apt-repository ppa:libreoffice
      sudo apt update
      sudo apt install libreoffice -y
      
    • 安裝 vlc:
      # 安裝 vlc
      sudo apt install vlc -y
      
    • 安裝 x11-apps:
      # 安裝 x11-apps
      sudo apt install x11-apps -y
      
    • 安裝 Mozilla Firefox:
      # 安裝 Mozilla Firefox
      sudo apt install firefox
      
      # Mozilla Firefox 安全性更新
      sudo add-apt-repository ppa:ubuntu-mozilla-security/ppa
      sudo apt-get update
      sudo apt-get grade
      
    • 安裝最新版 Mozilla Firefox:
      # 安裝最新版 Mozilla Firefox
      sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A6DCF7707EBC211F
      sudo apt-add-repository "deb http://ppa.launchpad.net/ubuntu-mozilla-security/ppa/ubuntu bionic main"
      sudo apt update
      sudo apt install firefox
      
    • 安裝 Google Chrome:
      # 安裝 Google Chrome
      cd /tmp
      sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
      sudo dpkg -i google-chrome-stable_current_amd64.deb 
      sudo apt install --fix-broken -y
      sudo dpkg -i google-chrome-stable_current_amd64.deb
      
    • 安裝 Microsoft Teams:
      # 安裝 Microsoft Teams
      cd /tmp
      sudo curl -L -o "./teams.deb" "https://teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"
      sudo apt install ./teams.deb -y
      
    • 安裝 Microsoft Edge Dev Browser:
      # 安裝 Microsoft Edge Dev Browser
      sudo curl https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_101.0.1193.0-1_amd64.deb -o /tmp/edge.deb
      sudo apt install /tmp/edge.deb -y
      
  • 遠端桌面 (使用 xrdp + xfce4):
    • 安裝: (注意: 這一套作法 systemd 不可啟動)
      # Update package repo and do upgrade
      sudo apt update && sudo apt -y upgrade
      
      # 清除套件快取
      sudo apt-get purge xrdp
      
      # 安裝套件 xrdp, xfce4, xfce4-goodies
      sudo apt install -y xrdp
      sudo apt install -y xfce4
      sudo apt install -y xfce4-goodies
      
    • 修改設定檔 /etc/xrdp/xrdp.ini: 每個安裝遠端桌面的 Linux distro 都需要一個唯一的 TCP port, 故更動 TCP port 3389.
      sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
      sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
      sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
      sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
      
    • 新增設定檔 ~/.xsession:
      echo xfce4-session > ~/.xsession
      
    • 修改批次檔 /etc/xrdp/startwm.sh:
      sudo nano /etc/xrdp/startwm.sh
      
      以下二行 (在檔案的最後面) 改為註記
      # test -x /etc/X11/Xsession && exec /etc/X11/Xsession
      # exec /bin/sh /etc/X11/Xsession
      
    • 附加以下二行
      # xfce
      startxfce4
      
    • 啟動: (每次 Linux distro 重新啟動時都需要再啟動一次)
      sudo /etc/init.d/xrdp start
      
      在 Windwos 上可以檢查 xrdp 是否正確啟動
      netstat -na | find "3390"
      
      輸出範例
        TCP    [::1]:3390             [::]:0                 LISTENING
      
    • 連線: 使用 Windows "Remote Desktop Connect" (遠端桌面連線) 即可連線 (連線地址為 localhost:3390)
      遠端桌面連線

      使用 "遠端桌面連線" 連線 localhost:3390

      連線告警訊息

      "遠端桌面連線" 連線時的告警訊息

Linux distro 安裝/維護


  • 安裝預設的 Ububtu distro
    wsl --install
    
  • 列出網路上可供安裝的 Linux distro
    wsl -l -o
    # 或者是
    wsl --list --online
    
  • 加裝特定 <Distro> (<Distro> 為 wsl -l -o 列表中的 Linux distro)
    wsl --install -d <Distro>
    
  • <Distro> 關機 (terminate)
    wsl -t <Distro>
    # 或者是
    wsl --terminate <Distro>
    
  • 全部關機 (shutdown WSL)
    wsl --shutdown
    
  • 刪除 (unregister) 某個 <Distro>
    wsl --unregister <Distro>
    

進階維護


  • 新裝好的 distro 或許有許多需要客製的地方, 例如: 更新, 加裝一些套件/安裝包...
    以下是我自己在測試時經常使用的, 所以把它們滙集成一個檔案 new_wsl.sh:
    #! /usr/bin/bash
    # Bash Quick Operation (tab key)
    echo "set completion-ignore-case On" > ~/.inputrc
    # history Related
    echo "
    # Enable Ctrl-R/Ctrl-S key hit for history search
    stty -ixon
    shopt -s extglob
    HISTIGNORE=\"@(clear|history)?( )*\"" >> ~/.bashrc
    
    # Python Related
    sudo apt update; sudo apt upgrade
    sudo apt install python-is-python3
    sudo apt install python3-venv
    
    # Install Newest git
    sudo add-apt-repository ppa:git-core/ppa
    sudo apt update
    sudo apt install git
    
  • 使用 Windows 的家目錄
    上一個版本的 distro 會將使用者的家目錄, 設在 Windows 的家目錄上. 目前版本的 distro 則都設在 /home/<username> 上. 透過修改/etc/passwd檔, 我們可以將它改回原先的設定 /mnt/c/Users/<username>

    動手之前, 建議你先將 /home/<username> 裡的幾個重要檔案拷貝到 /mnt/c/Users/<username>.

    • .bashrc
    • .inputrc (如果有的話)
    • .profile
    • .bash_profile (如果有的話)
    • .bash_login (如果有的話)
    • .ssh子目錄 (如果有的話)

    不過如果你已經安裝了 git for windows, 那麼搬檔案時要小心一些, 因為 git for windows 也會在 Windows 的家目錄 裡產生這些檔案.

    完成修改/etc/passwd檔之後, 需要重啟 WSL.

    sc stop  LxssManager
    sc start LxssManager
    

    /etc/passwd檔的內容類似長這個樣子

    uuidd:x:106:112::/run/uuidd:/usr/sbin/nologin
    tcpdump:x:107:113::/nonexistent:/usr/sbin/nologin
    jackting:x:1000:1000:,,,:/home/jackting:/bin/bash
    
  • 搬動 <Distro> 的 Disk Image
    • WSL 的 Linux distro 檔案系統在 Windows 中檔名固定為 ext4.vhdx
    • 從 Microsoft Store 安裝的 WSL distro 是存放在以下位置
      %LOCALAPPDATA%\Packages\
      • distro Ubuntu 存放在子目錄
        CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\
      • disstro Ubuntu 22.04 存放在子目錄
        CanonicalGroupLimited.Ubuntuon22.04_79rhkp1fndgsc\LocalState\

    想要搬個家需要三個步驟:

    1. export fs image of <Distro>
    2. unregister <Distro>
    3. import fs image of <Distro>
    # Step 1: export
    mkdir D:\backup
    wsl --export <Distro> D:\backup\<distro>.tar
    
    # Step 2: unregister
    wsl --unregister <Distro>
    
    # Step 3: import
    mkdir D:\wsl
    wsl --import <Distro> D:\wsl\ D:\backup\<distro>.tar
    
    rmdir D:\backup
    

arrow
arrow

    MagicJackTing 發表在 痞客邦 留言(0) 人氣()