本文介绍的是最新的主要 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
打开 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/虚拟机名称/
然后将名称添加到 虚拟机名称.vmx
文件:
~/vmware/虚拟机名称/虚拟机名称.vmx
bios440.filename = "bios440.rom"
在 Intel、Optimus 和 AMD 上启用 3D 图形加速
由于 3D 图形加速的性能或稳定性原因,有些图形驱动默认被禁用。在启用 Accelerate 3D graphics 后,可能会出现如下日志:
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).
如果你的驱动被禁用,你得把 mks.vk.allowUnsupportedDevices = "TRUE"
添加到 ~/.vmware/preferences
或者换一个支持的驱动 - 如果不确定要进行哪种操作,就看看虚拟机目录里的 vmware.log
。
mks.gl.allowBlacklistedDrivers = "TRUE"
inside the .vmx
file for the specific virtual machine as well, for 3D acceleration with intel
drivers to be enabled.在主机挂起/休眠之前挂起虚拟机
创建一个可执行文件:
/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
See also Power management/Suspend and hibernate#Hooks in /usr/lib/systemd/system-sleep, suspend all virtual machines with vmrun and Support for hibernation.
系统提速技巧
参考性能优化。
禁用透明大页
If you notice the guest and/or the host frequently freezing when running a VM, you may want to disable transparent hugepages. To disable them for the current session, run (on the host):
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
To make the change persistent across boots, add the kernel parameter transparent_hugepage=never
.
You can also use madvise
instead of never
to still allow applications that are optimized for transparent hugepages to obtain the performance benefits[1]. This does the same for vmware as above.
确保直接访问内存
默认情况下,VMware 会将虚拟机系统的内存写入到硬盘上的文件内。如果你确定内存空间足够,可以添加以下设置到虚拟机的 .vmx
文件内以确保虚机系统直接写入到内存中:
Virtual_machine_name.vmx
MemTrimRate = "0" sched.mem.pshare.enable = "FALSE" prefvmx.useRecommendedLockedMemSize = "TRUE" mainmem.backing = "swap"
性能提示
要提升虚拟机的性能,可以参考下列技巧:
准虚拟化 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:在主机上为虚拟机预留的内存大小百分比。更低的值会允许为虚拟机分配比主机系统可用大小更多的内存。但请注意,该情况很可能会导致高硬盘占用率。如果主机上的内存足够,建议保留该值为 100。
- mainMem.partialLazySave 和 mainMem.partialLazyRestore:这两个选项会防止虚拟机在挂起时创建部分快照。在使用这两个选项时,虚拟机挂起耗时会稍微增加,但会降低 VMware 存储这些数据产生的磁盘占用率。
解难答疑
Kernel headers for version x.y-zzzz were not found. If you installed them[...]
安装你使用内核所对应的 headers,如 linux包 对应linux-headers包
无法加载 vmmon 模块
根据 VMware 社区中的描述,需要禁用安全启动才能加载 vmmon
模块。
无法识别 USB 设备
如果没有使用 systemd 服务来自动处理服务,就需要每次都以根用户手动启动 vmware-usbarbitrator
。
启动方法:
# vmware-usbarbitrator
停止方法:
# vmware-usbarbitrator --kill
远程连接 VMware 时提示登录凭据错误
可以通过 vmware-workstation-server
服务远程管理 VMware Workstation 已共享的虚拟机,但是,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。在 HiDPI 显示器上,VMware 应用 UI 上的图标及间距没有正确缩放
参阅 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 下使用以下快捷键:
- 使用
Win+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
模块没有被加载。自动加载方法可参考 #systemd 服务一节。
另一种可能是由 5.18 版本内核以及 11 代和更新 Intel 处理器的间接分支跟踪功能导致。
在这种情况下,将 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
无法启动安装包
如果启动 .bundle
后会回到输入提示,那你的 VMware 安装器版本可能已经过时或损坏,需要将其移除(也可以参考#卸载一节):
# rm -r /etc/vmware-installer/
用户界面初始化失败
你可能会见到如下报错:
Extracting VMware Installer...done. No protocol specified No protocol specified User interface initialization failed. Exiting. Check the log for details.
该错误可以通过安装 ncurses5-compat-libsAUR 依赖或临时允许根访问权限解决:
$ xhost + $ sudo ./<vmware filename>.bundle $ xhost -
无法启动 VMware
CPUIDEarly 模块上电失败
版本 14 比 12 有更严格的 CPU 需求。如果你尝试在不兼容的 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
从 12.5.4 版本开始无法启动 vmplayer/vmware
参考 [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 .
无法启动 12.5.3 至 12.5.5 版本的 vmplayer/vmware
似乎是 /usr/lib/vmware/lib/libstdc++.so.6/libstdc++.so.6
文件缺少 CXXABI_1.3.8
导致的问题。
如果系统安装了 gcc-libs包,那就已有了该库文件。因此,可以尝试将其移除,然后 vmplayer 会转而使用 gcc-libs 提供的文件。以根用户权限执行:
# 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 后进程闪退,未能加载图形界面
Registered bug at Mageia, but it seems that there are no error messages shown in terminal with arch. When inspecting the logs, which are in /tmp/vmware-<id>
, there are 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
issues. Process simply terminates with Unable to execute /usr/lib/vmware/bin/vmware-modconfig.
after vmware or vmplayer is executed. Solution is the same, as root do:
# mv /etc/vmware/icu/icudt44l.dat /etc/vmware/icu/icudt44l.dat.bak
Also there is a workaround:
# export VMWARE_USE_SHIPPED_LIBS='yes'
Despite setting the VMWARE_USE_SHIPPED_LIBS variable, VMWare may still fail to find certain libraries. An example is the libfontconfig.so.1 library. Check vmware logs in the tmp directory to see which libraries are still not found. Copy them to the appropriate path with libraries existing on the system:
# cp /usr/lib/libfontconfig.so.1 /usr/lib/vmware/lib/libfontconfig.so.1/
Instead of copying all these files manually, you may want to try exporting an additional setting:
# export VMWARE_USE_SYSTEM_LIBS='yes'
On systems with fontconfig version 2.13.0 and above, it may be needed to force VMware to use the shipped libfontconfig file instead of the newer system file. In such case, it is also necessary to provide a shared object library file libexpat.so.0
for the shipped fontconfig. This applies for at least VMware version 12.5.9. As root do:
# 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 存储库手动下载工具:
访问 "application name / version / build 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。
虚拟机的系统时间错误或无法启动:"[...]timeTracker_user.c:234 bugNr=148722"
This is due to incomplete[失效链接 2024-10-12 ⓘ] support of power management features (Intel SpeedStep and AMD PowerNow!/Cool'n'Quiet) in VMware Linux that vary the CPU frequency. In March 2012, with the release of linux 3.3-1 the maximum frequency Performance governor was replaced with the dynamic Ondemand. When the host CPU frequency changes, the Guest system clock runs too quickly or too slowly, but may also render the whole Guest unbootable.
To prevent this, the maximum host CPU frequency can be specified, and Time Stamp Counter (TSC) disabled, in the global configuration:
/etc/vmware/config
host.cpukHz = "X" # The maximum speed in KHz, e.g. 3GHz is "3000000". host.noTSC = "TRUE" # Keep the Guest system clock accurate even when ptsc.noTSC = "TRUE" # the time stamp counter (TSC) is slow.
系统重启后客户机丢失网络连接
该问题很可能由 vmnet
未被加载导致 [4]。关于自动加载的内容请参考 #systemd 服务部分。
鼠标问题
超出 5 个后的鼠标按键无法使用
如果你鼠标的拇指或其它额外按钮无法正常工作,可以设置客户机使用高级鼠标。
客户机上的鼠标滚轮表现怪异
This is related to the current Xorg keyboard layout on Host system. Keep primary layout (e.g., English) selected on Host while working on Guest.
嵌套虚拟机没有 IP 地址及网络连接
该问题与混杂模式有关。根据标准 Linux 实践,该模式仅能由根用户启用。为了绕过该限制,需要修改对应网络设备的权限。
对单个用户组给予权限:
# chgrp group /dev/vmnetX # chmod g+rw /dev/vmnetX
对所有用户给予权限:
# chmod a+rw /dev/vmnetX
卸载
你必须先知道你安装的产品的名称(无论是 vmware-workstation
还是 vmware-player
)。要列出已安装的产品:
$ vmware-installer -l
然后进行卸载 (使用 --required
跳过了确认步骤):
# vmware-installer -u product --required
--console
使用图形界面记得禁用并移除服务:
# rm /etc/systemd/system/vmware.service # rm /etc/systemd/system/vmware-usbarbitrator.service
再看看 /usr/lib/modules/kernel_name/misc/
模块目录下有没有未移除的内核模块,然后如果 /etc/init.d/
目录是空的也可以一并移除。