Linux虚拟机Sublime拖拽卡死的根源是vmblock-fuse服务未挂载,而非Sublime自身问题;需执行sudo systemctl enable --now run-vmblock\x2dfuse.mount启用服务,并确保挂载含allow_other参数,同时关闭Sublime的index_files配置。

拖拽卡死不是Sublime的问题,是vmblock-fuse没挂载
Sublime Text在Linux虚拟机里拖拽文件卡死(光标转圈、界面冻结、甚至整个窗口无响应),90% 和 Sublime 本身无关,而是 VMware 的 vmblock-fuse 文件系统服务处于 inactive 状态。它负责把宿主机拖进来的文件临时挂载成一个可读写的 fuse 目录,Sublime 只是读这个路径——如果挂载失败或没启动,拖拽动作就会卡在“等待挂载点就绪”上,表现就是卡死。
验证方法很简单:systemctl status run-vmblock\x2dfuse.mount。如果看到 Active: inactive (dead) 或 failed,就坐实了问题根源。别急着重装 open-vm-tools,那只会浪费时间。
-
vmblock-fuse和vmtoolsd是两个独立服务:后者管剪贴板和分辨率,前者专管拖拽 - 即使
vmtoolsd显示 active,vmblock-fuse也可能 disabled 或 failed - 常见触发场景:系统更新后服务被重置、手动禁用过、或 open-vm-tools 升级时未自动启用 mount unit
手动启用并设为开机自启
直接运行以下命令即可恢复拖拽功能,无需重启虚拟机:
sudo systemctl enable --now run-vmblock\x2dfuse.mount sudo systemctl start run-vmblock\x2dfuse.mount
注意:\x2dfuse 是 URL 编码的连字符,不能写成 -fuse 或 _fuse,否则 systemd 找不到 unit 文件。执行后立刻检查状态:systemctl status run-vmblock\x2dfuse.mount,应显示 active (mounted) 且挂载点为 /mnt/hgfs 或类似路径。
- 如果提示
Failed to enable unit: Unit run-vmblock\x2dfuse.mount does not exist,说明 open-vm-tools 安装不完整,需补装:sudo apt install open-vm-tools-desktop(Debian/Ubuntu)或sudo dnf install open-vm-tools-desktop(Fedora/RHEL) - 某些发行版(如 Arch)需额外安装
fuse2或启用fuse内核模块:sudo modprobe fuse - 启用后仍不生效?检查用户是否在
fuse用户组:sudo usermod -aG fuse $USER,然后重新登录终端
Sublime 侧要避开索引干扰
即使 vmblock-fuse 正常工作,Sublime 在拖拽后自动打开文件时仍可能卡住——尤其当拖入的是含 node_modules 或 .git 的整个项目目录。这是因为 Sublime 默认开启 index_files,会立即递归扫描所有子文件,CPU 瞬间拉满。
必须在用户设置中关闭它:
{
"index_files": false,
"large_file_size_limit": 100
}
-
"index_files": false是硬性要求,不加这一条,拖进来的项目一展开就卡死 -
"large_file_size_limit": 100防止拖入单个超大日志文件时触发语法分析 - 改完设置后,务必彻底退出 Sublime:
pkill -f "sublime_text",再重启,仅重载设置无效 - 不要依赖“安全模式”临时解决——那是排查手段,不是长期方案
拖拽后文件权限异常或打不开?检查挂载选项
有时拖拽成功但 Sublime 提示“Permission denied”或“Unable to open file”,实际是 vmblock-fuse 挂载时没带 allow_other 选项,导致普通用户无法访问挂载点下的文件。
查看当前挂载参数:mount | grep hgfs。如果输出中不含 allow_other,需修改 mount unit:
sudo systemctl edit run-vmblock\x2dfuse.mount
填入:
[Service] ExecStart= ExecStart=/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other
- 关键在
allow_other—— 缺了它,只有 root 能读写拖拽进来的文件 -
ExecStart=是清空默认命令的必需行,否则会叠加执行 - 改完后重启服务:
sudo systemctl restart run-vmblock\x2dfuse.mount - 若
/mnt/hgfs不存在,先创建:sudo mkdir -p /mnt/hgfs
真正容易被忽略的是:vmblock-fuse 的状态和挂载参数必须同时正确,缺一不可。很多人修好了 service 却卡在权限,或者开了 allow_other 却忘了启用 mount unit——这两步得一起做,少一步拖拽都走不完完整链路。


















