需要注意的是,开机启动时获得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(子系统)开机启动配置