需要注意的是,開機啟動時獲得ip,可能在wsl成功啟動完成變動,所以有時候發現wsl腳本成功執行,但是ip不正確,這時可以手動執行下那個vbs腳本去更正hosts中的配置。
原因暫時研究了,我目前是寫了個c#服務器自動修改ip, 不忙了再補上吧
獲取wslip的腳本
# 更簡短的 ipaddr=$(ifconfig eth0 | grep 'inet ' | awk '{print $2}')
ipaddr=`ip a s eth0 | sed -rn '3s#^.*net (.*)/20.*#\1#gp'`
sed -i '/ubuntu/d' /mnt/c/Windows/System32/drivers/etc/hosts
echo "$ipaddr ubuntu.wsl" >> /mnt/c/Windows/System32/drivers/etc/hosts
這個腳本就是去獲取wsl中的ip,因為我的wsl網卡是默認的eth0
ubuntu.wsl
是我訪問wsl的域名,搭配docker使用更方便
修改etc
文件權限
點擊C:\Windows\System32\drivers\etc
文件件的右鍵》屬性》安全》高級
更改所有者為Users
,點擊檢查名稱,正常的話,不會有錯誤提示。之后就能正常的編輯權限了
注意一定要給修改權限。之后hosts文件也是同理,不過不用去修改權限主體了,直接修改權限就行了。
參考博客
wsl啟動執行
在子系統中添加啟動腳本
sudo vim /etc/init.wsl
添加最開始的腳本內容
#!/bin/bash
ipaddr=`ip a s eth0 | sed -rn '3s#^.*net (.*)/20.*#\1#gp'`
sed -i '/ubuntu/d' /mnt/c/Windows/System32/drivers/etc/hosts
echo "$ipaddr ubuntu.wsl" >> /mnt/c/Windows/System32/drivers/etc/hosts
設置腳本可執行權限
sudo chmod +x /etc/init.wsl
在Windows中創建腳本
在Windows下 輸入快捷鍵 WIN+R
打開運行窗口並輸入 shell:startup
打開Windows 啟動腳本目錄,在該目錄下新建 linux-start.vbs
Set ws = WScript.CreateObject("WScript.Shell")
ws.run "wsl -u root /etc/init.wsl"
PS: 這地方可能有朋友有多個wsl系統,所以可以使用參數-d
, 具體見參考文檔
可以右鍵單機此腳本進行嘗試執行,看hosts文件是否修改
Windows中的WSL2(子系統)開機啟動配置