1. 安装前准备:先想清楚你为什么要走这条路
如果你点进这篇文章,大概率是遇到了下面某一类情况:手头是Windows或者macOS,但课程作业、公司项目、开源代码必须在Linux环境里跑;或者你纯粹想体验一下Linux生态,又不敢直接拿主力机开刀;再或者你已经在用WSL,但总觉得WSL和完整虚拟机比起来差点意思,图形界面、内核模块、网络环境都像是在"模拟",想换个更真实的环境试试。
不管哪种情况,在Linux环境下用虚拟机装Ubuntu,再在Ubuntu里装VSCode,这套组合拳做下来,你会得到一个非常干净的开发环境:宿主机怎么折腾都不怕,虚拟机里随便造,快照一恢复就满血复活。我自己的主力开发机就是Windows宿主机加VMware虚拟机跑Ubuntu 22.04,VSCode装在虚拟机里,Remote-SSH再连公司服务器,这一套用了快三年,踩过的坑都记在下面了。
先说结论:这套方案适合谁?适合所有想零风险接触Linux的开发者,尤其是学生党、前端转全栈、刚入职需要快速搭环境的初级工程师。不适合谁?如果你只是为了跑个Node脚本、写个Python小工具,WSL可能更轻量;如果你要搞深度学习训练、大型编译,原生双系统或者纯Linux主机才是正路,虚拟机跑重型任务会明显感觉到性能损耗。
2. 虚拟机与Ubuntu版本选型:别在第一步就埋坑
2.1 VMware还是VirtualBox,我的建议很直接
虚拟机软件就两个主流选择:VMware Workstation Pro和Oracle VirtualBox。网上吵了十年也没吵完,但我的态度很明确:优先VMware,除非你预算实在卡死。
原因不复杂。第一,VMware对硬件加速的支持更成熟,3D加速、USB直通、磁盘IO性能都明显好于VirtualBox,尤其是在虚拟机里跑VSCode这种Electron应用,渲染流畅度差距能直接感受出来。我实测过同样一台i5-1240P、16GB内存的笔记本,VMware里跑Ubuntu 22.04 GNOME桌面,日常操作几乎无感;换到VirtualBox,窗口拖拽和滚动都会有可感知的迟滞。第二,VMware的快照机制更稳,回滚速度也更快。做实验经常要装各种环境,装崩了直接回滚快照,比重新装系统省太多时间。
当然VirtualBox的优势是全免费开源,VMware Workstation Pro个人使用也已经免费了,所以授权问题不用纠结。直接官网下载即可,安装过程一路Next,唯一要注意的是安装时勾选"自动安装Windows Hypervisor Platform"的选项,别和宿主机自带的Hyper-V冲突,否则启动虚拟机时会报"内核模块未加载"之类的错。
2.2 Ubuntu版本选择:LTS是唯一推荐
Ubuntu版本号分为LTS(长期支持)和普通版本,间隔两年出一个LTS,每个LTS支持五年。我的建议简单粗暴:永远选最新的LTS版本。
这篇文章写作时最新的LTS是Ubuntu 22.04,马上24.04也要出,但建议等第一个小版本更新出来再升,原因后面会讲。为什么不用非LTS?因为非LTS只有九个月支持期,过半年就得强制升级,而且新内核、新桌面环境的兼容性问题多,没必要拿自己宝贵的调环境时间去给Canonical当小白鼠。
下载地址用Ubuntu官网的ubuntu.com/download/desktop,选好版本下载ISO镜像。注意区分桌面版和服务器版,我们这里要的是Desktop版,带GNOME图形界面,适合日常开发和调试。
2.3 虚拟机配置参数:给VSCode留足资源
创建虚拟机时,有几个参数直接决定后面VSCode用起来卡不卡:
- 内存:至少4GB,推荐8GB。VSCode本身是Electron应用,Chromium内核吃内存很凶,每个窗口轻松几百MB,再加上GNOME桌面、后台服务,4GB会明显感觉吃力。我实测8GB是流畅线,12GB更舒服。
- 处理器:至少2核,推荐4核。VSCode编译任务、代码提示、git操作都会用到多核。
- 磁盘:建议60GB起步。Ubuntu系统本身占20GB左右,装完开发工具、Docker镜像、node_modules这些,60GB都未必够。硬盘空间充足的话直接给100GB,反正用的是动态分配,实际占用是按需增长的。
- 显存:如果是VMware,把3D加速打开,显存拉到最大128MB。这个直接影响GNOME桌面动画和VSCode界面渲染的流畅度。
创建完成后,先把虚拟机设置里的"虚拟化Intel VT-x/AMD-V"(有的版本叫"硬件虚拟化")勾上,这关系到虚拟机内的嵌套虚拟化能力,后面你要是想在Ubuntu里再跑Docker或者KVM,这一步就是必须的。
3. Ubuntu安装与初始配置:两个容易踩的坑
3.1 安装过程中的关键选项
ISO镜像挂载好后启动虚拟机,进入Ubuntu安装界面。安装过程大部分选项直接默认即可,但有三个地方要单独说:
第一是"交互式安装"和"自动安装"的选择。新手直接选交互式,你需要在安装过程中配置用户名、密码、分区方式。第二是分区方式,选"清除整个磁盘并安装Ubuntu"就行,反正是虚拟机,不用搞什么手动分区。但你得清楚这个操作的含义:它会格式化虚拟磁盘,不会碰你宿主机上的任何数据。第三是安装过程中会问你是否连接WiFi网络、是否安装第三方驱动,都勾上,省得后面再补。
3.2 装完系统后立刻要做的三件事
系统装完重启进入桌面,先别急着装VSCode,把下面三件事做了,后面会顺畅很多:
第一,更新软件源。Ubuntu默认的软件源在国外,国内网络下载速度很慢甚至失败。打开"软件和更新",在"Ubuntu软件"标签页的下载服务器处,换成清华、阿里云或中科大的镜像源。换完在终端执行sudo apt update && sudo apt upgrade,把系统更新到最新状态。
第二,安装VMware Tools。VMware菜单栏选择"虚拟机 -> 安装VMware Tools",然后在Ubuntu里挂载光盘执行安装脚本。这一步如果不做,虚拟机和宿主机之间的复制粘贴、拖拽文件、自适应分辨率全部不可用,体验大打折扣。VMware新版直接在虚拟机设置里选"启用VBS"或者自动安装open-vm-tools,Ubuntu 22.04一般装上就能识别。
第三,设置共享文件夹。在虚拟机设置里添加一个宿主机目录作为共享文件夹,比如D盘的code目录,然后在Ubuntu里用命令挂载,这样你在宿主机上编辑文件,虚拟机里同步访问,不用反复拷贝。
3.3 网络问题的快速验证
装完系统如果发现浏览器打不开网页,大概率是网络适配器的问题。VMware默认用NAT模式,理论上开箱即用。如果上不了网,依次检查:虚拟机设置里的网络连接是不是NAT;宿主机防火墙是否拦截了VMware的服务;Ubuntu里ping 8.8.8.8通不通。通但DNS解析失败,就在网络设置里把DNS改成223.5.5.5或114.114.114.114。这个排查思路适用于99%的虚拟机网络异常。
4. VSCode下载与安装:三种方式,我推荐第二种
4.1 从官网下载deb包:最直观的方式
打开浏览器访问VSCode官网(code.visualstudio.com),首页会自动检测你的操作系统,显示Download for Linux,点击后会让你选择发行版,选Debian/Ubuntu的.deb包下载即可。
这里有个细节:官网的下载按钮默认给的是64位x86架构的包。如果你的Ubuntu跑在ARM架构的机器上(比如Apple Silicon Mac的虚拟机),要往下翻找ARM64版本,否则装不上。下载完成后,在文件管理器里双击deb包,Ubuntu会弹出软件安装器,点安装,输入密码,等进度条跑完即可。这种方式最直观,适合不熟悉命令行的新手,但速度取决于你的网络,国内直连官网下载有时候很慢,几十MB的包可能要等很久。
4.2 命令行安装:最推荐的方式
我个人的习惯是直接命令行装,既快又方便复现。deb包下载完成后,在终端里cd到下载目录,执行:
sudo apt install ./code_*.deb注意,apt在安装本地deb包时会自动解析并安装依赖,比dpkg -i好用太多。如果报依赖缺失,再执行sudo apt --fix-broken install修复。
还有另一种命令行方式,直接把微软的软件源加到系统里,以后可以用sudo apt update && sudo apt install code来安装和升级。执行方式:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list' sudo apt update sudo apt install code这种方式的好处是以后升级VSCode可以用sudo apt upgrade统一管理,不用每次去官网手动下载。缺点是你得接受微软的GPG密钥和软件源,有些对包管理洁癖的开发者不喜欢,但说实话,官方源挺靠谱的。
4.3 snap安装:最省事但最慢
第三种方式是一行命令:
sudo snap install code --classicsnap是Ubuntu自带的软件包管理系统,优点是不用管软件源、不用管依赖,自动更新。但缺点也很明显:snap包启动速度慢,VSCode启动要额外等好几秒;sandbox隔离机制偶尔会导致一些插件访问系统文件受限;老版本snap还会出现中文输入法无法在编辑器里输入的问题,后来虽然修复了,但给人的印象就是折腾。
我的明确建议是:优先用deb方式安装,不管是手动双击还是命令行。snap是备用方案,适合懒得配软件源、对启动速度不敏感的人。
4.4 验证安装是否成功
装完在终端输入code,VSCode窗口应该能弹出来。注意第一次启动可能要等一两秒,因为它在初始化用户目录。如果终端提示command not found,可能是安装路径没加到PATH里,deb方式安装正常情况下会自动加,不用操心。
打开VSCode后,按Ctrl+Shift+P打开命令面板,输入about,可以看到版本信息、提交ID、Electron版本、Node版本等,确认自己装的是哪个版本。这里就可以顺便检查一下有没有装错架构,x86机器上却装了ARM版会导致启动报错或不稳定。
5. VSCode初始化配置:让编辑器更像"你的编辑器"
5.1 中文界面设置
安装中文语言包有两种方法。打开VSCode左侧扩展面板(Ctrl+Shift+X),搜索"Chinese (Simplified) Language Pack",作者是Microsoft,安装后右下角会弹窗让你重启以切换语言。如果想手动指定,按Ctrl+Shift+P执行Configure Display Language,选zh-cn。
这个语言包本质上是让VSCode的菜单、设置项、提示信息都变成中文,不影响代码和插件。我还是建议新手装上中文语言包,不是让你永远依赖中文界面,而是减少初期摸索成本。等你用得足够熟练,再切回英文界面也不迟。
插件安装成功后,重启VSCode,你会发现设置界面、命令面板提示、右键菜单都变成了中文。如果你想改回英文,把locale.json里的"locale": "zh-cn"改成"en",然后重启编辑器。
5.2 界面美化和字体配置
VSCode默认的界面在Linux上其实挺素的,字体渲染也比macOS差一截。如果你追求接近macOS的体验,推荐做两件事:
第一,换字体。安装JetBrains Mono或Fira Code,在Ubuntu里执行:
sudo apt install fonts-jetbrains-mono fonts-firacode然后在VSCode设置里搜font-family,默认值改成:
"editor.fontFamily": "'JetBrains Mono', 'Fira Code', 'Droid Sans Mono', 'monospace'", "editor.fontSize": 14, "editor.lineHeight": 22, "terminal.integrated.fontFamily": "'JetBrains Mono', 'Fira Code', 'monospace'"这样编辑器和终端里都会用上等宽编程字体,看代码舒服很多。
第二,如果想让Linux桌面的字体渲染更像macOS,Ubuntu 22.04自带的中文字体渲染已经不错了,但可以进一步安装fonts-noto-cjk补齐缺失字形,避免某些生僻字显示成方块。
5.3 必备插件清单:装完直接起飞
我按使用场景把必装插件分成三组,照着装就行:
开发增强类:
- Remote - SSH(ms-vscode-remote.remote-ssh):远程连服务器开发,这是VSCode最核心的存在意义。装好后左下角有远程连接图标,可以配置多台服务器的连接信息。
- GitLens(eamodio.gitlens):Git历史查看、代码作者标注、Blame信息一目了然。
- Prettier - Code formatter(esbenp.prettier-vscode):代码格式化,前端必装。
- ESLint(dbaeumer.vscode-eslint):JavaScript代码规范检查。
- Python(ms-python.python):Python开发全家桶,包括调试、Pylance语言服务、Jupyter支持。
- C/C++(ms-vscode.cpptools):C/C++开发必需,配置好tasks.json和launch.json就能F5跑起来。
主题图标类:
- One Dark Pro(binaryfury.theme-onedark):Atom经典配色,看着舒服不刺眼。
- Material Icon Theme(pkief.material-icon-theme):文件图标美化,找文件效率翻倍。
提效工具类:
- Path Intellisense(christian-kohler.path-intellisense):路径自动补全。
- vscode-icons(vscode-icons-team.vscode-icons):另一套图标主题,看个人喜好。
- Code Runner(formulahendry.code-runner):一键运行代码片段,非常适合学算法、刷题场景。
插件装多了会影响启动速度,我的原则是:只装用得上的,装完不需要就禁用而不是删除,保持扩展目录干净。VSCode扩展默认装在~/.vscode/extensions/目录下,想清理就直接删对应文件夹。
5.4 终端集成与默认shell
VSCode内置终端是日常高频使用的地方。Ubuntu默认shell是bash,够用了,但如果你想体验更好,可以装zsh加oh-my-zsh:
sudo apt install zsh -y sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"然后在VSCode设置里搜terminal.integrated.defaultProfile.linux,选zsh即可。zsh的自动补全、语法高亮、主题配色都更符合现代开发习惯,装完之后你再回不去bash。
6. 常见问题与排查技巧实录
6.1 VSCode启动崩溃或白屏
启动没反应、白屏、闪退,这几个现象最常见的原因是:GPU渲染兼容性问题。尤其是在虚拟机里,OpenGL驱动不完整时,Chromium渲染进程会直接崩掉。解决办法:在设置里加一行参数禁用GPU加速。
命令行启动时执行code --disable-gpu,如果能正常打开,就去VSCode的~/.vscode/argv.json文件里加:
{ "disable-gpu": true }然后重启VSCode。这个方法能解决大部分白屏崩溃问题。
6.2 中文输入法无法在编辑器里输入
用fcitx框架的搜狗输入法或Google拼音时,VSCode里经常出现打不出字、候选词乱码、切换不了输入法的情况。这个问题在snap装的VSCode上尤其严重。三个排查步骤:
第一,确认VSCode是用deb方式装的,不是snap。第二,在~/.vscode/argv.json里加环境变量:
{ "force-disable-im-select": true }第三,如果还不行,检查系统里是否有ibus和fcitx框架冲突,Ubuntu默认用ibus,如果你装的是搜狗输入法,需要设置环境变量:
sudo im-config -n fcitx export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx重启系统后再试,基本能解决。
6.3 虚拟机里VSCode卡顿
卡顿的根源通常是资源不足。排查思路按优先级来:
- 内存:打开系统监视器看内存占用,如果常驻80%以上,加内存或在虚拟设置里调高。
- 磁盘IO:机械硬盘宿主机跑虚拟机本身就吃力,建议虚拟机磁盘文件放到SSD上。
- 交换分区:Ubuntu默认没有swap文件,内存吃紧时系统会卡死。创建swap文件:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab这个操作能很大程度缓解虚拟机内存不足导致的卡顿。
- VSCode设置:关掉
files.watcherExclude里不必要监视的目录,比如node_modules、target、build这些大目录,减少文件监视对IO的消耗。
6.4 主机访问虚拟机里的VSCode服务
用VSCode起了一个本地服务(比如python3 -m http.server 8000),想在宿主机浏览器里访问。如果虚拟机网络是NAT模式,宿主机直接访问localhost:8000是进不去的。需要先查看虚拟机的IP地址,先让虚拟机安装net-tools,命令如下:
sudo apt install net-tools ifconfig找到ens33或eth0的IP,宿主机浏览器访问http://虚拟机IP:8000。如果访问不通,检查Ubuntu防火墙:sudo ufw status,如果开了防火墙就执行sudo ufw allow 8000/tcp放行。NAT模式下宿主机访问虚拟机IP通常是通的,不通基本是防火墙问题。
6.5 升级Ubuntu后VSCode没了
有次我把Ubuntu从22.04升到22.10,重启后桌面图标不见了,折腾半天才发现不是VSCode被删了,而是GNOME桌面清理了.desktop文件缓存。重新安装一次就回来:
sudo apt install --reinstall code如果命令行能启动但图标没了,直接在/usr/share/applications/下检查有没有code.desktop文件,没有就重新装。这种问题很少见,但遇到了不用慌,恢复成本很低。
7. 踩坑实录与效率提升的额外建议
这套环境用了三年,我最想分享的一条经验是:虚拟机装开发环境,快照是最重要的朋友。每次搭好一套顺手的VSCode环境、配置完所有插件和快捷键后,第一时间打一个快照,命名"VSCode开发环境基线"。以后不管装什么软件把系统搞崩了、或者卸载依赖牵连了一堆系统包,直接回滚到基线,两分钟回到舒适区。
另一个经验是:别在虚拟机里配太多花里胡哨的桌面特效。Ubuntu 22.04默认的GNOME桌面动画关掉一半,性能能提升不少。在"设置-外观"里把动画关掉,把分辨率适当降低,VSCode的流畅度会明显改善。反正我们主要用得是编辑器,不是桌面壁纸。
最后再分享一个小技巧:VSCode的settings.json配置文件建议同步到云盘或者Git仓库,换电脑、重装系统后一键恢复。VSCode本身有Settings Sync功能,登录GitHub账号就能同步设置、快捷键和插件列表。这个习惯我从第三年开始养成,后面重装环境再也没慌过。