1. 折腾了半小时拖不进文件,问题到底出在哪
用VMware Workstation装好Ubuntu之后,很多人做的第一件事就是从Windows桌面拖一个安装包或者压缩包进虚拟机。结果鼠标拖过去,光标在Ubuntu窗口里转了一圈,文件没进来,然后就没有然后了。我第一次遇到这个情况的时候,先去虚拟机菜单里找"安装VMware Tools",点了之后发现系统毫无反应,又跑去网上搜"vmware tools安装步骤",折腾了快一个小时才搞明白。
这里先把结论放在前面:Ubuntu虚拟机里能不能直接从Windows拖文件进去,完全取决于VMware Tools(或者它的开源版本open-vm-tools)有没有正确安装并且加载了对应的内核模块。拖拽、剪贴板共享、自适应分辨率、共享文件夹、文件时间同步,这些看着毫无关联的功能,底层全都要靠Tools里面那几个驱动模块来工作。
这篇文章就把整个过程拆开讲清楚:为什么要装、有哪些安装路径、每一步操作背后的原理是什么、装完怎么验证、以及我实际踩过的那些坑。不管你是刚接触Ubuntu的新手,还是已经在用VMware跑Linux开发环境的老手,照着做基本都能解决"Windows文件拖不进Ubuntu"这个让人烦躁的问题。
先说个背景信息:现在的VMware Workstation版本(特别是15.x之后的版本),官方对Ubuntu这类系统已经不再推荐传统的那套VMware Tools安装包了,而是直接建议用open-vm-tools。后面专门有一节讲这个,因为很多人卡在"VMware Tools is no longer shipped with VMware Workstation for this guest operating system"这个提示上,其实就是官方切换了路线,并不是你操作错了。
2. 先把VMware Tools和open-vm-tools的区别弄明白
这段是给所有准备动手装的人补的基础。因为我在网上看到太多人在这两步上做无用功:一个是死磕传统VMware Tools安装包,另一个是装完open-vm-tools之后发现拖拽还是不生效,最后发现根本没装desktop扩展包。
2.1 两个名字、两套来源、一个目标
传统意义的VMware Tools,是VMware自己打包的一套工具,里面包含:
- 显卡驱动模块(让Ubuntu能在VMware窗口里自适应分辨率、开启3D加速)
- 鼠标驱动模块(让鼠标在虚拟机和宿主机之间平滑切换,不需要手动按Ctrl+Alt释放)
- 网络驱动模块(优化虚拟网卡的性能)
- 内存管理模块(气球驱动,用于内存回收,提升宿主机资源利用率)
- 文件系统驱动模块(实现hgfs文件系统,支撑拖拽和共享文件夹)
- vmware-user进程(负责处理拖拽、剪贴板同步这些用户态功能)
- vmware-toolbox-cmd工具(用于查看时间同步状态、收集虚拟机信息等)
open-vm-tools则是这套东西的开源重新实现,由开源社区维护,后来被VMware官方收编为推荐方案。它的优点非常明显:不需要你手动去官网下载或者挂载ISO镜像,直接在Ubuntu的软件源里用apt就能装,更新跟随系统更新一起走,而且和你当前的内核版本天然匹配。
我把它俩的关系比作一个是"原厂驱动盘",一个是"系统自带的驱动管理器中自动下载的驱动"。前者需要你自己去找对应版本、手动挂载安装,后者一条命令搞定,而且系统内核更新之后它也会跟着适配,不需要你重新折腾。
2.2 新版本VMware Workstation的官方态度
很多人在VMware Workstation 16/17里装Ubuntu 22.04或24.04,点击菜单栏的"虚拟机 - 安装VMware Tools",结果弹出的不是安装向导,而是一个提示框,写着类似"VMware Tools is no longer shipped with VMware Workstation for this guest operating system"的话。这不是报错,是官方告诉你:这个系统我们不再提供传统安装包了,请你到系统里自己装open-vm-tools。
知道这一点之后,你就不会被这个提示吓到,也不用费劲去找什么linux.iso老版本安装包去兼容了。正确地做法就是:先确认你的Ubuntu版本,然后走对应安装路径。
顺便补一个判断方法:
| 判断维度 | 传统VMware Tools | open-vm-tools |
|---|---|---|
| 安装来源 | VMware菜单里挂载的ISO镜像 | Ubuntu软件源(apt) |
| 是否需要编译工具 | 需要gcc、make、内核头文件 | 一般不需要手动装编译工具 |
| 内核更新后 | 驱动模块可能失效,需要重装或手动重新编译 | 随系统更新自动适配,基本不用操心 |
| 拖拽功能支持 | 支持 | 支持,但需要额外安装desktop包 |
| 官方推荐程度 | 老系统/特殊系统才用 | Ubuntu等主流Linux发行版首选 |
3. 传统安装路径:VMware菜单挂载ISO,手动编译装一遍
虽然我不建议新装的Ubuntu再走这条老路,但你可能会遇到只能用传统方式的场景,比如你装的Ubuntu版本比较老(16.04、18.04),或者你用的是ESXi虚拟机下的普通虚拟机。在这类环境下,传统VMware Tools仍然是正常手段,所以我把完整流程写出来,也把过程中的关键逻辑讲清楚。
3.1 挂载ISO镜像
在VMware Workstation里,先让Ubuntu虚拟机处于开机状态,然后点击"虚拟机 - 安装VMware Tools"。这时候虚拟机里会像插入一张光盘一样,多出一个光驱设备。如果这个菜单是灰色的,说明这台虚拟机的光驱被移除了,你需要先到"虚拟机设置"里,把CD/DVD设备设为"使用ISO镜像文件",并手动选择VMware安装目录下的linux.iso(通常在C:\Program Files (x86)\VMware\VMware Workstation\linux.iso)。
挂载完成之后,在Ubuntu里执行:
sudo mount /dev/cdrom /mnt ls /mnt正常情况下你应该看到一个名字类似VMwareTools-10.3.25-20206839.tar.gz的压缩包。如果/mnt下面什么都没有,先执行sudo mount -t iso9660 /dev/cdrom /mnt再试一次,这通常是因为系统默认没有把ISO9660格式的光盘挂载上来。
3.2 解压并运行安装脚本
很多人第一次安装都会直接解压到当前目录然后运行脚本,其实最稳妥的做法是解压到/tmp目录,这样不会因为权限问题写不进系统目录。
cd /tmp tar zxf /mnt/VMwareTools-*.tar.gz cd vmware-tools-distrib sudo ./vmware-install.pl这个脚本跑起来之后会问你一系列问题,比如"安装到哪里""要不要启动vmware-tools服务"等。大多数情况下直接按回车使用默认值就行,不要自作主张改成奇怪的路径。如果你之前安装过一次,它会提示你是否覆盖,选y继续。
脚本的最后会尝试编译内核模块,这一步需要系统里有gcc和make以及当前内核对应的头文件。如果编译失败,多半是缺了东西,先执行:
sudo apt update sudo apt install build-essential linux-headers-$(uname -r)然后再重新跑一遍安装脚本。编译结束之后,脚本会自动启动服务,这时候你通常不需要立即重启,鼠标一般就能自由穿越虚拟机边界了,分辨率也会自动适配窗口大小。
3.3 验证传统Tools是否生效
验证方式很简单:
vmware-toolbox-cmd -v能看到版本号就说明主程序装好了。另外执行lsmod | grep vmw,你应当能看到vmw_vmci、vmxnet3、vmw_balloon等内核模块已经加载。再试一下从Windows往Ubuntu里拖文件,正常情况下鼠标拿着文件拖到Ubuntu窗口松手,文件就会出现在Ubuntu的桌面或文件管理器的当前目录里。
4. 现代主推路径:apt安装open-vm-tools,两条命令搞定
如果你装的是Ubuntu 20.04、22.04、24.04这些比较新的版本,我的建议是直接放弃传统VMware Tools,用open-vm-tools。这也是我自己现在用虚拟机跑Ubuntu开发环境的标准做法,干净、省心、不折腾。
4.1 为什么我会从传统Tools换到open-vm-tools
第一次在某台老旧的Ubuntu 16.04上尝试open-vm-tools之前,我也以为只有官方那个安装包才是"原装正版",后来发现open-vm-tools的功能覆盖全面,稳定性还更好。
原因并不复杂:
- 传统VMware Tools安装包在每次Ubuntu内核升级后都可能失效,你需要重新执行一次vmware-install.pl,让它重新编译内核模块。如果你忘记重装,轻则拖拽失效,重则共享文件夹挂不上、网络变慢。
- open-vm-tools在Ubuntu的软件源里维护,系统做安全更新时它也会一起更新,内核头文件对齐的问题基本由维护者解决了。
- 在开发环境里,我很多时候要跑Docker、编译内核模块,传统Tools偶尔会和这些场景打架,但open-vm-tools的侵入性更小,很少出现异常。
当年在Ubuntu 22.04上遇到过"VMware Tools is no longer shipped"提示后,我彻底转了open-vm-tools,之后就再也没因为Tools的问题浪费过时间。
4.2 具体安装步骤
在Ubuntu虚拟机里打开终端,执行:
sudo apt update sudo apt install open-vm-tools open-vm-tools-desktop注意这里必须装open-vm-tools-desktop这个包。只有open-vm-tools主包的话,拖拽和剪贴板共享是无效的,因为desktop包才包含vmware-user这个用户态程序,它负责与宿主机之间通信,处理拖拽数据、剪贴板内容同步。
安装完成后建议重启一下虚拟机:
sudo reboot重启后你从Windows往Ubuntu里拖文件,应该就能直接拖进去了。拖进来的文件默认会出现在你当前打开的文件管理器目录里,如果你直接拖到桌面上,它就会出现在桌面。
4.3 安装之后需要确认的几个状态
开机后可以执行下面几条命令看看工具运行状态:
systemctl status open-vm-tools vmware-toolbox-cmd -v第一条命令会显示open-vm-tools服务是否处于active状态。第二条命令能看到版本号。另外还可以试一下从Ubuntu往Windows拖文件,双向拖拽都支持才是完整生效。
如果看到服务起不来或者版本号查看失败,大概率是内核头文件匹配有问题,执行:
sudo apt install --reinstall open-vm-tools open-vm-tools-desktop linux-headers-$(uname -r)重新安装一遍一般能解决。我在一台从Ubuntu 20.04升级到22.04的虚拟机上遇到过类似情况,重装一次之后就好了。
5. 拖拽功能的底层逻辑和共享文件夹配置
这部分回答一个很多人问过我的问题:拖拽到底是怎么实现的,为什么有时候拖不进来自动就变成了"复制文件到Windows桌面"?另外,如果你安装完Tools之后拖拽仍然不成功,共享文件夹往往是替代方案,我一起讲清楚。
5.1 拖拽到底走的是什么通道
拖拽并不是"鼠标把文件从A窗口挪到B窗口"这么简单。在VMware的体系里,Windows宿主机和Ubuntu虚拟机之间有一条虚拟通道,VMware Tools在虚拟机里安装了一个文件系统驱动(类型是hgfs),拖拽操作本质上是:宿主机把文件的二进制数据通过这条通道传给虚拟机,虚拟机这边的vmware-user进程接收后,在目标位置重建这个文件。
所以如果拖拽没反应,问题方向要锁定在这三处:
- vmware-user进程有没有跑起来(桌面套件是否装对)
- 对应的内核模块有没有加载(open-vm-tools的模块没挂上,数据传不进来)
- 是不是有安全软件或AppArmor拦截了通信通道
前两个最常出问题,第三个我在第6节里专门展开讲。
5.2 配置共享文件夹,作为拖拽功能的稳健备选
有些场景下拖拽不方便,比如你要复制一个几百MB的压缩包进虚拟机,拖拽反而慢而且容易中断。这种时候配置共享文件夹是更舒服的方案。
在VMware Workstation的虚拟机设置里:
- 打开"虚拟机设置"。
- 切到"选项"选项卡。
- 找到"共享文件夹",选择"总是启用"。
- 添加一个Windows宿主机上的目录,比如D:\share。
- 在Ubuntu里手动挂载hgfs文件系统:
sudo mkdir -p /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other如果不想每次开机都手动挂载,把它写进/etc/fstab:
.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0挂载之后,Windows的D:\share目录里的文件,在Ubuntu里就是/mnt/hgfs下的内容,双向读写都是实时的。需要注意共享文件夹的读写权限,如果你的Windows目录是NTFS且开启了快速启动,某些情况下Linux挂载后可能会出现只读现象,需要在Windows里把快速启动关掉。
5.3 自适应分辨率与剪贴板共享一起验证
Tools装好之后,拖拽、剪贴板共享、自适应分辨率是一起生效的。你可以做一个综合验证:
- 从Windows往Ubuntu拖一个文本文件,检查内容是否完整
- 在Windows里复制一段文字,到Ubuntu里按Ctrl+V是否能粘贴过去
- 拖动VMware窗口大小,看Ubuntu桌面分辨率是否跟着变化
这几项全部通过,说明Tools基本跑通了。如果某个单项失效,参考下一节的排查清单。
6. 实际安装中最容易遇到的几个坑和完整排查链路
我在折腾VMware Tools上花的时间不在少数,下面几条是这几年高频遇到的问题,每一条我都把现象、原因和解决路径写清楚,你遇到哪条直接照着做就行。
6.1 "继续运行脚本未能在虚拟机中成功运行"的真相
很多人安装完Tools之后,在Windows右下角看到VMware的提示气泡,写着"继续运行脚本未能在虚拟机中成功运行。如果您在此虚拟机中配置了自定义客户机脚本,请检查其是否正确。"第一次看到这句话我以为是安装失败了,后来发现并不是这么简单。
这个提示本质是:VMware在虚拟机里执行一条"安装后的自定义脚本"失败了。默认情况下它执行的是vmware-tools的post-install脚本,如果这个脚本超时、被防火墙拦截、或者虚拟机里没有配置好运行环境(比如没有可执行权限、没有安装perl),就会弹出这个提示。
关键是:这个提示弹出来不代表Tools本身没装上。你先执行一下vmware-toolbox-cmd -v,如果有版本输出,说明Tools是正常的,这个提示可以直接忽略,不影响拖拽功能。如果版本号查不到,再去检查脚本为什么失败。
我当时排查过一次,发现是因为虚拟机里没有安装perl,VMware的安装脚本依赖perl来运行。解决方法是:
sudo apt install perl装完perl之后重新执行一次安装脚本,这个提示就不再出现了。
6.2 装完open-vm-tools-desktop拖拽依然无效
这个问题我在论坛里看到无数人问,现象是:open-vm-tools和open-vm-tools-desktop都装了,服务也active,但从Windows拖文件到Ubuntu里就是没反应。
排查链路按这个顺序走:
第一步:确认vmware-user进程在跑。
ps aux | grep vmware-user如果没有输出,手动启动:
/usr/bin/vmware-user &或者直接重启虚拟机看看能不能自启。如果重启后还是没有这个进程,说明desktop包里的某个依赖没有安装成功,执行sudo apt install --fix-broken修复依赖后重装一遍。
第二步:确认内核模块加载情况。
lsmod | grep vmw如果输出为空或者缺少vmw_vmci模块,说明Tools相关的内核模块没有正确加载,重新执行:
sudo modprobe vmw_vmci然后把vmw_vmci写入/etc/modules-load.d/下的配置文件里,避免下次重启丢失。
第三步:确认桌面环境是否支持。
如果你用的不是默认的GNOME桌面,而是装了KDE、XFCE等轻量级桌面,拖拽功能可能会有兼容性问题,特别是Ubuntu Studio或者自己改装过桌面环境的系统。这类情况除了拖拽,其他功能如剪贴板共享也经常失效。我没有太好的解决办法,只能建议你换回默认桌面环境,或者在XFCE下尝试只用共享文件夹方式。
6.3 AppArmor和SELinux拦截导致的异常
Linux的强制访问控制机制偶尔会给VMware Tools惹麻烦。Ubuntu默认启用AppArmor,虽然我没遇到过大范围的封锁,但在某些特殊配置下,AppArmor会限制/usr/bin/vmware-user读取某些目录的权限,导致拖拽到某些特定目录失败,其他目录却正常。
这种"现象诡异"的问题排查起来最费时间。我当时的做法是先看系统日志:
sudo dmesg | grep -i apparmor | grep -i vmware sudo journalctl -u open-vm-tools -n 50如果日志里明确出现了AppArmor拦截记录,可以临时禁用对应配置文件:
sudo aa-complain /usr/bin/vmware-user需要先安装apparmor-utils才能用aa-complain命令。如果没有拦截记录,就不要盲目动AppArmor,保持默认反而更安全。
6.4 内核更新之后Tools突然失效
这种情况在传统VMware Tools时代非常常见,你某天执行了sudo apt upgrade,内核从5.4升到了5.15,重启之后发现拖拽、共享文件夹全部失效。原因很简单:内核模块是针对于旧内核版本编译的,新内核不认旧模块。
open-vm-tools的好处在这里体现得很明显:它跟着系统源一起更新,内核升级时linux-headers-generic和open-vm-tools的更新往往是一起进行的,很少出现模块失配。如果你用了传统Tools,遇到内核升级失效就老老实实回到第3节重新跑一次安装脚本。
这里有个小技巧:升级内核后不要急着重启,先看一眼open-vm-tools有没有可以更新的版本:
sudo apt list --upgradable | grep vm有更新就先装完,再重启,能避免一部分灰白界面和失效问题。
6.5 共享文件夹挂载后看不到文件或只读
挂载成功但ls /mnt/hgfs没内容,或者只能看到文件夹名但进不去,这也是高频问题。多数情况下是因为Windows宿主机那边磁盘有问题(比如非正常关机后NTFS处于不干净状态),Linux侧的fuse驱动无法正常读取。
处理方式:
- 在Windows里检查一下磁盘状态,或者干脆重启一次Windows(让系统完成磁盘自检)。
- 在Ubuntu里卸载后重新挂载:
sudo umount /mnt/hgfs sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other- 如果还是不行,把你的Windows目录换个位置(比如放到D盘根目录下,不放在用户目录里),因为用户目录路径中包含中文或特殊符号,有时候会导致fuse挂载解析失败。
7. 安装过程中对我帮助很大的几个小工具和技巧
除了上面这些系统的步骤,还有几个平时比较有用的周边配置。虽然和拖拽文件不直接相关,但能让整个虚拟机的使用体验好很多。
7.1 xshell连接虚拟机配合文件传输
如果你经常需要在Ubuntu里跑命令行,拖拽文件反而不如直接用SSH工具方便。我习惯先在Ubuntu里装好openssh-server:
sudo apt install openssh-server sudo systemctl enable --now ssh然后用xshell或者直接ssh 用户名@虚拟机IP登录。这种方式下传文件用scp或者xshell自带的上传功能就解决了,比拖拽大文件更稳定。要注意的是虚拟机的网络模式建议选NAT,这样虚拟机IP由VMware的虚拟NAT网段分配,宿主机可以直接访问。如果遇到xshell连接不上,先确认Ubuntu防火墙有没有放行22端口:
sudo ufw allow 227.2 配置中文输入法,装完系统后顺手的事
热搜词里有一个"ubuntu中文输入法怎么设置",和VMware Tools本身无关,但很多人在装完系统后都会卡在这一步。如果你想在拖文件、写文档的时候能正常打中文,推荐装ibus框架下的中文输入法:
sudo apt install ibus-libpinyin装完之后注销再登录,去"设置 - 键盘 - 输入源"里把"汉语(Intelligent Pinyin)"添加进去,就能用Super+Space切换中英文了。这个步骤和Tools安装不冲突,顺序无所谓,但建议在装完Tools之后做,免得来回重启。
7.3 时间同步问题
VMware Tools还有一个隐藏功能是时间同步。如果你发现Ubuntu虚拟机里的时间和Windows宿主机不一致,执行:
sudo vmware-toolbox-cmd timesync enable这条命令会开启虚拟机与宿主机的时间同步,对搭建开发环境、日志排查都有好处。open-vm-tools和传统Tools都支持这个命令。
8. 最后再分享一点我这几年用下来的体会
Windows文件拖不进Ubuntu这个问题,看起来只是一个小功能,但背后牵扯到的是一整套虚拟化辅助工具的安装维护逻辑。我自己一开始也是死磕传统VMware Tools,后来转到open-vm-tools之后,几乎再也没为这类问题烦恼过。
给新手一个明确的操作路径:装好Ubuntu之后,第一件事执行sudo apt install open-vm-tools open-vm-tools-desktop,然后重启,拖拽、剪贴板、自适应分辨率就都来了。如果是老版本Ubuntu或者特殊环境,才需要考虑传统VMware Tools安装包。
给老手一个建议:如果你维护着一批Ubuntu虚拟机,尽量统一用open-vm-tools,并且把Tools的更新纳入系统更新流程,而不是手动一台台去装。这样能省掉很多因为内核升级导致的Tools失效问题。
文件拖拽这个功能,虽然方便,但真正处理大文件或者批量文件的时候,共享文件夹永远比拖拽靠谱。所以我个人的使用组合是:日常小文件、截图、文本片段用拖拽和剪贴板,项目代码、数据库备份、镜像包之类的用共享文件夹或者scp传输。这几样配合起来,Windows和Ubuntu虚拟机之间的文件交换才算真正顺滑。
如果你按照上面的步骤操作还是拖不进文件,不要急着重装系统,先去查vmware-user进程和内核模块列表,90%的问题都能定位到这两个环节上。剩下的10%里,一半是AppArmor拦截,一半是共享文件夹的fuse挂载异常,这两条排查路径在第6节里都有详细命令,照着检查就行。