☰
VMware虚拟机安装Ubuntu 20.04:开发环境搭建与ROS配置指南
2026/9/30 19:48:36 网站建设 项目流程

1. 虚拟机里跑 Ubuntu 20.04,这套方案到底解决什么问题

在 VMware 虚拟机中安装 Ubuntu20.04,说白了就是在 Windows 或 Linux 主机上开一块"软件模拟出来的电脑",把 Ubuntu 20.04 这套操作系统装进去。它不碰你的物理硬盘分区表,不修改开机引导,卸载的时候把文件夹一删就干净了。这套路子最适合三类人:一是刚接触 Linux、怕把主力机搞崩的新手;二是需要 Ubuntu20.04 这个特定版本跑老项目的人,比如做机器人开发、跑 ROS Noetic、复现某些视觉算法的同学;三是同时要在 Windows 下办公、又要在 Linux 下敲代码的双机党。

我自己前后在四台机器上重复装过这套环境,从机械硬盘时代装到现在的 NVMe,中间踩过的坑比装成功的次数多。所以这篇不讲教科书式的"下一步下一步",而是把每一步背后"为什么要这么选"讲清楚,尤其是那些新手照着图文教程点完、重启之后才发现不对劲的地方。装完之后,你应该能得到一台开机 30 秒进桌面、能上网、能跟主机互相拖文件、能装 ROS 和各类开发工具的完整 Ubuntu20.04 虚拟机。

2. 动手之前,先把方案想明白

2.1 双系统和虚拟机,到底该选哪个

很多人一上来就纠结"我该装双系统还是虚拟机"。这两个方案解决的不是同一件事。

双系统是把 Ubuntu 直接装在物理硬盘上,开机时选进哪个系统。好处是性能无损,显卡、CPU、内存都是实打实的,跑深度学习、做 3D 渲染、玩对帧率敏感的东西必须这么干。代价是分区操作有风险,一旦引导项写坏,Windows 可能进不去;切换系统要重启;给 Ubuntu 分的磁盘空间是固定的,Windows 那边用不了。

虚拟机则是在主机系统里跑一个完整的虚拟硬件环境。性能大概有 10% 到 30% 的损耗,图形性能损失更大,但对绝大多数开发场景完全够用——写代码、跑服务、编译项目、做实验、学生交作业,虚拟机开箱即用。而且它能随手打快照,装崩了一键回滚,这是双系统给不了的。

注意:如果你的目标是跑大型神经网络训练、做视频剪辑,或者需要直接调用物理显卡的 CUDA 算力,别在虚拟机里耗时间,直接上双系统或者物理机装 Ubuntu。虚拟机里的显卡是模拟出来的,装物理显卡驱动没有任何意义,这一点第 7 章会详细说。

2.2 主机硬件怎么盘算,才不至于卡成 PPT

虚拟机跑得顺不顺,主要看主机的三样东西:内存、硬盘、CPU 核心数。

内存是硬指标。Ubuntu 20.04 的 GNOME 桌面,开机空载大概吃 800MB 到 1.2GB。你要跑 ROS、开浏览器、编译代码,4GB 是能跑但难受,8GB 是比较舒服的档位。分配原则是:给虚拟机留出主机总内存的 40% 到 50%。主机 16GB,给虚拟机 6GB 到 8GB;主机 8GB,最多给 4GB,再多主机自己就开始狂读硬盘了。

硬盘要分清"容量"和"类型"两件事。容量上,Ubuntu 系统本体装完大概 8GB 到 10GB,加上 ROS 全家桶、各类 SDK、数据集,建议虚拟磁盘给 60GB 起步,做视觉项目直接给 100GB。类型上,机械硬盘装虚拟机会让你怀疑人生,固态硬盘是刚需。如果你主机是"小容量固态 + 大容量机械"的组合,虚拟机文件务必放在固态上,哪怕只有 256GB 也要挤一挤。

CPU 核心方面,虚拟机分配的核心数不要超过主机的物理核心总数。主机是 8 核 16 线程,给虚拟机 4 个核心是比较合理的;主机是 4 核 8 线程,给 2 个就够。分配超过物理核心数反而会因为调度竞争变慢。这个细节很多人不注意,以为核越多越快。

2.3 版本选型:为什么偏偏是 20.04

Ubuntu 的版本号是"年份.月份",20.04 就是 2020 年 4 月发布,代号 Focal Fossa,属于 LTS 长期支持版本。LTS 每两年发一次,标准支持五年。

选 20.04 的人,绝大多数是被生态绑架的。ROS 的 Noetic 版本官方只支持 Ubuntu 20.04,这是最后一个支持 Python 3 的 ROS1 版本,大量机器人项目和实验室代码都停在这个组合上。ORB-SLAM3、Cartographer 这类视觉和激光建图项目,官方文档和社区教程也基本以 20.04 为基准。另外一些企业内网工具、老版本的编译工具链,也是点名要 20.04。

如果你没有这些历史包袱,纯粹是想学 Linux,那建议直接上 22.04 或 24.04,桌面更现代,软件源里的包更新。但如果你是要复现某个 2021 到 2023 年之间的项目,跟着教程走 20.04 会省掉一大堆"这个包在新系统上装不上"的麻烦。

提示:Ubuntu 20.04 的标准支持周期是到 2025 年 4 月,之后进入 ESM 扩展安全维护阶段,普通用户可以通过 Ubuntu Pro 免费订阅个人设备获取后续安全更新。装在虚拟机里做实验,这个影响不大,但如果是长期在用的开发环境,建议规划一次迁移。

3. 准备工作:镜像、软件与主机环境

3.1 镜像下载与完整性校验,别省这一步

Ubuntu 20.04 的镜像要从官方渠道拿。搜索"Ubuntu 官网下载",进到 Download 页面,选 Desktop 版本,20.04 现在在"其他下载"或者历史版本区域里。文件大概 3.5GB 到 4GB,名字类似ubuntu-20.04.6-desktop-amd64.iso。后缀里的6表示这是 20.04 的第 6 个小版本更新,包含了截至发布时的所有安全补丁,装完能少下一大堆更新。

下载页面同时会提供 SHA256 校验值,这一步千万别跳过。镜像动辄 4GB,中途网络抖动导致文件损坏是很常见的事,装到一半报"解压失败"或者装完系统各种诡异报错,八成是镜像坏了。

Windows 下校验,打开 PowerShell,进到镜像所在目录:

Get-FileHash .\ubuntu-20.04.6-desktop-amd64.iso -Algorithm SHA256

Linux 或者 WSL 下:

sha256sum ubuntu-20.04.6-desktop-amd64.iso

把输出的字符串跟官网上那一长串对比,只要有一个字符不一样就重新下载,别抱侥幸心理。

另外,建议把镜像顺手再做一个"副本"——很多人装到一半发现虚拟光驱还挂着 ISO,重启后系统又进安装界面,就是因为没"断开连接"。用完之后记得在虚拟机设置里把 CD/DVD 的 ISO 路径清空。

3.2 VMware Workstation Pro 的安装与授权怎么处理

VMware Workstation Pro 17 是目前的主流版本,Broadcom 收购之后,官方开放了个人用户免费使用的通道:注册一个 Broadcom 账号,在支持页面里能找到个人使用的下载链接和对应的授权方式。这比到处找"密钥"靠谱得多,也避免了来源不明的安装包。

安装过程本身没什么难度,双击 exe 一路下一步,中间会让你选安装路径和"增强型键盘驱动",都保持默认即可。装完重启一次主机。

有几个细节值得说。第一,安装路径别放在中文目录下,VMware 对中文路径的兼容性时好时坏,出问题时排查起来很费劲。第二,如果主机上装了 WSL2 或者 Docker Desktop,它们会启用 Windows 的虚拟化平台功能,早期版本的 VMware 会因此报错甚至主机蓝屏,17.x 版本已经能较好共存,但如果遇到问题,优先检查这一块。第三,运行 VMware 时如果提示权限不足、修复组件时提示"需要管理员权限",直接右键"以管理员身份运行",这是 Windows 权限隔离导致的,不是软件坏了。

3.3 主机侧的三项检查

开启 BIOS 虚拟化。这是虚拟机能不能跑的前提。任务管理器 → 性能 → CPU,右下角看"虚拟化"是不是"已启用"。如果显示"已禁用",重启进 BIOS,找 Intel VT-x 或 AMD-V 的开关打开。不同主板叫法不一样,华硕叫 SVM Mode,戴尔叫 Virtualization,惠普叫 VT-x/AMD-V,翻一翻就找到了。

检查磁盘空间和路径。虚拟机文件建议集中放在一个专门目录,比如D:\VMs\,不要放在桌面或者系统盘。原因有两个:一是虚拟机文件会随使用不断长大,放系统盘容易撑爆;二是桌面目录经常被各种同步软件扫描,几万个小文件被反复读取,性能会掉得厉害。

规划虚拟机命名。建议用"系统+用途+版本"的方式,比如ubuntu2004-ros-work、ubuntu2004-test。以后机器多了你就知道这个习惯有多重要,Ubuntu 64 位、Ubuntu 64 位 副本、Ubuntu 64 位 副本 2这种命名,三个月后你自己都不知道哪个是哪个。

4. 新建虚拟机:参数选择的门道

4.1 向导里几个容易点错的选项

打开 VMware,文件 → 新建虚拟机,会问你"典型"还是"自定义"。新手直接选"典型",它能覆盖 90% 的场景。但有两个地方必须手动改。

第一个是"安装来源"这一步。向导默认选"安装程序光盘映像文件",你选了 ISO 之后,它会启用"简易安装"——自动帮你填用户名密码、自动分区、自动装 VMware Tools。听起来很爽,但简易安装经常出问题:用户名可能不符合 Ubuntu 的命名规则、自动分区把磁盘切得很奇怪、装完桌面环境是残缺的。所以强烈建议选"稍后安装操作系统",让它先建好空虚拟机,再从 ISO 手动走一遍完整安装流程。

第二个是客户机操作系统的选择。选 Linux,版本选 Ubuntu 64 位。注意要选 64 位,选错成 32 位会导致后面分配内存时上限被卡在 3GB 左右,而且装不上 64 位内核。

处理器配置:数量给 1,每个处理器的核心数量给 2 到 4。这个"处理器数量"对应的是物理 CPU 插槽,虚拟机里给 1 就够,给多了反而会让 Linux 内核的调度逻辑做一些不必要的判断。

内存给 4096MB 起步,8GB 主机给 4GB,16GB 主机给 6GB 到 8GB,32GB 主机可以给 12GB。

4.2 磁盘类型、容量与单文件多文件之争

磁盘这一步,向导会问你三件事:磁盘类型、容量、存储方式。

磁盘类型:默认是 SCSI,保持默认就行。SCSI 在 VMware 里的兼容性最好,性能也稳。NVMe 虽然理论更快,但在老版本 VMware 上需要额外配置,收益在开发场景里感知不明显。

容量:给 60GB 到 100GB。这里有个新手最容易误解的地方——这个容量是虚拟磁盘的"上限",不是立刻占用。你给 100GB,实际装完系统可能只占 12GB,剩下的空间跟着你实际写入的数据慢慢涨。

存储方式:单文件还是多文件。单文件是一个大的 vmdk,读写连续性好,性能略高,但单个文件可能几十上百 GB,备份和移动很麻烦。多文件是切成若干 2GB 的小文件,方便拷贝和迁移,性能差异在现代固态上几乎感知不到。我的建议是选多文件,因为虚拟机最大的价值就是可迁移、可备份,为了那一点点性能让备份变得痛苦不值当。

另外记得勾选"将虚拟磁盘存储为单个文件"旁边的那个选项不要勾——也就是选"拆分成多个文件"。还有"立即分配所有磁盘空间"不要勾选,勾了会立刻占满 100GB。

4.3 网络模式三选一,选错后面全是坑

这一步是新手最容易踩坑的地方,我单独拎出来说。VMware 提供三种主要网络模式:

模式虚拟机能不能上网主机能不能访问虚拟机局域网其他机器能不能访问适用场景
桥接(Bridged)能,且虚拟机是局域网里的独立设备能,直接 ping IP能需要被外部访问的服务、模拟真实服务器
NAT能,通过主机转发能(默认可以 ping,反向访问需端口转发)不能日常开发、学习,最省事
仅主机(Host-Only)不能上外网能不能做隔离实验、断网测试

默认选 NAT,它能上网,主机也能直接连虚拟机,路由器不会因为你多出一台设备而分配额外 IP。什么时候用桥接?当你的虚拟机要跑一个网站,需要让办公室同事或者手机也能访问时,桥接是最省事的方案,虚拟机会拿到一个和主机同网段的 IP,别人直接访问这个 IP 就行。

需要提醒的是,NAT 模式下主机访问虚拟机的服务,默认是通的(虚拟机 IP 一般是 192.168.x.x 的私有段,主机能直接访问)。但如果反过来,你想让局域网的另一台电脑访问虚拟机,就得在 VMware 的"虚拟网络编辑器"里配置 NAT 端口映射,把主机的某个端口转发到虚拟机的端口上,配置项叫"添加映射入站端口",操作不算复杂但容易忘。

5. 安装 Ubuntu 20.04 的完整实操记录

5.1 引导界面与分区方案

虚拟机建好之后,在设置里把 CD/DVD 指向下载好的 ISO 文件,勾选"启动时连接",然后点"开启此虚拟机"。

启动后会先看到 GRUB 菜单,直接回车选第一项。接着是语言选择,这里建议选English,不要选中文。原因很实际:中文安装界面的字体渲染在小窗口里经常糊成一团,而且安装阶段的报错信息用英文搜索更容易找到答案。装完系统之后再装中文语言包完全可以。

键盘布局选 English (US),然后会问你"是否更新安装程序",选"继续"跳过,或者选"现在更新"但要等很久,通常没必要。

分区这一步是新手最紧张的。安装类型界面给几个选项:

  • 清除整个磁盘并安装 Ubuntu:对虚拟机来说,这个选项完全安全,因为"整个磁盘"就是那块虚拟出来的 100GB 虚拟磁盘,碰不到你的物理硬盘。新手直接选这个最省事。
  • 其他选项(手动分区):适合想练手或者有特定布局需求的人。

如果你选手动分区,一个比较稳妥的方案是这样的:

挂载点大小类型说明
/40GBext4根目录,系统本体和大部分软件
swap4GBswap交换分区,内存不够时兜底
/home剩余全部ext4个人数据,重装系统时可以保留

再多说一句 swap。如果你的虚拟机内存给到了 8GB 以上,swap 可以只给 2GB,甚至不单独分区,系统会默认创建一个 2GB 的 swapfile。但如果内存只有 4GB,还要编译大项目,swap 给 4GB 到 8GB 能救命。

分区界面的"安装启动引导器的设备"保持默认的那个磁盘,别动。

5.2 用户、时区与安装加速

分区之后是时区选择,地图上点一下中国的位置,或者直接搜索 Shanghai。时区选错的影响是系统时间和日志时间全乱,后面配置一些对时间敏感的服务会出错。

然后是创建用户。这里有几个规则要注意:用户名只能是小写字母、数字和连字符,不能有大写字母、不能有空格、不能以数字开头。密码建议设一个自己记得住的,因为后面 sudo 提权会频繁用到。可以选择"自动登录"让虚拟机用起来更方便,但如果这台虚拟机会存一点敏感数据,还是老老实实每次输密码。

接下来是关键的一步——安装过程开始前,界面上有个"安装 Ubuntu 时下载更新"和"安装第三方软件"的勾选框。我的建议是:

  • "安装 Ubuntu 时下载更新":取消勾选。勾选之后安装程序会在装系统的同时去官方源拉更新,那个速度在国内可能慢到让你以为死机了。装完之后换国内镜像源再更新,速度快十倍。
  • "为图形或无线硬件安装第三方软件":勾选。这里面包含了显卡、网卡等设备的一些固件和驱动,虚拟机虽然用不太上,但勾上不影响,还能省掉以后手动装的麻烦。

点击"现在安装",确认分区写入,然后就是等。固态硬盘上大概 8 到 15 分钟,机械硬盘可能 30 分钟往上。装完之后点"现在重启",同时记得在重启时进入虚拟机设置,把 CD/DVD 里的 ISO 取消挂载或者改成"自动检测",否则重启又会进安装界面,很多人会在这里懵住。

5.3 首次启动后的收尾动作

重启进入桌面后,先做三件事。

第一,换软件源。打开"软件和更新"(Software & Updates),在"Ubuntu 软件"标签页里找到"下载自",点开选择"其他站点",选一个国内镜像站,比如清华的mirrors.tuna.tsinghua.edu.cn、阿里云的mirrors.aliyun.com、中科大的mirrors.ustc.edu.cn。选完会提示重新加载软件列表,点确认。以后apt install的速度会从几十 KB 每秒变成几 MB 每秒。

如果想用命令行换源,直接编辑/etc/apt/sources.list:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's|http://archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo sed -i 's|http://security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list sudo apt update

先备份再改,这是个好习惯。改坏了把备份文件复制回去就行。

第二,更新系统:

sudo apt update && sudo apt upgrade -y

第一次更新可能会有几百个包,耐心等。

第三,装几个基础工具:

sudo apt install -y build-essential git curl wget vim net-tools openssh-server

build-essential是编译工具链,后面装任何需要编译的软件都绕不开它;openssh-server是让你能从主机用 SSH 连进来,比在虚拟机窗口里敲命令舒服得多;net-tools提供ifconfig这类老牌网络命令,虽然现在推荐用ip命令,但很多教程还在用老的。

6. 桌面体验补全:工具、显示与文件共享

6.1 open-vm-tools 和官方 VMware Tools 怎么选

装完系统如果不装工具,你会立刻感受到三个问题:分辨率固定在 800x600 改不了、鼠标滑进滑出虚拟机要按快捷键、主机和虚拟机之间不能复制粘贴。

解决这些问题需要装 VMware Tools。它有两条路:一条是 VMware 菜单里那个"安装 VMware Tools",它会挂载一个虚拟光驱,里面有个 tar.gz,解压出来手动编译;另一条是直接用 Ubuntu 官方源里的开源版本:

sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop sudo reboot

强烈建议走第二条路。open-vm-tools是 VMware 把这套工具开源之后,由各大发行版维护的版本,跟系统集成得更好,能用 apt 直接升级,不需要装内核头文件、不需要手动编译。官方那个手动编译的版本,在新内核上经常编译报错,网上流传的"继续运行脚本未能在虚拟机中成功运行"这个报错,十有八九就是在手动编译旧版 VMware Tools 时出现的。用 open-vm-tools 根本不会遇到这个问题。

open-vm-tools-desktop这个包是关键,它负责图形界面的增强:自动调整分辨率、剪贴板共享、拖拽文件。只装open-vm-tools是个纯命令行版本,桌面用户一定要带上-desktop。

如果你用的是 Ubuntu Server 版本(没桌面环境),只装open-vm-tools就行,装 desktop 版会拖进来一堆图形库。

6.2 分辨率自适应和主副屏设置

装完open-vm-tools-desktop重启,你会发现虚拟机的分辨率能跟着窗口大小自动变了:窗口拉大,桌面跟着变大;按 Ctrl+Alt+Enter 进全屏模式,分辨率会自动切到跟主机屏幕一致。

如果没有自动变,可以在"设置 → 显示"里手动选分辨率,或者在终端里用xrandr手动添加一个模式:

xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync xrandr --addmode Virtual1 "1920x1080_60.00" xrandr --output Virtual1 --mode "1920x1080_60.00"

这套命令的原理是先算出一组符合 VESA 标准的时序参数,把它注册成一个新模式,再挂到虚拟显示器上。看起来有点玄学,其实就是告诉虚拟显卡"我允许你输出这个分辨率"。不过说实话,装好 open-vm-tools 之后绝大多数情况下不需要手动折腾这个。

至于"主副屏",虚拟机本身是单显示器的。如果你想让虚拟机也用上主机的双屏,在"设置 → 显示"里把"显示器"数量从 1 改成 2,虚拟机里就会多出一个虚拟显示器,然后可以在虚拟机的"设置 → 显示"里安排哪个在左边哪个在右边。不过虚拟机跨双屏用起来体验一般,窗口拖拽的边界处理不如主机原生。

6.3 共享文件夹与主机访问虚拟机服务

共享文件夹是虚拟机和主机之间传文件最方便的方式。配置位置在虚拟机设置 → 选项 → 共享文件夹,选"总是启用",然后添加一个主机的目录,比如D:\share,给它起个名字。

在虚拟机里,共享目录默认挂载在/mnt/hgfs/下面,进去就能看到:

ls /mnt/hgfs/

如果目录是空的,说明挂载没成功。先确认open-vm-tools-desktop装了、虚拟机重启过。还不行的话手动挂一次:

sudo mkdir -p /mnt/hgfs/share sudo /usr/bin/vmhgfs-fuse .host:/share /mnt/hgfs/share -o allow_other -o uid=1000

uid=1000是让你这个普通用户有权限读写,不加的话目录属性会是 root,编辑文件很麻烦。想开机自动挂载,把配置写进/etc/fstab:

.host:/share /mnt/hgfs/share fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000,defaults 0 0

关于"主机访问虚拟机的网站",这是很常见的需求。搞法分两种:NAT 模式下,虚拟机 IP 一般是 192.168.x.x 这样的私有地址,主机浏览器直接输这个 IP 加端口就能访问,比如http://192.168.168.128;如果想让局域网其他设备访问,就切桥接模式,虚拟机拿到路由器分配的 IP,别人也能访问。实在不想改网络模式,就在虚拟网络编辑器里配 NAT 端口转发。

提示:虚拟机里跑的 Web 服务如果监听的是127.0.0.1,外部是访问不到的,必须让它监听0.0.0.0。这个问题 90% 的新手都会遇到,以为是网络配置错了,其实改一行配置就行。

6.4 中文语言环境的正确装法

网上经常能看到"虚拟机汉化包下载"这种说法,这是个误区——Ubuntu 根本不需要额外下载什么汉化包,中文语言包就在官方的软件源里。

正确做法是:打开"设置 → Region & Language",在"Manage Installed Languages"里,第一次打开会提示"语言支持不完整",点安装。装完之后点"Install / Remove Languages",在列表里找到 Chinese (Simplified),勾选,应用。完成后把它拖到语言列表的第一位,重启系统。

命令行等价的操作是:

sudo apt install -y language-pack-zh-hans language-pack-gnome-zh-hans sudo apt install -y $(check-language-support)

装完之后可能还需要处理中文输入法。Ubuntu 20.04 默认的输入法框架是 IBus,可以装ibus-libpinyin:

sudo apt install -y ibus-libpinyin

然后在"设置 → Region & Language → 输入源"里添加"汉语(智能拼音)"。

顺便提一句,中文环境下有个经典坑:如果主目录下的目录名也变成了中文("桌面""下载""文档"),很多命令行操作和脚本会不适应。可以在装完语言包后执行:

export LANG=en_US.UTF-8 xdg-user-dirs-update --force

这样目录名会保持英文,界面语言仍然是中文,两边都不耽误。

7. 开发环境落地:几个绕不开的高频场景

7.1 ROS Noetic 的安装要点

ROS Noetic 是 ROS1 的最后一个版本,官方支持 Ubuntu 20.04,这是很多人死守 20.04 的根本原因。标准安装流程是先配置软件源:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install -y curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install -y ros-noetic-desktop-full

ros-noetic-desktop-full是个大包,包含 rviz、gazebo、导航栈、感知库,装完大概 2GB。如果只是做基础的节点通信练习,装ros-noetic-desktop就够;只写纯计算节点的话ros-noetic-ros-base更精简。

装完之后初始化:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential sudo rosdep init rosdep update

rosdep init这一步在国内网络环境下大概率会失败,报"website may be down"。解决办法有两个:一是换个网络环境重试;二是手动创建配置文件。手动方式是:

sudo mkdir -p /etc/ros/rosdep/sources.list.d sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.tuna.tsinghua.edu.cn/rosdistro/rosdep/sources.list.d/20-default.list

然后修改/etc/ros/rosdep/sources.list.d/20-default.list里的地址,把 github 的域名替换成镜像站的对应路径。改完再执行rosdep update。

注意:镜像地址会随时间变化,如果按上面的方式失败,去你使用的镜像站搜索"rosdistro"找最新的路径。这类配置的通用思路是——官方源慢就换镜像,镜像路径变了就重新查,别死磕一个过期链接。

装完 ROS,roscore能启动就是成功了。第一次启动roscore会有点慢,正常现象。

7.2 显卡驱动:虚拟机里的性能天花板在哪

这一节是重点,因为搜"ubuntu20.04 安装显卡驱动"的人特别多,而在虚拟机里装物理显卡驱动是个典型的坑。

在 VMware 虚拟机里,你看到的"显卡"是 VMware SVGA II,一块虚拟出来的显示设备,走的是 Linux 内核自带的vmwgfx驱动。它没有独立的显存,没有 CUDA 核心,唯一的任务是把画面渲染出来。

如果你在虚拟机里执行:

sudo apt install nvidia-driver-535

运气好的话装完没有任何效果,nvidia-smi会报"找不到设备";运气不好的话,重启之后图形界面直接起不来,只能进恢复模式卸载驱动。因为这个驱动是给 NVIDIA 物理显卡用的,虚拟机上根本没有对应的硬件,装了纯属给自己添麻烦。

那虚拟机能跑 CUDA 吗?默认不能。要让虚拟机用上物理显卡的算力,需要做 GPU 直通(PCI Passthrough),这要求主机 BIOS 支持 IOMMU/VT-d,把整块显卡分配给虚拟机独占,主机自己就不能再用这块卡输出了。配置过程涉及内核参数、设备绑定、虚拟机 vmx 文件修改,属于进阶操作,而且笔记本上的独立显卡通常不支持(因为输出还连着核显),折腾成本很高。

所以结论很清楚:在虚拟机里做深度学习训练是不现实的。如果你要跑的是 ORB-SLAM3 这类以 CPU 为主的视觉 SLAM 项目,虚拟机完全可以胜任,它主要吃 CPU 单核性能和内存。如果项目里有基于 TensorRT 或者大规模网络推理的部分,要么上双系统,要么用云上的算力资源。

顺带说一下 ORB-SLAM3 在虚拟机里的部署要点:它依赖 Pangolin(可视化)、OpenCV(图像处理)、Eigen3(线性代数)、DBoW2 和 g2o(后端优化)。这些库在虚拟机里源码编译都没问题,唯一要注意的是编译时并行度不要开太高——make -j4就够了,开-j8有时会因为内存不足被 OOM Killer 杀掉进程,报错信息还特别隐晦,表现为"cc1plus 被信号 9 终止"。遇到这个报错,第一个念头就该是内存不够。

7.3 快照、克隆和备份:给折腾留后路

虚拟机最大的优势是能打快照,但很多人不用,等系统搞崩了才后悔。

建立快照的时间点:系统刚装完、基础工具装完、开发环境配置完成后各打一个。命名清楚一点,比如"刚装完系统-未配置"、"ROS环境就绪-20250101"。这样后面无论装什么软件,装崩了右键快照管理器,恢复到最近一个可用状态,两分钟搞定。

克隆用于复制环境。如果你要开第二台虚拟机做对比实验,选"完整克隆",它会连同当前快照状态一起复制一份,跟原虚拟机完全独立。另一种"链接克隆"共享父磁盘,省空间,但父磁盘出问题子机也完蛋,我不太推荐在日常使用。

备份是另一回事。快照不是备份——快照文件也在同一个磁盘上,磁盘坏了快照一起没。真要保险,关机之后把整个虚拟机目录(.vmx、.vmdk、.nvram这几个文件)拷到移动硬盘或者别的地方。

有个坑要提一下:删除虚拟机目录之前,一定要先在 VMware 里把它从库中移除,或者至少确认虚拟机已经关机。如果虚拟机还在运行或者处于挂起状态,.vmdk文件被进程占用,你在资源管理器里怎么删都删不掉,提示"文件正在使用中"。这时候要么在 VMware 里右键 → 管理 → 从磁盘中删除,要么彻底关掉 VMware 进程再删。

8. 常见问题速查与排查思路

虚拟机的报错信息普遍比较模糊,同一个现象可能有好几个原因。我把这些年遇到的高频问题整理成一张表,方便对着现象找方向。

现象常见原因排查与解决
开机蓝屏(Windows 主机)Hyper-V/VBS 与 VMware 冲突;VMware 版本过旧关闭"内核隔离 → 内存完整性";升级 VMware 到最新版;必要时执行bcdedit /set hypervisorlaunchtype off(会同时关闭 WSL2/Docker Desktop 的虚拟化加速)
虚拟机里没有网络适配器创建时未添加网卡;vmx 配置被改坏关机后在虚拟机设置里添加网络适配器;检查.vmx文件里是否有ethernet0.present = "TRUE"
能 ping 通 IP 但打不开网页DNS 配置问题检查/etc/resolv.conf;NAT 模式下确认主机的 VMware NAT Service 和 VMware DHCP Service 正在运行(Win+R 输services.msc)
分辨率锁死在 800x600没装 open-vm-tools-desktopsudo apt install open-vm-tools-desktop后重启
复制粘贴、文件拖拽失效同上,或 hgfs 服务未启动重装 open-vm-tools-desktop;systemctl status vmware-tools查看状态
"继续运行脚本未能在虚拟机中成功运行"手动编译旧版 VMware Tools 失败放弃官方 Tools,改用open-vm-tools+open-vm-tools-desktop
虚拟机设置菜单变灰、没有"打开"选项虚拟机处于运行/挂起状态;权限不足先关机;右键 VMware 图标以管理员身份运行
修复组件时提示需要管理员Windows UAC 权限隔离以管理员身份运行 VMware Workstation
主机浏览器访问不了虚拟机的服务服务监听 127.0.0.1;防火墙拦截改服务监听0.0.0.0;sudo ufw status检查防火墙
磁盘空间不足,扩容后系统看不到虚拟磁盘扩容后没有扩展分区和文件系统用gparted调整分区,再用resize2fs扩展文件系统
系统时间总是不对时区设置错误;虚拟机时间同步失效sudo timedatectl set-timezone Asia/Shanghai;确认 open-vm-tools 的时间同步服务在跑
编译大项目时进程莫名被杀内存不足触发 OOM Killer降低编译并行度(make -j2);增加 swap;加大虚拟机内存
虚拟机运行一段时间越来越卡磁盘碎片;宿主机内存被吃满关闭虚拟机做一次磁盘压缩;检查主机内存占用;考虑把虚拟机迁到固态盘

关于磁盘扩容那条多解释两句,因为这是很多人都要经历的。虚拟机用久了 60GB 不够是很正常的。扩容分两步:先在 VMware 设置里把磁盘容量调大(这一步只是把虚拟磁盘文件的"上限"改了),然后进系统,用gparted把分区往后扩展,最后sudo resize2fs /dev/sda1让文件系统认到新空间。三步缺一不可,很多人只做了第一步,然后在系统里看容量没变,以为扩容失败。

另外,Ubuntu 20.04 里挂载的共享文件夹如果出现"权限被拒绝",常见原因是 uid 没对上。用id命令看一下自己的 uid,通常是 1000,如果挂载命令里写的是别的数字,改过来就行。

提示:虚拟机的日志在/var/log/下面,/var/log/syslog和/var/log/vmware-*是最常看的两个位置。出问题时先看日志,比在搜索引擎里盲猜快得多。

9. 一点个人体会

这套环境我在几台机器上重复装过很多遍,最大的感受是:装虚拟机的难点从来不在安装过程本身,而在装完之后的那一堆"小配置"。安装向导点点鼠标二十分钟就完事了,真正耗时间的是 open-vm-tools 装不上、共享目录挂不进来、ROS 的 rosdep 卡在初始化、主机访问不到虚拟机里的服务这些事。

我的习惯是,每次装完一台新的虚拟机,第一件事就是打一个名叫"纯净系统-已装基础工具"的快照。有了这个快照,后面无论怎么折腾、装什么乱七八糟的依赖,心里都有底。这个习惯帮我省下的时间,比我学任何一个具体技术点带来的收益都大。

最后分享一个实用的小技巧:给虚拟机配一个固定 IP。默认的 DHCP 每次重启可能会换地址,你昨天记的 SSH 地址今天就失效了。在 Ubuntu 里编辑/etc/netplan/下的配置文件,把网卡改成静态 IP(注意 IP 要选在虚拟网络编辑器的 DHCP 范围之外),配完执行sudo netplan apply。搞定之后,主机上用 SSH 连虚拟机就不用每次去查地址了,配合共享文件夹,整个开发流程会顺畅很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询