cevalokas

personal website

Not because they are easy, but because they are hard.


wsl2是最好的虚拟机

目录

wsl2yes!

不需要虚拟机劣化,完全利用资源,直接支持GPU,对于开发和学习来说还有更香的选择吗?但是配置比虚拟机困难,很多逻辑没有虚拟机符合直觉。


基本操作

开启 WSL 环境

  • 通过命令行: 在 Windows 的命令提示符(CMD)或 PowerShell 中输入以下命令:

    wsl
    

    或者,如果你有多个 WSL 分发版,可以指定要启动的分发版:

    wsl -d Ubuntu-20.04
    
  1. 通过快捷方式: 你可以在开始菜单中找到安装的 WSL 分发版(如 Ubuntu),直接点击它即可启动。

设为默认

wsl --set-default <Distribution Name>

关闭 WSL 环境

要关闭 WSL 环境,可以使用以下命令:

  1. 退出当前 WSL 会话: 在 WSL 终端中,输入以下命令退出当前会话:

    exit
    
  2. 停止所有 WSL 分发版: 你可以在 PowerShell 中使用以下命令停止所有运行的 WSL 分发版:

    wsl --shutdown
    
  3. 停止特定的 WSL 分发版: 可以指定停止某个具体的 WSL 分发版。在 PowerShell 中使用:

    wsl --terminate <DistributionName>
    

检查 WSL 状态

  1. 列出所有 WSL 分发版: 在 PowerShell 中使用以下命令列出所有已安装的 WSL 分发版及其状态:

    wsl -l -v
    
  2. 查看 WSL 版本: 使用以下命令查看当前 WSL 的版本信息:

    wsl --version
    

列出可用的 Linux 发行版

PowerShell复制

wsl --list --online

查看可通过在线商店获得的 Linux 发行版列表。 此命令也可输入为:wsl -l -o

列出已安装的 Linux 发行版

PowerShell复制

wsl --list --verbose

安装

windows准备

  1. 启用或关闭WINDOWS功能—>勾选3个选项:
    • WINDOWS虚拟机监控程序平台;
    • 虚拟机平台;
    • 适用于LINUX的WINDOWS子系统;
  2. 打开PowerShell(以管理员身份运行):
    wsl --update 
    wsl --shutdown 
    wsl --set-default-version 2 //设置WSL2为默认;
    
  3. 选择合适的Linux镜像下载安装

WSL2备份和还原

在 Windows 子系统 Linux 2 (WSL2) 中备份和还原可以帮助你保存系统的状态和数据。下面是如何进行备份和还原的步骤:

备份 WSL2

  1. 停止 WSL2 实例:确保 WSL2 实例没有在运行。你可以在 PowerShell 或命令提示符中使用以下命令停止所有实例:
    wsl --shutdown
    
  2. 导出 WSL2 实例
    • 使用 wsl --list --verbose 命令查看你的 WSL2 实例的名称。
    • 使用以下命令导出实例:
      wsl --export <发行版名称> <备份文件路径>
      

      例如,如果你有一个名为 Ubuntu 的发行版,并希望将其备份到 C:\WSL2\backup.tar,可以运行:

      wsl --export Ubuntu C:\WSL2\backup.tar
      

还原 WSL2

  1. 导入 WSL2 实例
    • 使用以下命令将备份文件导入到新的 WSL2 实例:
      wsl --import <新发行版名称> <安装路径> <备份文件路径>
      

      例如,如果你想将备份导入为一个新的发行版名为 RestoredUbuntu,并将其安装到 C:\WSL2\Restored,可以运行:

      wsl --import RestoredUbuntu C:\WSL2\Restored C:\WSL2\backup.tar
      
 wsl --import Ubuntu22.04 C:\WSL2\Ubuntu22.04 D:\Ubuntu-22.04-240802.tar\Ubuntu-22.04-240802.tar
  1. 检查和配置
    • 确保新导入的实例按预期工作。你可以启动 WSL2 实例并检查数据是否完整。

通过这些步骤,你可以方便地备份和还原 WSL2 实例。希望这能帮到你!


xfce4-GUI?

原生wsl只有命令行不支持GUI,这显然是不可接受的。 安装命令:

sudo apt update && sudo apt -y upgrade 
sudo apt-get purge xrdp 
sudo apt install -y xrdp 
sudo apt install -y xfce4 
sudo apt install -y xfce4-goodies 

sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak 
sudo sed -i 's/3389/3389/g' /etc/xrdp/xrdp.ini 
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini 
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini 
echo xfce4-session > ~/.xsession 

sudo nano /etc/xrdp/startwm.sh 
!以下这两行注释掉: 
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession 
#exec /bin/sh /etc/X11/Xsession 
!添加这一行: 
# xfce 
startxfce4

启动!

nano ~/.bashrc
	
source ~/.bashrc
sudo /etc/init.d/xrdp start #加入

然后使用Windows远程桌面连接就可以了,ip address查看地址。


交互权限

在 Windows Subsystem for Linux (WSL) 和 Windows 系统之间,权限交互涉及多个层面。以下是对 WSL 和 Windows 交互权限的详细解释:

1. WSL 访问 Windows 文件系统

1.1 文件系统路径

WSL 可以访问 Windows 文件系统,路径通常挂载在 /mnt 下。例如:

  • C: 盘在 WSL 中的路径为 /mnt/c
  • D: 盘在 WSL 中的路径为 /mnt/d

1.2 权限控制

  • WSL 用户权限:在 WSL 中,用户权限基于 Linux 用户模型。普通用户和 root 用户权限不同,类似于标准 Linux 系统。
  • Windows 文件系统权限:文件和目录的权限仍然由 Windows 的 NTFS 文件权限控制。例如,如果一个文件在 Windows 中设置为仅管理员可写,那么即使在 WSL 中以 root 用户运行,也无法写入该文件。
示例

假设在 Windows 中,C:\example\file.txt 的权限设置为只有管理员可写:

# 在 WSL 中查看该文件
cat /mnt/c/example/file.txt  # 如果当前用户有读取权限,可以读取文件内容

# 尝试写入文件
echo "test" > /mnt/c/example/file.txt  # 如果当前用户没有写入权限,则会失败

2. Windows 访问 WSL 文件系统

2.1 文件系统路径

Windows 可以通过文件资源管理器访问 WSL 文件系统,路径类似于:

\\wsl$\<DistroName>\

例如,访问名为 “Ubuntu-20.04” 的 WSL 发行版:

\\wsl$\Ubuntu-20.04\

2.2 权限控制

  • Windows 用户权限:Windows 用户权限控制对 WSL 文件系统的访问。只有 Windows 用户拥有相应权限,才能访问和操作 WSL 文件系统中的文件。
  • WSL 文件系统权限:WSL 文件系统(例如 ext4)具有 Linux 权限模型,包括文件所有者和权限位(读、写、执行)。Windows 用户访问 WSL 文件系统时,这些权限仍然生效。
示例

假设在 WSL 中,文件 /home/user/example.txt 的权限设置为仅所有者可写:

# 在 WSL 中设置文件权限
chmod 600 /home/user/example.txt

在 Windows 中通过文件资源管理器访问 \\wsl$\Ubuntu-20.04\home\user\example.txt,如果当前 Windows 用户不匹配 WSL 文件的所有者,则无法写入该文件。

3. 交互权限的实际应用

3.1 从 WSL 运行 Windows 应用程序

在 WSL 中,可以通过以下命令运行 Windows 应用程序:

/mnt/c/Windows/System32/notepad.exe

WSL 用户权限决定了能否访问和运行该应用程序。

3.2 从 Windows 运行 WSL 命令

可以通过 Windows 命令提示符或 PowerShell 运行 WSL 命令:

wsl ls -la /home/user

执行这些命令时,WSL 中的命令将以配置的 WSL 用户权限运行。

4. 权限示例和冲突解决

示例 1:WSL 中的用户权限

# 在 WSL 中,以普通用户操作
touch /mnt/c/example.txt
# 可能会失败,因为普通用户可能没有在 C:\ 盘根目录创建文件的权限

示例 2:Windows 中的用户权限

# 在 Windows 中,以普通用户操作
echo "test" > \\wsl$\Ubuntu-20.04\home\user\example.txt
# 可能会失败,因为 Windows 用户可能没有对 WSL 文件系统中该文件的写入权限

权限冲突解决

确保在 Windows 和 WSL 中的用户权限匹配。例如,在 Windows 中使用管理员权限,在 WSL 中使用 root 用户权限,以确保最大权限覆盖。


磁盘空间

要确认 WSL 系统占用了多少磁盘空间,可以使用以下几种方法:

没用:

使用 du 命令查看 WSL 目录占用的磁盘空间

  1. 打开 WSL 终端。
  2. 运行以下命令查看整个文件系统的磁盘空间使用情况:
    sudo du -sh /
    
  3. 如果只想查看特定目录(如用户主目录)的磁盘空间使用情况,可以运行以下命令:
    sudo du -sh /home/your_username
    

    使用 wsl --list --verbose 命令

  4. 打开 Windows 命令提示符或 PowerShell。
  5. 运行以下命令查看所有 WSL 发行版及其状态:
    wsl --list --verbose
    
  6. 记下你要查看的发行版名称,然后运行以下命令查看该发行版的磁盘使用情况:
    wsl --distribution <YourDistroName> --exec du -sh /
    

    <YourDistroName> 替换为你的发行版名称。

假设你有一个名为 “Ubuntu-20.04” 的 WSL 发行版,以下是如何查看其磁盘使用情况的示例:

  1. 查看 WSL 发行版列表及其状态:
    wsl --list --verbose
    
  2. 查看 “Ubuntu-20.04” 发行版的磁盘使用情况:
    wsl --distribution Ubuntu-20.04 --exec du -sh /
    

通过这些方法,你可以确认 WSL 系统占用了多少磁盘空间,并根据需要进行管理和清理。 但是很长时间执行不下来且没有响应,还访问拒绝,如果不是忘加进度条就是卡死了

不知道有什么用:

方法 3:在 Windows 中查看 WSL 的磁盘使用情况

WSL 存储在 Windows 文件系统的特定位置,可以通过 Windows 的磁盘管理工具查看它的使用情况。

  1. 打开 Windows 文件资源管理器。
  2. 导航到以下路径(假设你使用的是 WSL2):
    \\wsl$
    
  3. 找到你安装的 WSL 发行版,并检查其大小。 但是整体是0,分目录有大小,很奇怪的算法

有一点用:

方法 2:使用 df 命令查看文件系统的磁盘使用情况

  1. 打开 WSL 终端。
  2. 运行以下命令查看文件系统的磁盘使用情况:
    df -h
    

    这将显示所有挂载点的磁盘使用情况,包括根目录 / 和其他挂载点。 缺了点总结


文件究竟在哪

在 WSL(Windows Subsystem for Linux)中,文件系统和数据存储在一个虚拟磁盘文件中。这些虚拟磁盘文件是 VHD(Virtual Hard Disk)格式。以下是详细的解释和相关信息。

1. WSL 文件存储位置

WSL 1

对于 WSL 1,Linux 文件系统直接映射到 Windows 文件系统。因此,文件存储在 Windows 文件系统中的特定目录中。例如,WSL 1 的文件系统通常位于:

C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\

WSL 2

对于 WSL 2,文件系统存储在一个 VHD 文件中。WSL 2 使用一个轻量级的虚拟机,因此需要一个虚拟硬盘文件来存储其文件系统。

WSL 2 的 VHD 文件通常位于:

C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx

2. WSL 2 的虚拟磁盘文件

ext4.vhdx

在 WSL 2 中,ext4.vhdx 文件是一个虚拟硬盘文件,包含了 WSL 2 的完整文件系统。这意味着所有的 Linux 文件和目录,包括用户的 home 目录、系统目录和安装的软件,都存储在这个 VHDX 文件中。

3. 查看 WSL 2 的存储使用情况

你可以通过以下步骤查看 WSL 2 的存储使用情况:

使用 PowerShell 查看 WSL 2 虚拟磁盘

  1. 打开 PowerShell。
  2. 使用 wsl 命令查看 WSL 发行版列表及其状态:

    wsl --list --verbose
    

    这将显示所有已安装的 WSL 发行版及其当前状态(WSL 1 或 WSL 2)。

  3. 找到你要查看的 WSL 发行版名称,然后检查虚拟磁盘文件的大小:

    Get-ChildItem "C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx"
    

    <YourUsername> 替换为你的 Windows 用户名,将 <DistributionPackageName> 替换为你的 WSL 发行版的包名称。

使用 du 命令查看 WSL 文件系统使用情况

  1. 打开 WSL 终端。
  2. 使用 du 命令查看整个文件系统的磁盘空间使用情况:

    sudo du -sh /
    

    这将显示根文件系统的总磁盘空间使用情况。

4. 调整 WSL 2 虚拟磁盘大小

如果你需要调整 WSL 2 虚拟磁盘的大小,可以使用以下步骤:

压缩虚拟磁盘

  1. 打开 PowerShell 并关闭所有 WSL 终端。
  2. 运行以下命令以压缩指定 WSL 发行版的虚拟磁盘:

    wsl --shutdown
    Optimize-VHD -Path "C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx" -Mode Full
    

    这将压缩虚拟磁盘文件,释放未使用的空间。


wsl2的ubuntu22.04中安装ros2

1、设置编码

sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

2、hosts文件中添加域名解析

nano /etc/hosts

`199.232.96.133 raw.githubusercontent.com`

`199.232.96.133 raw.github.com`

3、设置软件源

sudo apt update && sudo apt install curl gnupg2 lsb-release
 
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
 
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'

4、安装ros2安装包

sudo apt update
sudo apt install ros-humble-desktop

注意:

此处以Ubuntu22.04下安装ROS2 Humble为例,如使用Ubuntu 20.04,请将“humble”改为“foxy。

或者安装基础版

sudo apt install ros-humble-ros-base
apt-get update

5、然后我们还需要安装编译工具colcon

sudo apt install python3-colcon-common-extensions

6、设置环境变量

source /opt/ros/humble/setup.bash

7、安装自动补全工具

sudo apt install python3-argcomplete

8、验证

跑几个例程测试一下: 先运行一个talker:

source /opt/ros/humble/setup.bash

ros2 run demo_nodes_cpp talker

再运行一个Listener

source /opt/ros/humble/setup.bash

ros2 run demo_nodes_py listener