VMware/以虚拟机方式安装 Arch Linux
本文介绍了如何在 VMware 产品中安装 Arch Linux,例如 Workstation Player、Fusion 或 Workstation Pro。
内核驱动
lsmod | grep 模块名
检查),并且是必需的,则可以将该模块添加到 mkinitcpio 的 MODULES
数组中。例如/etc/mkinitcpio.conf
... MODULES=(... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ...)
请务必重新生成 initramfs。
vmw_balloon
- 物理内存管理驱动程序。它就像一个“气球”,可以膨胀以回收物理页面,方法是在虚拟机中保留它们并在监视器中使它们失效,从而释放底层机器页面,以便可以将它们分配给其他虚拟机。它也可以放气,以允许虚拟机使用更多物理内存。已释放的虚拟机内存可以在主机中重复使用,而无需终止虚拟机。vmw_pvscsi
- 用于 VMware 的半虚拟化 SCSI (PVSCSI) HBA。vmw_vmci
- 虚拟机通信接口。它通过 VMCI 虚拟设备,在虚拟环境中实现主机和虚拟机之间的高速通信。vmwgfx
- 用于 3D 加速。这是 VMware SVGA2 虚拟硬件的 KMS 启用 DRM 驱动程序。vmxnet3
- 用于 VMware 的 vmxnet3 虚拟以太网 NIC。- 基于 fuse 的 hgfs 实现已添加到
open-vm-tools
10.0+ 中,并且从内核版本 4.0+ 开始受支持。
以下驱动程序仅在您在 VMware vSphere Hypervisor[死链接 2024-07-30 ⓘ] 等虚拟机监控程序上运行 Arch Linux 时才需要。客户端-服务器应用程序可以写入 VMCI 套接字 (vsock) 接口,以便在虚拟机之间进行通信时使用 VMCI 虚拟设备。
vsock
- 虚拟套接字协议。它类似于 TCP/IP 套接字协议,允许虚拟机和虚拟机监控程序或主机之间进行通信。vmw_vsock_vmci_transport
- 为虚拟套接字实现 VMCI 传输。
某些模块(例如旧式的 vmhgfs
共享文件夹模块)将需要额外的工作才能手动 编译
和 systemd 启用
才能正常运行。
VMware Tools 与 Open-VM-Tools
2007 年,VMware 在 LGPL 下发布了 VMware Tools 的大部分内容,作为 Open-VM-Tools。官方工具不单独[死链接 2024-07-30 ⓘ] 提供给 Arch Linux。
最初,VMware Tools 为网络和存储提供了最佳驱动程序,并结合了时间同步等其他功能。但是,现在网络/SCSI 适配器的驱动程序已成为 Linux 内核的一部分。
官方 VMware Tools 还具有能够使用 Unity 模式功能的优势,但从 VMWare Workstation 12 开始,由于缺乏使用以及开发人员在维护该功能方面的困难,Linux 虚拟机的 Unity 模式已被删除。请参阅此主题。
Open-VM-Tools
实用程序
open-vm-tools 软件包附带以下实用程序
vmtoolsd
- 负责虚拟机状态报告的服务。vmware-checkvm
- 用于检查程序是否在虚拟机中运行的工具。vmware-toolbox-cmd
- 用于获取主机虚拟机信息的工具。vmware-user
- 用于启用主机和虚拟机之间剪贴板共享(复制/粘贴)的工具。vmware-vmblock-fuse
- 文件系统实用程序。通过 FUSE(用户空间文件系统)启用主机和虚拟机之间的拖放功能。vmware-xferlogs
- 将日志/调试信息转储到虚拟机日志文件。vmhgfs-fuse
- 用于挂载 vmhgfs 共享文件夹的实用程序。
安装
安装 open-vm-tools。启动 和/或 启用 vmtoolsd.service
和 vmware-vmblock-fuse.service
。
如果主机和虚拟机之间的复制和粘贴无法正常工作,请尝试手动安装 gtkmm3。
官方 VMware Tools
模块
vmblock
- 文件系统驱动程序。启用主机和虚拟机之间的拖放功能(已被vmware-vmblock-fuse
实用程序取代)。vmci
- 主机和虚拟机之间的高性能通信接口。vmmon
- 虚拟机监视器。vmnet
- 网络驱动程序。vsock
- VMCI 套接字。
vmware-vmblock-fuse
的模块,并且除非禁用 fuse
,否则 vmblock
已从内核中删除。相反,需要 启用
systemd 服务才能允许这些功能。请参阅以下说明。安装(从虚拟机内部)
安装依赖项:base-devel(用于构建)、net-tools(用于 ifconfig
,安装程序使用)和 linux-headers(用于内核头文件)。为了检出 open-vm-tools
,您将需要 devtools 软件包中的 pkgctl
。
然后,为安装程序创建伪造的 init 目录
# for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done
然后可以挂载安装程序
# mount /dev/cdrom /mnt
提取(例如到 /root
)
# tar xf /mnt/VMwareTools*.tar.gz -C /root
并启动
# perl /root/vmware-tools-distrib/vmware-install.pl
可以安全地忽略以下构建失败
- VMNEXT 3 虚拟网卡
- “警告:此脚本找不到 mkinitrd 或 update-initramfs,无法重新制作 initrd 文件!”
- 在系统上找不到 Fuse 组件。
启用 vmware-vmblock-fuse systemd 服务(确保手动安装了依赖项,或者使用了 -s
标志)。应使用 Arch 构建系统 检出 open-vm-tools 源代码。
$ pkgctl repo clone open-vm-tools $ cd open-vm-tools $ makepkg -s --asdeps # cp vm* /usr/lib/systemd/system
启用 vmware-vmblock-fuse.service
和 vmtoolsd.service
。
重启 虚拟机。
登录并启动 VMware Tools
# /etc/init.d/rc6.d/K99vmware-tools start
此外,为了在启动时自动启动 vmware-tools
,请创建一个新文件 /etc/systemd/system/vmwaretools.service
/etc/systemd/system/vmwaretools.service
[Unit] Description=VMWare Tools daemon [Service] ExecStart=/etc/init.d/vmware-tools start ExecStop=/etc/init.d/vmware-tools stop PIDFile=/var/lock/subsys/vmware TimeoutSec=0 RemainAfterExit=yes [Install] WantedBy=multi-user.target
并启用 新的 vmwaretools.service
。
Xorg 配置
安装依赖项:xf86-input-vmmouse、xf86-video-vmware 和 mesa。
这些软件包应该是启动到 图形界面 target
所需的全部内容:。/etc/xdg/autostart/vmware-user.desktop
将启动,它将设置与虚拟机一起工作所需的大部分内容。
但是,如果启动到 multi-user.target
或使用不常见的设置(例如,多显示器),则需要启用 vmtoolsd.service
。除此之外,以 root 身份运行 Xorg 以授予加载驱动程序的权限。
技巧与诀窍
通过选择编辑虚拟机设置 > 选项 > 共享文件夹 > 始终启用,然后创建一个新的共享文件夹来共享文件夹。
共享文件夹应该可以通过以下命令看到
$ vmware-hgfsclient
现在可以挂载文件夹
# mkdir <shared folders root directory> # vmhgfs-fuse -o allow_other -o auto_unmount .host:/<shared_folder> <shared folders root directory>
如果显示错误消息 fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf
,请取消注释 /etc/fuse.conf
中的以下行
user_allow_other
可以使用 -h
输入标志查看其他 vmhgfs-fuse
挂载选项
# vmhgfs-fuse -h
cp
、mv
或 cat
)导致“输入/输出错误”,则设置挂载选项 max_write
可以作为一种解决方法(在 open-vm-tools 版本 11.1.0 及更高版本中观察到;请参阅此错误报告:https://github.com/vmware/open-vm-tools/issues/437)。fstab
为每个共享添加一个规则
/etc/fstab
.host:/<shared_folder> <shared folders root directory> fuse.vmhgfs-fuse nofail,allow_other 0 0
创建并挂载共享文件夹(如果尚未完成)
# mkdir <shared folders root directory> # mount <shared folders root directory>
Systemd
创建以下 .service
/etc/systemd/system/<shared folders root directory>-<shared_folder>.service
[Unit] Description=Load VMware shared folders Requires=vmware-vmblock-fuse.service After=vmware-vmblock-fuse.service ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/<shared_folder> <shared folders root directory> [Install] WantedBy=multi-user.target
确保系统上存在 <共享文件夹根目录>
文件夹。如果此文件夹不存在,则必须创建它,因为 systemd 服务依赖于它
# mkdir -p <shared folders root directory>
启用 <共享文件夹根目录>-<shared_folder>.service
挂载目标。
如果应自动挂载所有共享文件夹,则省略 <shared_folder>。
通过选择编辑虚拟机设置 > 选项 > 共享文件夹 > 始终启用,然后创建一个新的共享文件夹来共享文件夹。
确保已加载 vmhgfs
驱动程序
# modprobe vmhgfs
共享文件夹应该可以通过以下命令查看
$ vmware-hgfsclient
现在可以挂载文件夹
# mkdir /home/user1/shares # mount -n -t vmhgfs .host:/<shared_folder> /home/user1/shares
启动时启用
按如下方式编辑 mkinitcpio.conf
/etc/mkinitcpio.conf
... MODULES=(... vmhgfs) ...
fstab
为每个共享添加一个规则
/etc/fstab
.host:/<shared_folder> /home/user1/shares vmhgfs defaults 0 0
创建并挂载共享文件夹
# mkdir /home/user1/shares # mount /home/user1/shares
Systemd
为了使共享文件夹工作,必须加载 vmhgfs
驱动程序。创建以下 .service
/etc/systemd/system/<shared folders root directory>-<shared_folder>.mount
[Unit] Description=Load VMware shared folders ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Mount] What=.host:/<shared_folder> Where=<shared folders root directory>/<shared_folder> Type=vmhgfs Options=defaults,noatime [Install] WantedBy=multi-user.target
/etc/systemd/system/<shared folders root directory>-<shared_folder>.automount
[Unit] Description=Load VMware shared folders ConditionPathExists=.host:/<shared_folder> ConditionVirtualization=vmware [Automount] Where=<shared folders root directory>/<shared_folder> [Install] WantedBy=multi-user.target
确保系统上存在 <共享文件夹根目录>
文件夹。如果此文件夹不存在,则必须创建它,因为 systemd 脚本依赖于它
# mkdir -p <shared folders root directory>
启用 mnt-hgfs.automount
挂载目标。
如果应自动挂载所有共享文件夹,则省略 <shared_folder>。
修剪 locate DB
使用 locate 时,在 locate DB
中索引共享目录是毫无意义的。因此,将目录添加到 /etc/updatedb.conf
中的 PRUNEPATHS
。
3D 加速
如果在虚拟机创建时未选择,则可以在以下位置启用 3D 加速:编辑虚拟机设置 > 硬件 > 显示 > 加速 3D 图形。
OpenGL 和 GLSL 支持
可以使用新的内核模块更新 OpenGL 和 GLSL,从而覆盖 Arch 控制的版本。
目前,可以支持 OpenGL 3.3 和 GLSL 3.30。有关更多详细信息,请参见 https://bbs.archlinux.org/viewtopic.php?id=202713。
时间同步
在虚拟机中配置时间同步非常重要;虚拟机中更容易发生波动。这主要是由于 CPU 由多个虚拟机共享。
有两种设置时间同步的选项:主机或外部源。
主机作为时间源
要使用主机作为时间源,请确保 启动 了 vmtoolsd.service
。然后启用时间同步
# vmware-toolbox-cmd timesync enable
在挂起主机后同步虚拟机
# hwclock --hctosys --localtime
外部服务器作为时间源
请参阅 NTP。
故障排除
虚拟机网络速度慢
Arch Linux 以及其他 Linux 虚拟机在使用 NAT 时,网络速度可能会很慢。要解决此问题,请在主机上的虚拟机设置中将网络类型切换到 桥接模式,并在必要时更改虚拟机上网络的配置文件。有关配置的更多信息,请参阅 网络配置。如果在 Windows 主机上,并且尽管虚拟机配置正确,但仍未正确连接,请以 管理员 身份打开主机上的 虚拟网络编辑器,然后按左下角的 恢复默认设置 按钮。
声音问题
如果发生无法接受的响亮或烦人的声音,则可能与 PC 扬声器有关。可以通过在虚拟机映像中禁用 PC 扬声器来解决此问题。
音频和视频卡顿问题
在虚拟机中,可能会出现音频和视频卡顿、爆裂声或延迟,从而影响 Firefox 和系统通知等应用程序中的播放。此问题通常与 PipeWire 音频后端和模拟驱动程序有关。调整 ALSA 环形缓冲区设置或 PipeWire 配置可以帮助解决这些故障。
有关故障排除和修复这些问题的详细步骤,请参阅音频和视频卡顿/爆裂声
鼠标问题
鼠标可能会出现以下问题
- 当光标进入窗口时,自动抓取/取消抓取功能不会自动抓取输入
- 缺少按钮
- 输入延迟
- 某些应用程序中未注册点击
- 鼠标光标在进入/离开虚拟机时跳动
- 鼠标位置跳到离开虚拟机的位置
这些问题可以通过卸载 xf86-input-vmmouse 软件包来修复。xf86-input-vmmouse 和 xf86-input-libinput 应该足以处理鼠标和键盘输入。
将设置添加到 .vmx
配置文件可能会有所帮助(鼠标位置跳到离开虚拟机的位置)
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mouse.vusb.enable = "TRUE" mouse.vusb.useBasicMouse = "FALSE"
VMware 还尝试自动优化鼠标以进行游戏。如果遇到问题,建议禁用优化:编辑 > 首选项 > 输入 > 优化鼠标以进行游戏:从不
或者,可能需要尝试在 60-libinput.conf
中禁用 catchall
事件
/usr/share/X11/xorg.conf.d/60-libinput.conf
#Section "InputClass" # Identifier "libinput pointer catchall" # MatchIsPointer "on" # MatchDevicePath "/dev/input/event*" # Driver "libinput" #EndSection
启动问题
启动时间过长
如果启用了 VMWare 的内存热添加功能,则可能会显示以下错误
- add_memory 失败
- acpi_memory_enable_device() 错误
通过将 mem.hotadd = "FALSE"
设置为 .vmx
来禁用内存热添加功能。
~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mem.hotadd = "FALSE"
关机/重启卡住
调整 vmtoolsd 服务的超时时间(默认为 90 秒)。
/etc/systemd/system/vmtoolsd.service.d/timeout.conf
[Service] TimeoutStopSec=1
窗口分辨率自动调整问题
“自动调整”是指当在主机中调整 VMWare 窗口的大小时,虚拟机中的 Arch Linux 应自动跟随并重新调整其分辨率以适应主机窗口的新大小。
可能的解决方案 1
确保已启用自动调整。对于 VMware Workstation,可以在以下位置找到该设置:查看 -> 自动调整大小 -> 自动调整虚拟机
可能的解决方案 2
由于某种原因,自动调整需要安装 gtkmm 和 gtk2 软件包。因此,请确保在虚拟机上安装了这两个软件包。如果未安装 X windows 或正在使用非基于 GTK 的桌面环境(例如 KDE),则可能必须单独安装这些软件包。
可能的解决方案 3
可能必须将相关模块添加到 mkinitcpio.conf。
/etc/mkinitcpio.conf
MODULES=(vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx)
不要忘记重新生成 initramfs。
可能的解决方案 4
启用 vmtoolsd.service
。
如果这不起作用,请确保重启 vmtoolsd.service
。
可能的解决方案 5
如果 GNOME 在 Wayland 上运行,请安装 xf86-video-vmware (FS#57473)。
请参阅 [1]。
可能的解决方案 6
确保禁用拉伸模式。按照 虚拟机 > 设置 > 显示 > 显示缩放 并取消选中选项 拉伸模式。
可能的解决方案 7
手动设置分辨率,方法是使用内核命令行中的 video=
选项。
拖放,复制/粘贴
拖放(复制/粘贴)功能需要安装 open-vm-tools 和 gtkmm3 软件包。
通过以下任一方式使命令 vmware-user
在 X11 之后运行
- 确保
/etc/xdg/autostart/vmware-user.desktop
存在,如果不存在,则运行
# cp /etc/vmware-tools/vmware-user.desktop /etc/xdg/autostart/vmware-user.desktop
或
- 将
vmware-user
添加到 Xinitrc。
复制/粘贴目前在 Wayland 上不起作用,但通过 Xwayland 运行的应用程序可以正常工作。
随着 VMWorkstation 升级到 17.6.2 版本,复制/粘贴再次静默停止工作。添加以下行
keyboard.allowBothIRQs = "FALSE" keyboard.vusb.enable = "TRUE"
到 VMX 文件中解决了问题。
Workstation 11 有一个错误,如果 Arch 虚拟机作为共享虚拟机运行,并且虚拟机中正在运行 vmtoolsd,则 vmware-hostd 会崩溃。解决此错误的 open-vm-tools 补丁在此。
虚拟网络编辑器 Wayland
以 root 身份运行 GUI 应用程序 -- 以下部分内容复制自
- 当在 wayland 主机上运行 VMWare workstation 时,虚拟网络编辑器将无法在 Wayland 下启动,这是因为
尝试在 Wayland 会话中通过 su、sudo 或 pkexec 以 root 身份运行图形应用程序(例如 GParted 或 Gedit)将失败,并出现类似于此的错误
$ sudo vmware-netcfg No protocol specified Unable to init server: Could not connect: Connection refused (gedit:2349): Gtk-WARNING **: cannot open display: :0
这是 Wayland 的一项安全功能,他们认为不应以 root 身份运行 GUI 应用程序。可以使用终端中的以下命令来实现此目的
使用 xhost
一种更通用的——尽管安全性较低——解决方法是使用 xhost 临时允许 root 用户访问本地用户的 X 会话[2]。为此,请以当前(非特权)用户身份执行以下命令
$ xhost si:localuser:root
在应用程序关闭后删除此访问权限
$ xhost -si:localuser:root
使用 sudo -E
使用以下命令启动 vmware-netcfg
$ sudo -E vmware-netcfg