之前觉得在 Linux 上用 VMware Workstation Pro(以下简称“Workstation”)很麻烦,于是就换用 Virtual Box。
用了大概有四个月吧,感觉它一些系统适配得不太好,虚拟机性能也不如 Workstation,于是兜兜转转又回到了 Workstation。
但是在我的 Arch Linux 上安装 Workstation 似乎会有亿点儿问题,故有此一记。
尽管本文章以 Arch 为例,但是本文章的有些部分也适用于其他发行版。
例如:下载安装文件、解决 GNOME & Wayland 键盘捕获问题等。
Virtual Box 与 Workstation 的比较
开始之前,先列举一下两者的槽点。
这里的体验都是 Linux 上的。
| 内容 \ 软件 | Virtual Box | Workstation |
|---|---|---|
| 许可 | GPL-3.0-only,开源许可,免费 | 闭源,现在免费了 |
| 安装 | 更方便一些,Arch 和 Debian 官方仓库里都有。 | 需要自己下载那个 .bundle 文件 |
| 用户界面(GNOME 上) | 它比 Workstation 更好看及现代一点,同时,虚拟机控制台视图与虚拟机管理器是分开的窗口 | |
| 用户界面-语言 | 支持简体中文 | 不支持中文,只能用英文 |
| 虚拟机-硬盘 | 虚拟硬盘文件支持更广泛,也支持 .vmdk | 虚拟硬盘文件基本只支持 .vmdk。但是支持压缩,碎片整理 |
| 虚拟机-网络 | 配置定义有限 | 有虚拟网络编辑器,很灵活 |
| 虚拟机-快照 | 有子快照时,不支持删除父快照。也就是说,对于快照树来说,想要删除父结点必要先删除它的子树。这一点很糟糕 | 没有 VBox 的问题 |
| 虚拟机-图形性能 | 更差 | 更好 |
| 虚拟机-拖放及剪贴板共享 | 需要安装 Additions,可以选择开启或关闭。剪贴板共享没问题,但是拖放总是报错。想要传文件最好通过共享文件夹 | 安装 Tools 后就会启用,没有关闭选项。拖放从客户机到宿主机有些问题 |
安装
我选择使用克隆仓库的方式获取构建文件。
如果使用 yay 一类的 AUR 助手,我不清楚如何干预安装(自己下载源文件、改 PKGBUILD)。在这里恕不赘述。
每个用户都应该在构建和安装 AUR 前审查其 PKGBUILD 等构建文件。
详情参阅 Arch Wiki。
在 Arch Linux 上,你只需要安装 vmware-workstation AUR……
然后就会惊喜地发现卡在下载源文件。
$ makepkg
==> 正在创建软件包:vmware-workstation 25688693:26H1u1-3 (2026年09月13日 星期日 22时10分39秒)
==> 正在检查运行时依赖关系...
==> 正在检查编译时依赖关系
==> 获取源代码...
-> 正在下载 VMware-Workstation-Full-26H1u1-25688693.x86_64.bundle...
获取源文件
查看 PKGBUILD 文件,发现 Workstation 的 .bundle 安装包是通过 archive.org 下载的,所以在中国下不下来。
部分 PKGBUILD
source=(
"VMware-Workstation-Full-${pkgver}-${_buildver}.${CARCH}.bundle::https://archive.org/download/VMware-Workstation-Full-${pkgver}-${_buildver}.${CARCH}/VMware-Workstation-Full-${pkgver}-${_buildver}.${CARCH}.bundle"
"https://packages-prod.broadcom.com/tools/frozen/linux/linux.iso"
"https://packages-prod.broadcom.com/tools/frozen/linux/linuxPreGlibc25.iso"
"https://packages-prod.broadcom.com/tools/frozen/netware/netware.iso"
"https://packages-prod.broadcom.com/tools/frozen/solaris/solaris.iso"
"https://packages-prod.broadcom.com/tools/frozen/windows/winPre2k.iso"
"https://packages-prod.broadcom.com/tools/frozen/windows/winPreVista.iso"
"winVistaSP1.iso::https://packages-prod.broadcom.com/tools/frozen/windows/WindowsToolsVista/SP1/windows.iso"
"winVistaSP2.iso::https://packages-prod.broadcom.com/tools/frozen/windows/WindowsToolsVista/SP2/windows.iso"
)即使 Workstation 现在已经免费了,但是下载它还要费些周折。你必须得注册 Broadcom 账号,填一大堆奇奇怪怪的信息。
嫌麻烦的话,我们可以在 201853910/VMwareWorkstation 仓库下载。Release 更新基本及时,通过 GitHub Release 下载加速 一类的网站下载,速度还是不错的。
下面要下载的是 VMware Tools 的 ISO 镜像文件。只能通过 PKGBUILD 里提供的 Broadcom 官方链接下载了。白天下载速度更高。
将下载到的源文件放到放有构建文件的文件夹里(克隆的仓库),确保文件名与 PKGBUILD 中的文件名保持一致,makepkg 应该会找到源文件并且校验完整性。若有校验失败的文件,只能重下,没有更好的方法。
我是将源文件放到别的路径下(USB 闪存盘)里,随后用一段简单的 shell 脚本将它们在仓库文件夹里创建软链。
#! /usr/bin/bash
DEST="/path/to/aur/repo/of/vmware-workstation"
for file in *; do
if ! [ $file = $0 ]; then
echo $file
ln -sr $file "$DEST" # r: 相对于链接位置
fi
done按需求修改 PKGBUILD
默认的 PKGBUILD 配置通常不符合一般要求。主要就是要修改 _remove_vmware_keymaps_dependency 项。
# vmware-keymaps dependency is needed to avoid some conflicts when you install
# this package with vmware-horizon-client. If you don't plan to install
# vmware-horizon-client and don't want to add this dependency, you can
# uncomment the line below:
_remove_vmware_keymaps_dependency=y
如果你不安装 vmware-horizon-client,可以按提示去掉该行注释,不然还要多出 vmware-keymaps 这个 AUR 依赖,很麻烦。
构建并安装
准备完成后,目录下是这样的:
目录
.
├── config
├── configure-initscript.sh
├── dkms.conf.in
├── efi-patches.txt
├── linux.iso -> /path/to/linux.iso
├── linuxPreGlibc25.iso -> /path/to/linuxPreGlibc25.iso
├── Makefile
├── netware.iso -> /path/to/netware.iso
├── PKGBUILD
├── solaris.iso -> /path/to/solaris.iso
├── unlocker.py
├── vmmon.patch
├── vmnet.patch
├── vmware-bootstrap
├── vmware-environment.sh
├── vmware-networks-configuration.service
├── vmware-networks.path
├── vmware-networks.service
├── vmware-usbarbitrator.path
├── vmware-usbarbitrator.service
├── vmware-vix-bootstrap
├── VMware-Workstation-Full-26H1u1-25688693.x86_64.bundle -> /path/to/VMware-Workstation-Full-26H1u1-25688693.x86_64.bundle
├── vmware-workstation.install
├── winPre2k.iso -> /path/to/winPre2k.iso
├── winPreVista.iso -> /path/to/winPreVista.iso
├── winVistaSP1.iso -> /path/to/winVistaSP1.iso
└── winVistaSP2.iso -> /path/to/winVistaSP2.iso
1 directories, 27 files确认好后,可以开始构建。运行 makepkg -sic,有类似下面的输出。
输出
$ makepkg -sic
==> 正在创建软件包:vmware-workstation 25688693:26H1u1-3 (2026年09月17日 星期四 22时26分16秒)
==> 正在检查运行时依赖关系...
==> 正在检查编译时依赖关系
==> 获取源代码...
-> 找到 VMware-Workstation-Full-26H1u1-25688693.x86_64.bundle
-> 找到 linux.iso
-> 找到 linuxPreGlibc25.iso
-> 找到 netware.iso
-> 找到 solaris.iso
-> 找到 winPre2k.iso
-> 找到 winPreVista.iso
-> 找到 winVistaSP1.iso
-> 找到 winVistaSP2.iso
-> 找到 vmware-bootstrap
-> 找到 vmware-vix-bootstrap
-> 找到 config
-> 找到 configure-initscript.sh
-> 找到 vmware-environment.sh
-> 找到 vmware-networks-configuration.service
-> 找到 vmware-networks.service
-> 找到 vmware-usbarbitrator.service
-> 找到 vmware-networks.path
-> 找到 vmware-usbarbitrator.path
-> 找到 dkms.conf.in
-> 找到 Makefile
-> 找到 vmmon.patch
-> 找到 vmnet.patch
==> 正在验证 source 文件,使用sha256sums...
==> 正在释放源码...
-> 正在解压缩 linux.iso,使用 bsdtar
-> 正在解压缩 linuxPreGlibc25.iso,使用 bsdtar
-> 正在解压缩 netware.iso,使用 bsdtar
-> 正在解压缩 solaris.iso,使用 bsdtar
-> 正在解压缩 winPre2k.iso,使用 bsdtar
-> 正在解压缩 winPreVista.iso,使用 bsdtar
-> 正在解压缩 winVistaSP1.iso,使用 bsdtar
-> 正在解压缩 winVistaSP2.iso,使用 bsdtar
==> 正在开始 prepare()...
Extracting VMware Installer...done.
==> 正在进入 fakeroot 环境...
==> 正在开始 package()...
==> Patching vmmon module for DKMS
patching file Makefile
==> Patching vmnet module for DKMS
patching file Makefile
==> 正在清理安装...
-> 正在删除 libtool 文件...
-> 正在移除静态库文件...
-> 正在清除不打算要的文件...
-> 正在压缩 man 及 info 文档...
==> 正在检查打包问题...
==> 正在构建软件包"vmware-workstation"...
-> 正在生成 .PKGINFO 文件...
-> 正在生成 .BUILDINFO 文件...
-> 正在添加 install 文件...
-> 正在生成 .MTREE 文件...
-> 正在压缩软件包...
==> 正在离开 fakeroot 环境。
==> 完成创建:vmware-workstation 25688693:26H1u1-3 (2026年09月17日 星期四 22时26分37秒)
==> 正在安装软件包 vmware-workstation,使用 pacman -U...
正在加载软件包...
正在解析依赖关系...
正在查找软件包冲突...
软件包 (1) vmware-workstation-25688693:26H1u1-3
全部安装大小: 1181.58 MiB
净更新大小: 0.00 MiB
正在检查密钥环......
正在检查软件包完整性...
正在加载软件包文件...
正在检查文件冲突...
正在检查可用存储空间...
:: 正在运行事务前钩子函数...
(1/1) Remove upgraded DKMS modules
==> dkms remove --no-depmod vmware-workstation/26H1u1_25688693 -k 7.2.4-arch1-2
:: 正在处理软件包的变化...
正在升级 vmware-workstation...
:: 正在运行事务后钩子函数...
(1/8) Reloading system manager configuration...
(2/8) Enqueuing marked services...
(3/8) Arming ConditionNeedsUpdate...
(4/8) Loading new kernel modules...
(5/8) Install DKMS modules
==> dkms install --no-depmod vmware-workstation/26H1u1_25688693 -k 7.2.4-arch1-2
==> depmod 7.2.4-arch1-2
(6/8) Updating linux initcpios...
==> Building image from preset: /etc/mkinitcpio.d/linux.preset: 'default'
==> Using default configuration file: '/etc/mkinitcpio.conf'
-> -k /boot/vmlinuz-linux -g /boot/initramfs-linux.img
==> Starting build: '7.2.4-arch1-2'
-> Running build hook: [base]
-> Running build hook: [systemd]
-> Running build hook: [autodetect]
-> Running build hook: [microcode]
-> Running build hook: [modconf]
-> Running build hook: [kms]
-> Running build hook: [keyboard]
-> Running build hook: [sd-vconsole]
-> Running build hook: [block]
-> Running build hook: [filesystems]
-> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: '/boot/initramfs-linux.img'
-> Early uncompressed CPIO image generation successful
==> Initcpio image generation successful
(7/8) Updating icon theme caches...
(8/8) Updating the desktop file MIME type cache...
==> 清理中...随后,安装已安装内核对应的头文件包(如 linux-headers)。
然后可以清理掉软链接。运行 git clean -dfx 和 git restore PKGBUILD,工作区就干净了。
但是下次安装的时候记得重新改 PKGBUILD。
安装后的操作
按要求启用服务
若是安装而不是升级,你应该会看到以下提示:
==> Before using VMware, you need to reboot or load vmw_vmci and vmmon kernel modules (in a terminal on root: modprobe -a vmw_vmci vmmon)
==> You may also need to enable some of the following services:
- vmware-networks: to have network access inside VMs
- vmware-usbarbitrator: to connect USB devices inside VMs
These services can be activated during boot by enabling .service units or only when a VM is started by enabling .path units.
我们可以知道,如果想在虚拟机内使用网络,需要启用 vmware-networks.service;如果想在虚拟机内连接 USB 设备,需要启用 vmware-usbarbitrator.service。
在我的实际使用中,启用 .path 单元文件而不是 .service 的话,你只有在启动虚拟机后(而不是打开 Workstation 的主界面)服务才会启动。也就是说,你还要重新启动虚拟机才能用网络……因此最好使用 .service 单元文件。
解决 Wayland 下 GNOME 中键盘无法捕获
由于 VMware 好像在使用 X on Wayland,会有一些兼容性问题。
一旦按下 GNOME 的快捷键,不管键盘是否已被虚拟机捕获,都是 GNOME 的快捷键发挥作用,而不是将输入重定向至虚拟机中。
我们需要用 gsettings 配置 xwayland 选项,允许其捕获一切键盘键。
$ gsettings set org.gnome.mutter.wayland xwayland-allow-grabs "true"
$ gsettings set org.gnome.mutter.wayland xwayland-grab-access-rules "['vmware', 'vmplayer', 'vmware-vmx', 'mksSandbox']"
或者,你也可以通过 Dconf 编辑器来完成这些操作。
如果成功了,虚拟机捕获键盘后,按下 Super/Windows 键,应该不会跳出 GNOME 的活动概览了。
安装 Vulkan
要启用 3D 加速,需要安装 Vulkan。
启用虚拟机 3D 加速后,就会看到虚拟机多出一个显卡。
根据你的显卡安装对应的 Vulkan 驱动。查找提供 vulkan-driver 的软件包,并安装对应的包以及 vulkan-tools。
$ pacman -Ss vulkan-driver
extra/nvidia-utils 615.71.09-1
NVIDIA drivers utilities # 这是 Nvidia 专有的
extra/vulkan-asahi 1:26.2.3-1
Open-source Vulkan driver for Apple GPUs
extra/vulkan-broadcom 1:26.2.3-1
Open-source Vulkan driver for VideoCore GPUs
extra/vulkan-dzn 1:26.2.3-1
Open-source Vulkan driver for D3D12
extra/vulkan-freedreno 1:26.2.3-1
Open-source Vulkan driver for Adreno GPUs
extra/vulkan-gfxstream 1:26.2.3-1
Open-source Vulkan driver for Graphics Streaming Kit
extra/vulkan-intel 1:26.2.3-1 [已安装]
Open-source Vulkan driver for Intel GPUs
extra/vulkan-nouveau 1:26.2.3-1
Open-source Vulkan driver for Nvidia GPUs # 这属于 Mesa 项目的一部分
extra/vulkan-panfrost 1:26.2.3-1
Open-source Vulkan driver for Mali GPUs
extra/vulkan-powervr 1:26.2.3-1
Open-source Vulkan driver for PowerVR GPUs
extra/vulkan-radeon 1:26.2.3-1
Open-source Vulkan driver for AMD GPUs
extra/vulkan-swrast 1:26.2.3-1
Open-source Vulkan driver for CPUs (Software Rasterizer)
extra/vulkan-virtio 1:26.2.3-1
Open-source Vulkan driver for Virtio-GPU (Venus)
# pacman -S vulkan-intel vulkan-tools # 对于 Intel 显卡
$ vulkaninfo
==========
VULKANINFO
==========
Vulkan Instance Version: 1.4.357
# ...
# 看看有没有 GPU 信息
$ vkcube # 测试