VMWare 以用户systemd形式自动挂载共享文件夹

800 字
4 分钟
VMWare 以用户systemd形式自动挂载共享文件夹

VMware 共享文件夹自动挂载指南#

  • 本文由Codex完成,本人仅在Fedora 43系统(niri+dms)上测试成功,其它系统请自行测试

适用场景:

  • 宿主机使用 VMware
  • 已在 VMware 里开启 Shared Folders
  • 希望在图形会话登录后自动挂载

这份方案默认使用“用户级 systemd 服务”来完成自动挂载。

优点:

  • 不需要修改 /etc/fstab
  • 不依赖桌面环境的自动挂载组件
  • 不需要 root 权限
  • 对 Wayland compositor 场景更稳
  • 后续新增共享文件夹后,不需要改服务文件

1. 前提检查#

确认系统已安装 VMware Tools:

Terminal window
rpm -q open-vm-tools open-vm-tools-desktop

确认相关命令存在:

Terminal window
which vmhgfs-fuse vmware-hgfsclient vmtoolsd

确认 VMware 已经把共享目录暴露给客户机:

Terminal window
vmware-hgfsclient

如果这里能列出共享目录名,例如:

Share
Work

说明 VMware 共享文件夹功能已经正常。

2. 创建用户级 systemd 服务#

创建目录:

Terminal window
mkdir -p ~/.config/systemd/user

写入服务文件 ~/.config/systemd/user/vmhgfs-mount.service

[Unit]
Description=Mount VMware shared folders in the user session
Documentation=https://github.com/vmware/open-vm-tools
ConditionVirtualization=vmware
ConditionPathExists=/usr/bin/vmhgfs-fuse
[Service]
Type=simple
ExecStartPre=/usr/bin/mkdir -p %h/hgfs
ExecStartPre=/usr/bin/bash -lc '/usr/bin/mountpoint -q %h/hgfs && /usr/bin/fusermount3 -u %h/hgfs || true'
ExecStart=/usr/bin/bash -lc '/usr/bin/vmhgfs-fuse .host:/ %h/hgfs -f -o uid=$(id -u),gid=$(id -g),auto_unmount'
ExecStop=/usr/bin/bash -lc '/usr/bin/mountpoint -q %h/hgfs && /usr/bin/fusermount3 -u %h/hgfs || true'
Restart=on-failure
RestartSec=2
[Install]
WantedBy=default.target

说明:

  • 挂载点固定为 ~/hgfs
  • .host:/ 表示挂载“所有共享文件夹”的根
  • 这不是硬编码某一个共享目录
  • uid=$(id -u)gid=$(id -g) 会在服务启动时读取当前用户的实际编号
  • 因此不需要假设当前用户一定是 1000:1000
  • 后续你在 VMware 里新增共享目录后,重新登录或重启后会自动出现在 ~/hgfs/

3. 启用服务#

Terminal window
systemctl --user daemon-reload
systemctl --user enable --now vmhgfs-mount.service

检查状态:

Terminal window
systemctl --user status --no-pager vmhgfs-mount.service

--no-pager 的作用是禁止 systemctl 调用分页器(例如 less),让结果直接一次性输出完,适合脚本和非交互环境。

如果你修改过服务文件,记得重新加载:

Terminal window
systemctl --user daemon-reload
systemctl --user restart vmhgfs-mount.service

4. 验证挂载结果#

查看挂载状态:

Terminal window
findmnt ~/hgfs

查看共享目录:

Terminal window
ls -la ~/hgfs

正常情况下会看到类似:

~/hgfs/Share
~/hgfs/Work

5. 后续维护#

如果你在 VMware 里新增了共享目录:

  • 通常重新登录图形会话即可生效
  • 或者手动刷新服务
Terminal window
systemctl --user restart vmhgfs-mount.service

如果你删除了某个共享目录:

  • 重新登录或重启服务后,对应目录会从 ~/hgfs 下消失

6. 卸载或回滚#

停止并禁用服务:

Terminal window
systemctl --user disable --now vmhgfs-mount.service

删除服务文件:

Terminal window
rm -f ~/.config/systemd/user/vmhgfs-mount.service
systemctl --user daemon-reload

如果还需要移除挂载点目录:

Terminal window
rmdir ~/hgfs

7. 设计说明#

这份配置选择的是“登录后自动挂载”,不是“系统开机但用户未登录时就挂载”。

这样做的原因:

  • vmhgfs-fuse 本身非常适合在用户会话里运行
  • 不需要 root 配置
  • niri + dms 这类轻量会话环境更直接
  • 挂载目录在用户家目录下,权限模型更简单
  • 服务启动时动态读取当前用户的 UID/GID,适合跨机器复用

如果你需要的是系统级挂载,例如固定挂到 /mnt/hgfs,可以另做一个 root 级的 systemd mount/service 方案,但那是另一套配置。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

VMWare 以用户systemd形式自动挂载共享文件夹
https://blog.lentikr.top/posts/260401_vmware_share/
作者
lentikr
发布于
2026-04-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
lentikr
Hello, I'm lentikr.
分类
标签
站点统计
文章
4
分类
1
标签
4
总字数
13,480
运行时长
0
最后活动
0 天前

目录