WSL2 打造頂級開發環境


背景

Linux 桌面容易崩潰,通常沒有主流的辦公軟件

Mac 剛換ARM架構有些兼容性問題,《不能玩游戲,劉海太丑》

Windows 啥都能干,但是powershell 太復雜配置個環境變量都費勁,國內服務器一般使用Linux,powershell 操作起來不太習慣,一些語言都是從類Unix平台移植過來的,運行速度和編譯速度沒有 Linux 快

WSl介紹

微軟近些年一改從前對開源的態度,開始積極擁抱開源,然后就在windows上內置了一個linux子系統簡稱wsl

wsl1 是一個仿真的系統不支持某些內核特性,比如 namespace,唯一的優點就是跨文件系統訪問速度幾乎沒有開銷

wsl2 是基於hyper-v技術的輕量級虛擬機,完整的 linux 內核,啟動只需要幾秒

 

以下操作均在win11 22000下操作

安裝

powershell(管理員)

wsl --install

該命令會自動啟用子系統功能並安裝ubuntu

 

常用配置

全局配置 

配置文件 %UserProfile% .wslconfig

[wsl2]
# wsl虛擬機cpu核數
processors=8

# wsl虛擬機內存
memory=4GB

swap=1GB

# 開啟localhost 訪問
localhostforwarding=true

# 關閉嵌套虛擬化
nestedVirtualization=false

 

分發配置

配置文件/etc/wsl.conf

[automount]
# window 分區掛載文件權限掩碼
options = "metadata,umask=022,fmask=033"

[interop]
# 是否開啟互操作,也就是在linux使用win命令
enabled = true
appendWindowsPath = true

[boot]
# 開機啟動命令一些想開機啟動的命令可以放進來
command = sudo /etc/init.d/start.sh

 

配置支持中文

# 安裝中文包
sudo apt install language-pack-zh-hans -y
# 勾選選en_US.UTF8 zh_CN.UTF8 並設置zh_CN.UTF8為默認
sudo dpkg-reconfigure locales
# 安裝字體配置工具
sudo apt install fontconfig # 拷貝windows字體
sudo cp -r /mnt/c/Windows/Fonts /usr/share/fonts/windows # 或者安裝文泉字體,感覺沒有windows字體看着舒服
sudo apt-get install fonts-wqy-zenhei
# 刷新字體 fc
-cache -f -v

 

安裝GUI應用

sudo apt update

# 安裝常用軟件
sudo apt install gedit nautilus -y

# 安裝輸入法
sudo apt install fcitx fcitx-googlepinyin -y

# 啟動語言檢查,可以完整一下中文環境
sudo echo "sudo /etc/init.d/dbus start" >> /etc/init.d/start.sh
sudo /etc/init.d/dbus start
sudo gnome-language-selector

# 安裝edge瀏覽器
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /usr/share/keyrings/
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge.list'
sudo rm microsoft.gpg
sudo apt install microsoft-edge-stable -y

 

裝好的應用會自動出現在windows的開始菜單,直接在開始菜單啟動即可,除了分辨率有點不對,使用起來很流暢

 

配置中文輸入法

wsl不支持systemd,要想自動啟動fcitx 可以在 ~/.bashrc 加入

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx

if [ $(ps -ef |grep fcitx-dbus-watcher |wc -l) -eq 1 ]; then
  fcitx-autostart >/tmp/fcitx.log 2>&1
fi

 

打開 Fcitx 配置 (Ubuntu)

改一下快捷鍵

 

 

 

安裝Docker

# 安裝docker
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 自動啟動
sudo echo "sudo /etc/init.d/docker start" >>/etc/init.d/start.sh

 

設置固定IP

powershell(管理員)

netsh interface ip add address "vEthernet (WSL)" 192.168.128.254 255.255.255.0

wsl

sudo ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev eth0 label eth0:1

# 開機自動設置
sudo echo "sudo ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev eth0 label eth0:1" >>/etc/init.d/start.sh

 

網絡訪問

win 訪問 wsl

telnet localhost 3306

wsl 訪問 win

telnet 192.168.128.254 3306

win 局域網遠程訪問,假設你的局域網IP為192.168.1.1

netsh interface portproxy add v4tov4 listenport=3306 listenaddress=192.168.1.1 connectport=3306 connectaddress=192.168.128.1

# 遠程主機
telnet 192.168.1.1 3306

 

環境變量配置

  • /u

win 環境變量傳入 linux,這個很好用,即使 wsl 不加載任何用戶環境配置也會傳入

 

  • /w

linux 變量傳入 win

 

  • /p

相互轉換win和linux路徑

 

 

  •  /l

相互轉換win和linux路徑列表

 

 

IDE使用WSL

 VS Code

打開WSL遠程窗口

 

 

 

 

 

 Jetbrains 全家桶

目前 (2022.1)Jetbrains 家的IDE基本上都支持WSL,下面演示一下怎么用Goland + WSL 進行Golang 開發

下載sdk並配置環境變量

cd /data
wget  https://go.dev/dl/go1.18.1.linux-amd64.tar.gz
tar -zvxf go1.18.1.linux-amd64.tar.gz

 

環境變量推薦使用 WSLENV

powershell

[System.Environment]::SetEnvironmentVariable("GO111MODULE","on","User")
[System.Environment]::SetEnvironmentVariable("GOPATH","\\wsl$\Ubuntu\home\zhangsen\go","User")
[System.Environment]::SetEnvironmentVariable("ENV_NAME","dev","User")

[System.Environment]::SetEnvironmentVariable("WSLENV","GOPATH/p:GO111MODULE/u:ENV_NAME/u","User")

 

新建項目

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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