Win10下使用WSL2

1、安装

 

打包

wsl --export Ubuntu-20.04 E:\Ubuntu\ubuntu.tar.gz

注销之前

wsl --unregister Ubuntu-20.04

导入

 wsl --import Ubuntu-20.04 E:\Ubuntu\ E:\Ubuntu\ubuntu.tar.gz --version 2

设置默认登陆用户为安装时用户名

ubuntu2004.exe config --default-user dwb

更新清华镜像

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

安装ubuntu-desktop

sudo apt install ubuntu-desktop

安装systemctl

git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh

安装完毕后,输入sudo vi ~/.bashrc,在文件末尾添加:

export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
export XDG_SESSION_TYPE=x11

安装xfce4桌面

sudo apt-get install xfce4 xfce4-terminal #安装xfce4桌面
echo -e "\n##DISPLAY Configuration" >> ~/.bashrc #配置声明
echo "export DISPLAY=127.0.0.1:0.0" >> ~/.bashrc #添加配置
source ~/.bashrc #配置生效
  1. /usr/bin/startxfce4: X server already running on display :0.0

  2. xrdb: Connection refused

  3. xrdb: Can't open display ':0.0'

  4. Unable to init server: Could not connect: Connection refused

  5. xfce4-session: Cannot open display: .

# 首先需要查看Windows系统和WSL2通信使用的虚拟网卡地址
$ sudo vim /etc/resolv.conf
# nameserver后面的地址就是Windows系统虚拟网卡的地址,记一下,同时需要取消下面两行内容的注释,禁用自动重新生成配置文件,否则重启后这个地址会变
[network]
generateResolvConf = false
 
 
$ vim ~/.bashrc
# 在文件最后追加下面内容,地址使用上面查看到的
export DISPLAY=`cat /etc/resolv.conf | grep nameserver | awk '{print $2}'`:0.0
export DISPLAY=192.168.112.1:0//  网址替换为Windows下wsl以太网适配器的ip

VcXsrv下载网址

VcXsrv Windows X Server download | SourceForge.nety

使用MobaX来连接WSL2

  • WSL安装 openssh-server
sudo apt-get install openssh-server
  • 修改WSL2的/etc/ssh/sshd_config

    Port 22
    ListenAddress 0.0.0.0
    PasswordAuthentication yes
    PermitEmptyPasswords yes
    PermitRootLogin yes
    
  • WSL2开启ssh服务 
service ssh restart
  • 检查ssh server是否启动
ps -e | grep ssh

显示有/usr/sbin/sshd才启动

如果只有ssh-agent,说明没有启动,可以通过

  • 设置开机自启SSH
sudo systemctl enable ssh
  • MobaX连接 

2、windows远程桌面连接wsl2

  • 安装远程图形界面
sudo apt install xfce4
sudo apt install xrdp
sudo echo xfce4-session >~/.xsession
sudo vim /etc/xrdp/startwm.sh添加:
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
  •  重启服务
sudo service xrdp restart
  • 输入账户密码进入界面

 

3、导入备份的WSL

方法一

导入的名称与通过商店下载的ubuntu的名称不同时

日常使用中,我们会将部署好开发环境的wsl部署到另一台电脑上来使用。

电脑上不需要从商店安装Ubuntu系统,安装了通过图标来启动的话,就不是要导入的系统了。需要通过命令行启动。

具体步骤如下:

3.1 导入已有系统
#Ubuntu为系统名称; E:\Ubuntu\为要导入的文件夹, D:\Ubuntu20.04.tar为之前打包的文件夹

wsl --import Ubuntu E:\Ubuntu\ D:\Ubuntu20.04.tar --version 2
#查看当前版本
wsl -l -v

#结果
NAME      STATE           VERSION
* Ubuntu    Stopped         2
3.2 修改用户名

通过上面的安装,在Powershell中输入wsl,此时进入后的用户名为root

并且无法使用下面的命令来修改用户名

ubuntu2004.exe config ---default-user dwb

可以通过 

# 定义函数WSL-SetDefaultUser,接收参数distro和user
Function WSL-SetDefaultUser ($distro, $user) { Get-ItemProperty Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\*\ DistributionName | Where-Object -Property DistributionName -eq $distro | Set-ItemProperty -Name DefaultUid -Value ((wsl -d $distro -u $user -e id -u) | Out-String); };

# 调用函数,此处对应发行版名称Ubuntu,用户名为yz: WSL-SetDefaultUser <DistroName> <UserName>
WSL-SetDefaultUser Ubuntu yz

# 取消函数定义
Remove-Item Function:WSL-SetDefaultUser

其思路即修改注册表中相关的键值,即将注册表
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{...}
中的DefaultUid值设置为子系统用户对应的gid值(通过id -u来获取,或者直接查看/etc/passwd文件)。通过定义PowerShell函数,然后调用来实现 。

3.3 结果

在PowerShell中输入code,打开vscode即可。也可通过终端工具连接WSL了

方法二

微软商店下载的Ubuntu名称与使用import时定义的名称一样时

wsl -l -v

#结果
#  NAME            STATE           VERSION
# * Ubuntu-20.04    Running

wsl --import Ubuntu-20.04 E:\Ubuntu\ g:\Ubuntu20.04_ROS2.tar

比如安装了的是Ubuntu-20.04那么import的时候也要使用Ubuntu-20.04.否则使用图标进入WSL的时候就不是导入的系统,就是需要安装的系统。 

4、问题解决

4.1 解决删除文件后 WSL2 磁盘空间不释放的问题 

原因

wsl2下删除文件windows下的硬盘空间是不会变化的,WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

备份(可选)

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 备份指定的 Linux distribution 到指定的位置
wsl --export Ubuntu-20.04 D:\Ubuntu-20.04.tar

如果后续步骤出现错误,可以从备份的文件中恢复。本人后续步骤并没有出现错误,所以并没有实践恢复的操作。

有需要的读者可以参考:wsl2-backup-and-restore-images-using-import-and-export

压缩虚拟磁盘文件

在 PowerShell 中执行:

# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart

在新打开的 DiskPart 命令窗口中执行:

# 选择虚拟磁盘文件(默认位置)
select vdisk file="C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx"

#如果将WSL2移动到其他盘了
select vdisk file="E:\Ubuntu\ext4.vhdx"

# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk

上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值