VMware
本文档涉及最新的 VMware 主要版本,即 VMware Workstation Pro 和 Player 17、16、15、14 以及 12.5。
您可能还会对 /将 Arch Linux 安装为客户机 感兴趣。
安装
安装 vmware-workstationAUR 软件包。
还需要为已安装的内核安装相应的头文件软件包:例如 linux-headers 或 linux-lts-headers。
首先 启动 vmware-networks-configuration.service 以生成 /etc/vmware/networking。
然后,根据需要启用以下部分服务:
vmware-networks.service用于客户机网络访问(否则会报错could no connect 'ethernet 0' to virtual network,且无法使用 vmware-netcfg)vmware-usbarbitrator.service用于将 USB 设备连接到客户机vmware-hostd.service用于共享虚拟机(自 16 版本起不可用)
最后,加载 VMware 模块
# modprobe -a vmw_vmci vmmon
如果加载时间过长且无响应,请尝试 #无法加载 vmmon 模块。
用法
要打开 VMware Workstation Pro
$ vmware
或者 Player
$ vmplayer
技巧与提示
输入 Workstation Pro 许可证密钥
通过终端
# /usr/lib/vmware/bin/vmware-vmx-debug --new-sn XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
其中 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX 是您的许可证密钥。
-debug 二进制文件会提示用户许可证不正确。通过 GUI
如果上述方法不起作用,您可以尝试
# /usr/lib/vmware/bin/vmware-enter-serial
提取 VMware BIOS
$ objcopy /usr/lib/vmware/bin/vmware-vmx -O binary -j bios440 --set-section-flags bios440=a bios440.rom.Z $ perl -e 'use Compress::Zlib; my $v; read STDIN, $v, '$(stat -c%s "./bios440.rom.Z")'; $v = uncompress($v); print $v;' < bios440.rom.Z > bios440.rom
提取安装程序
查看安装程序 .bundle 的内容
$ sh VMware-edition-version.release.architecture.bundle --extract /tmp/vmware-bundle/
使用修改后的 BIOS
如果您决定修改提取出的 BIOS,可以通过将其移动到 ~/vmware/虚拟机名称 来使虚拟机使用它
$ mv bios440.rom ~/vmware/Virtual_machine_name/
然后将名称添加到 虚拟机名称.vmx 文件中
~/vmware/Virtual_machine_name/Virtual_machine_name.vmx
bios440.filename = "bios440.rom"
在 Intel、Optimus 和 AMD 上启用 3D 图形加速
由于 3D 加速效果不佳或不稳定,默认情况下会禁用某些显卡驱动。启用 加速 3D 图形 后,日志中可能会出现类似以下内容:
Disabling 3D on this host due to presence of Mesa DRI driver. Set mks.gl.allowBlacklistedDrivers = TRUE to override.
您可以设置此项的配置文件是 ~/.vmware/preferences。
VMware Workstation 16.2 从 OpenGL 切换到了 Vulkan,因此设置有所不同。如果您的驱动程序不受支持,日志中可能会看到类似以下消息:
mks Vulkan Renderer: Only the AMDVLK driver is supported at this time. mks Vulkan Renderer: No supported Vulkan device/driver found (See mks.vk.allowUnsupportedDevices or mks.vk.forceDevice configuration options).
如果您的 Vulkan 驱动程序被列入黑名单,您可能需要将 mks.vk.allowUnsupportedDevices = "TRUE" 添加到 ~/.vmware/preferences,或者切换到受支持的驱动程序——如果不确定,请检查虚拟机目录中的 vmware.log。
.vmx 文件中添加 mks.gl.allowBlacklistedDrivers = "TRUE",以便启用 intel 驱动程序的 3D 加速。当在多显卡(GPU)环境下使用 Vulkan 时,可以通过检查 mksSandbox.log 来获取正确的适配器字符串,然后将其放入虚拟机的 .vmx 文件中以选择特定的设备。mksSandbox.log 中的示例:
mks Vulkan Renderer: Name: 'AMD Radeon RX 570 Series (RADV POLARIS10)'
然后,我们需要向虚拟机的 .vmx 文件中添加:
mks.vk.ForceDevice = "AMD Radeon RX 570 Series (RADV POLARIS10)"
在宿主机挂起/休眠前挂起虚拟机
创建一个 可执行 文件:
/usr/lib/systemd/system-sleep/vmware_suspend_all.sh
#!/bin/bash
set -eu
if [[ $# -ne 2 ]]; then
echo "Usage: $0 <period> <action>"
exit 1
fi
period=$1
action=$2
echo "vmware system-sleep hook argv: ${period} ${action}"
if ! command -v vmrun &>/dev/null; then
echo "command not found: vmrun"
fi
if [[ "${period}" = "pre" ]]; then
readarray -t vms < <(vmrun list | tail -n +2)
echo "Number of running VMs: ${#vms[@]}"
if [[ ${#vms[@]} -eq 0 ]]; then
exit
fi
for vm in "${vms[@]}"; do
echo -n "Suspending ${vm}... "
vmrun suspend "${vm}"
echo "done"
done
sleep 1
else
echo "Nothing to do"
fi
另请参阅 电源管理/挂起与休眠#Hooks in /usr/lib/systemd/system-sleep、使用 vmrun 挂起所有虚拟机 以及 休眠支持。
系统提速技巧
另请参阅 提升性能。
禁用透明大页
如果您注意到运行虚拟机时客户机和/或宿主机频繁冻结,则可能需要禁用透明大页。要为当前会话禁用它们,请(在宿主机上)运行:
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
要使更改在重启后持久生效,请添加 内核参数 transparent_hugepage=never。
您也可以使用 madvise 代替 never,这样仍允许针对透明大页优化的应用程序获得性能优势[1]。这对于 VMware 的效果与上述相同。
确保直接访问内存 (RAM)
默认情况下,VMware 会将正在运行的客户机系统的 RAM 写入磁盘文件。如果您确定有足够的空余内存,可以通过将以下内容添加到虚拟机的 .vmx 文件中,确保客户机系统将其内存直接写入宿主机的 RAM:
Virtual_machine_name.vmx
MemTrimRate = "0" sched.mem.pshare.enable = "FALSE" prefvmx.useRecommendedLockedMemSize = "TRUE" mainmem.backing = "swap"
虚拟机内 Chromium 浏览器图形卡顿/缓慢
浏览至 chrome://flags 并启用 "Override software rendering list",然后重启浏览器。
性能优化建议
为提升虚拟机性能,请尝试以下建议:
半虚拟化 SCSI 适配器
VMware 半虚拟化 SCSI (PVSCSI) 适配器 是适用于 VMware ESXi 的高性能存储适配器,可以带来更高的吞吐量并降低 CPU 使用率。PVSCSI 适配器最适用于硬件或应用程序驱动极高 I/O 吞吐量的环境。
SCSI 适配器类型 VMware Paravirtual 可在虚拟机设置中选择。
如果这些设置不在虚拟机的配置中,仍然可以启用半虚拟化 SCSI 适配器。请通过修改 mkinitcpio.conf 确保内核映像中包含半虚拟化 SCSI 适配器模块:
/etc/mkinitcpio.conf
... MODULES=(... vmw_pvscsi) ...
关闭虚拟机并更改 SCSI 适配器:将 .vmx 设置为以下内容:
scsi0.virtualDev = "pvscsi"
半虚拟化网络适配器
VMware 为客户机系统提供 多个网络适配器。默认使用的适配器通常是 e1000,它模拟 Intel 82545EM 千兆以太网网卡。此 Intel 适配器通常与大多数操作系统(包括 Arch)中的内置驱动程序兼容。
为了获得 更高的性能和附加功能(如多队列支持),可以使用 VMware 原生的 vmxnet3 网络适配器。
Arch 的默认安装中提供了 vmxnet3 内核模块。一旦在 mkinitcpio 中启用(或者如果是自动检测到;请运行 lsmod | grep vmxnet3 查看是否已加载),请关闭虚拟机并将 .vmx 文件中的网络适配器类型更改为以下内容:
ethernet0.virtualDev = "vmxnet3"
更改网络适配器后,需要更新网络和 dhcpcd 设置,以使用新的适配器名称和 MAC 地址。
# dhcpcd new_interface_name # systemctl enable dhcpcd@new_interface_name.service
新的接口名称可以通过运行 ip link 获取。
虚拟机设置
这些设置可以通过减少磁盘 I/O 来帮助提高虚拟机的响应速度,但代价是使用更多的宿主机内存。Vmware 的 KB1008885 提供了以下优化:
mainMem.useNamedFile = "FALSE" MemTrimRate = "0" prefvmx.useRecommendedLockedMemSize = "TRUE" MemAllowAutoScaleDown = "FALSE" sched.mem.pshare.enable = "FALSE"
- mainMem.useNamedFile:此设置仅适用于 Windows 宿主机。如果虚拟机关闭时磁盘活动频繁,可以使用此参数。这会阻止 VMware 创建 .vmem 文件。在 Linux 宿主机上,请改用 mainmem.backing = "swap"。
- MemTrimRate:此设置防止客户机释放的内存同时也从宿主机释放。
- prefvmx.useRecommendedLockedMemSize:遗憾的是,此设置似乎没有合适的解释;它似乎可以防止宿主机交换客户机内存的部分内容。
- MemAllowAutoScaleDown:如果无法分配足够的内存,此设置可防止 VMware 调整虚拟机的内存大小。
- sched.mem.pshare.enable:如果同时运行多个虚拟机,VMware 会尝试定位相同的页面并在虚拟机之间共享它们。这可能会导致极高的 I/O 密集度。
以下设置也可以在 VMware Workstation 的配置对话框中设置(Edit -> Preferences... -> Memory/Priority)。
prefvmx.minVmMemPct = "100" mainMem.partialLazySave = "FALSE" mainMem.partialLazyRestore = "FALSE"
- prefvmx.minVmMemPct:设置应在宿主机上为虚拟机保留的 RAM 百分比。如果此值设置得较低,则可以为虚拟机分配比宿主机实际可用更多的内存。但请小心,因为这极有可能导致过度的硬盘使用。如果宿主机有足够的 RAM,此值应保留为 100。
- mainMem.partialLazySave 和 mainMem.partialLazyRestore:这两个参数将阻止虚拟机在挂起时创建部分快照。使用这些参数时,挂起虚拟机的时间会稍长一些,但 VMware 试图存储此信息时的硬盘活动应该会减少。
故障排除
未找到版本 x.y-zzzz 的内核头文件。如果您已经安装了它们[...]
安装头文件 (linux-headers)。
无法加载 vmmon 模块
正如 VMware 社区 所解释,请禁用 安全启动 (Secure Boot) 以使用 vmmon 加载 VMware 模块。
尝试远程访问 VMware 时登录名/密码不正确
VMware Workstation 提供了通过 vmware-workstation-server 服务远程管理共享虚拟机 (Shared VMs) 的功能。但是,由于 vmware-authd 服务的 PAM 配置不正确,这会因 "incorrect username/password" 错误而失败。要修复它,请按如下方式编辑 /etc/pam.d/vmware-authd:
/etc/pam.d/vmware-authd
#%PAM-1.0 auth required pam_unix.so account required pam_unix.so password required pam_permit.so session required pam_unix.so
然后重启 vmware systemd 服务。
现在您可以使用安装期间提供的凭据连接到服务器。
ALSA 输出问题
修复音质问题或启用正确的 HD 音频输出,首先运行:
$ aplay -L
如果对从客户机播放 5.1 环绕声 感兴趣,请寻找 surround51:CARD=vendor_name,DEV=num;如果遇到音质问题,请寻找 front:CARD=vendor_name,DEV=num。最后将该名称放入 .vmx 文件中。
~/vmware/Virtual_machine_name/Virtual_machine_name.vmx
sound.fileName="surround51:CARD=Live,DEV=0" sound.autodetect="FALSE"
还应禁用 OSS 模拟。
基于内核的虚拟机 (KVM) 正在运行
要在启动时禁用 KVM,可以使用类似以下的操作:
/etc/modprobe.d/vmware.conf
blacklist kvm blacklist kvm-amd # For AMD CPUs blacklist kvm-intel # For Intel CPUs
kvm 模块仍然加载,并且您运行的是集成 Intel 显卡 (i915,i965) 的系统,则可能需要直接从内核命令行选项中列出 kvmgt 内核模块的黑名单。更多详细信息请参阅 内核模块#使用内核命令行_2。VMware 应用程序界面的图标和边距在 HiDPI 显示器上缩放不正确
请参阅 HiDPI#VMware。
Wayland 相关问题
GNOME 上键盘捕获功能失效
VMWare Player/Workstation 17.5(及更旧版本)存在此处讨论的问题。
要允许用户界面捕获键盘:
$ gsettings set org.gnome.mutter.wayland xwayland-allow-grabs "true" $ gsettings set org.gnome.mutter.wayland xwayland-grab-access-rules "['vmplayer','vmware-vmx','mksSandbox']"
作为替代方案,您可以在 Windows 中使用以下键盘快捷键:
Super+Alt+Tab代替Alt+Tab进行任务切换Ctrl+Esc用于开始菜单
模块问题
找不到 /dev/vmmon
完整的错误是:
Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module 'vmmon' is loaded.
这意味着至少 vmmon 模块未加载。启用服务(见 #安装)以实现自动加载。
另一个可能的原因是第 11 代及以后的 Intel 处理器上启用了间接分支跟踪 (Indirect Branch Tracking),且内核版本在 5.18 以上。
将 ibt=off 添加到您的 内核命令行。更多详细信息请参阅 [2]。
找不到 /dev/vmci
完整的错误是:
Failed to open device "/dev/vmci": No such file or directory Please make sure that the kernel module 'vmci' is loaded.
首先,尝试手动加载模块:
# modprobe -a vmw_vmci
尝试通过以下方式重新编译 VMware 内核模块:
# vmware-modconfig --console --install-all
VMware 无法启动
模块 CPUIDEarly 加电失败
版本 14 对 CPU 的要求比版本 12 更严格。如果您尝试在受影响的 CPU 上启动虚拟机,将会出现以下消息:
This host does not support virtualizing real mode. The Intel "VMX Unrestricted Guest" feature is necessary to run this virtual machine on an Intel processor.
解决方法是卸载版本 14 并安装版本 12 (vmware-workstation12AUR)。
当 VMware 本来可用,但突然出现此错误时,可能是由于热启动/软启动或系统挂起后引起的。请尝试冷启动(关闭系统并重新启动)。
由于旧 Intel 微代码导致的启动段错误
旧的 Intel 微代码可能会导致启动时出现以下段错误:
/usr/bin/vmware: line 31: 4941 Segmentation fault "$BINDIR"/vmware-modconfig --appname="VMware Workstation" --icon="vmware-workstation"
有关如何更新微代码的信息,请参阅 微代码。
vmplayer/vmware 版本 14 无法启动
在 librsvg 版本 2:2.44.0 及以上的系统上,日志文件(位于 /tmp/vmware-<id>)会显示多个以下错误实例:
appLoader| I125+ undefined symbol
解决方法是将 librsvg 降级到旧版本,或者更推荐的做法是,强制 VMware 使用其自带的 librsvg 版本:
# export LD_LIBRARY_PATH=/lib/vmware/lib/librsvg-2.so.2:$LD_LIBRARY_PATH
VMware 还有一个 VMWARE_USE_SHIPPED_LIBS 变量:
$ env VMWARE_USE_SHIPPED_LIBS=1 vmware
vmplayer/vmware 12.5.4 及更高版本无法启动
根据 [3],临时解决方法是将 libpng 软件包降级到 1.6.28-1 版本,并在 /etc/pacman.conf 的 IgnorePkg 参数中将其锁定。
更简单的解决方法是让 VMWare 使用系统的 zlib 版本,而不是它自己的版本:
# cd /usr/lib/vmware/lib/libz.so.1 # mv libz.so.1 libz.so.1.old # ln -s /usr/lib/libz.so.1 .
vmplayer/vmware 12.5.3 至 12.5.5 版本无法启动
这似乎是 /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6 文件的问题,缺少 CXXABI_1.3.8。
如果系统已经安装了 gcc-libs,那么该库已经安装。因此,可以删除该文件,vmplayer 将会使用 gcc-libs 提供的库。以 root 身份执行:
# mv /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6 /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6.bak
此外还有一种解决方法:
# export VMWARE_USE_SHIPPED_LIBS='yes'
vmware 12 进程启动后立即终止,未启动 GUI
在 Mageia 注册了 Bug,但 Arch 终端中似乎没有显示错误信息。检查 /tmp/vmware-<id> 中的日志时,存在 VMWARE_SHIPPED_LIBS_LIST is not set、VMWARE_SYSTEM_LIBS_LIST is not set、VMWARE_USE_SHIPPED_LIBS is not set、VMWARE_USE_SYSTEM_LIBS is not set 等问题。执行 vmware 或 vmplayer 后,进程直接以 Unable to execute /usr/lib/vmware/bin/vmware-modconfig. 终止。解决方法相同,以 root 身份执行:
# mv /etc/vmware/icu/icudt44l.dat /etc/vmware/icu/icudt44l.dat.bak
此外还有一种解决方法:
# export VMWARE_USE_SHIPPED_LIBS='yes'
尽管设置了 VMWARE_USE_SHIPPED_LIBS 变量,VMWare 可能仍然无法找到某些库。例如 libfontconfig.so.1 库。检查 tmp 目录中的 vmware 日志以查看哪些库仍未找到。将它们复制到系统中现有库的相应路径中。
# cp /usr/lib/libfontconfig.so.1 /usr/lib/vmware/lib/libfontconfig.so.1/
除了手动复制所有这些文件,您可以尝试导出额外的设置:
# export VMWARE_USE_SYSTEM_LIBS='yes'
在 fontconfig 版本 2.13.0 及以上的系统上,可能需要强制 VMware 使用自带的 libfontconfig 文件,而不是更新的系统文件。在这种情况下,还需要为自带的 fontconfig 提供共享对象库文件 libexpat.so.0。这适用于至少 VMware 12.5.9 版本。以 root 身份执行:
# ln -s /usr/lib/libexpat.so /usr/lib/vmware/lib/libfontconfig.so.1/libexpat.so.0 # export LD_LIBRARY_PATH=/usr/lib/vmware/lib/libfontconfig.so.1:$LD_LIBRARY_PATH
客户机问题
无法为客户机下载 VMware Tools
要手动下载工具,请访问 VMware 存储库[失效链接 2025-04-06—域名无法解析]。
导航至:"应用程序名称 / 版本 / 构建 ID / linux / packages/" 并下载相应的工具。
使用以下命令提取:
$ tar -xvf vmware-tools-name-version-buildID.x86_64.component.tar
并使用 VMware 安装程序进行安装。
# vmware-installer --install-component=/path/vmware-tools-name-version-buildID.x86_64.component
如果上述方法不起作用,请尝试安装 ncurses5-compat-libsAUR。
系统重启后客户机网络不可用
这很可能是因为 vmnet 模块没有被加载 [4]。启用服务(见 #安装)以实现自动加载。
鼠标问题
鼠标第 5 个以上的按键无效
如果鼠标的侧键或其他附加按键无效,请 设置客户机使用高级鼠标。
客户机中鼠标滚轮行为异常
这与宿主机系统当前的 Xorg 键盘布局有关。在客户机工作时,请保持宿主机上的主布局(例如英文)为选中状态。
嵌套虚拟机没有 IP 地址和网络连接
此问题与混杂模式 (promiscuous mode) 有关,根据 Linux 的标准做法,该模式只能由 root 用户启用。为了解决这些限制,必须更改相关网络设备的权限。
向一个组授予权限:
# chgrp group /dev/vmnetX
# chmod g+rw /dev/vmnetX
向所有用户授予权限:
# chmod a+rw /dev/vmnetX