方法一(我没成功)
1、新建wsl-config.bat,内容如下:
::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
wsl -d Ubuntu(这里换成你自己的名称) -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
2、查看wsl系统名称
wsl -l -v
3、将.bat文件(名称随便)放置在不会被删除的地方,我的放在了hosts文件所在目录C:\Windows\System32\drivers\etc
4、打开C:\Users\jenso\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\目录,在此目录下新建快捷方式,(目的是设置开启启动)
5、进入子系统命令窗口,修改hosts文件内容,最下边一行是新增的内容。
6、由于WSL2默认
/etc/hosts每次重启会自动改变,需要添加/etc/wsl.conf,内容如下:
[network]
generateHosts = false
7、最后重启电脑验证
方式二,需要提前安装docker(我这个成功了)
- 1、新建脚本wsl-config.bat,内容如下:
@echo off
setlocal enabledelayedexpansion
::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务
wsl -u root service docker start | findstr "Starting Docker" > nul
if !errorlevel! equ 0 (
echo docker start success
:: 设置wsl2虚拟机ubuntu的ip
wsl -u root ip addr | findstr "192.168.10.101" > nul
if !errorlevel! equ 0 (
echo wsl ip has set
) else (
:: 没有的话给安排上
wsl -u root ip addr add 192.168.10.101/24 broadcast 192.168.10.0 dev eth0 label eth0:1
echo set wsl ip success: 192.168.10.101
)
:: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
ipconfig | findstr "192.168.10.102" > nul
if !errorlevel! equ 0 (
echo windows ip has set
) else (
netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
echo set windows ip success: 192.168.10.102
)
)
pause
2、将.bat文件(名称随便)放置在不会被删除的地方,我的放在了hosts文件所在目录C:\Windows\System32\drivers\etc
3、打开启动菜单目录,我的是在C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\,在此目录下新建快捷方式,指向脚本所在目录。(目的是设置开启启动)
4、由于WSL2默认
/etc/hosts每次重启会自动改变,需要添加/etc/wsl.conf,内容如下:
[network] generateHosts = false
5、最后重启电脑验证
方法三:(和方法二相同,唯一区别是不需要安装docker),脚本内容如下
- 说明:该脚本能够固定ip,同时能够上网,能够启动ssh。
将脚本放入启动文件夹,使得Windows系统开机会自动设置wsl固定ip,开启ssh。 - wsl.bat 文件,内容如下,运行该脚本后 UbuntuIp: 192.168.10.101
@echo off
::强制获取管理员运行权限
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
setlocal enabledelayedexpansion
:: 这里是先停止子系统,可以在cmd中通过wls -l -v查看名称,我的子系统名称为Ubuntu
wsl --shutdown ubuntu
:: 重新拉起虚拟机,并且用root身份,启动ssh服务
wsl -u root service ssh start
if !errorlevel! equ 0 (
:: 设置wsl2虚拟机ubuntu的ip
wsl -u root ip addr | findstr "192.168.10.101" > nul
if !errorlevel! equ 0 (
echo wsl ip has set: 192.168.10.101
) else (
:: 没有的话给安排上
wsl -u root ip addr add 192.168.10.101/16 broadcast 192.168.10.0 dev eth0 label eth0:1
echo set wsl ip success: 192.168.10.101
)
:: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
ipconfig | findstr "192.168.10.102" > nul
if !errorlevel! equ 0 (
echo windows ip has set: 192.168.10.102
) else (
:: 没有的话给安排上
netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
echo set windows ip success: 192.168.10.102
)
)
ping 192.168.10.101
pause
如果报错Unit sshd.service could not be found.可检查ssh是否安装,未安装则先安装ssh使用以下命令安装:
sudo apt-get install openssh-server # 安装
sudo service sshd start # 启动
补充说明:使用方法三后没办法保持wsl一直在后台运行,需要借助以下方法实现
- WIN+R 运行
shell:startup打开启动目录 - 在此目录中创建文件 wsl-startup.vbs
- 在 wsl-startup.vbs 中填充如下内容,Ununtu需替换为你使用的发行版名称。
方式一:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Ununtu", 0
方式二:
' 设置wsl的启动方式:
' -d Ubuntu 指定wsl的版本名称,可通过wsl -l -v查看版本名称
' -u root 指定以root用户启动
' vbhide 在后台保持运行,不显示终端窗口
cmd="wsl -d Ubuntu -u root"
CreateObject("wscript.shell").run cmd,vbhide
参考链接:zhuanlan.zhihu.com/p/612755941 blog.csdn.net/qq_19922839…