VMware/以虚拟机方式安装 Arch Linux

出自 ArchWiki

本文介绍了如何在 VMware 产品中安装 Arch Linux,例如 Workstation PlayerFusionWorkstation Pro

内核驱动

注意: Arch 的 Udev 会自动检测并启用其中一些模块。如果任何模块未被自动检测到(通过运行 lsmod | grep 模块名 检查),并且是必需的,则可以将该模块添加到 mkinitcpioMODULES 数组中。例如
/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.servicevmware-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.servicevmtoolsd.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

提示: GitHub 上还有一个 项目 尝试自动化这些步骤。

Xorg 配置

注意: 要在虚拟机中使用 Xorg,至少需要 32MB VGA 内存。

安装依赖项:xf86-input-vmmousexf86-video-vmwaremesa

这些软件包应该是启动到 图形界面 target 所需的全部内容:。/etc/xdg/autostart/vmware-user.desktop 将启动,它将设置与虚拟机一起工作所需的大部分内容。

但是,如果启动到 multi-user.target 或使用不常见的设置(例如,多显示器),则需要启用 vmtoolsd.service。除此之外,以 root 身份运行 Xorg 以授予加载驱动程序的权限。

技巧与诀窍

使用 vmhgfs-fuse 共享文件夹

注意: 此功能仅适用于 open-vm-tools v.10.x 及更高版本和内核 4.x 及更高版本,以及 VMware Workstation 和 Fusion。

通过选择编辑虚拟机设置 > 选项 > 共享文件夹 > 始终启用,然后创建一个新的共享文件夹来共享文件夹。

共享文件夹应该可以通过以下命令看到

$ 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
注意: 如果在访问共享文件夹时,I/O 操作(例如 cpmvcat)导致“输入/输出错误”,则设置挂载选项 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 模块的旧式共享文件夹

注意: 此功能仅在 VMware Workstation 和 Fusion 中可用

通过选择编辑虚拟机设置 > 选项 > 共享文件夹 > 始终启用,然后创建一个新的共享文件夹来共享文件夹。

确保已加载 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)
...

然后重新生成 initramfs

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 图形

注意: 启用 3D 加速后,Xorg 可能会非常慢。在某些情况下,llvmpipe 软件渲染速度更快。

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-vmmousexf86-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

由于某种原因,自动调整需要安装 gtkmmgtk2 软件包。因此,请确保在虚拟机上安装了这两个软件包。如果未安装 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

如果 GNOMEWayland 上运行,请安装 xf86-video-vmware (FS#57473)。

请参阅 [1]

可能的解决方案 6

确保禁用拉伸模式。按照 虚拟机 > 设置 > 显示 > 显示缩放 并取消选中选项 拉伸模式

可能的解决方案 7

手动设置分辨率,方法是使用内核命令行中的 video= 选项。

拖放,复制/粘贴

提示: 这些功能与 gtkmm3 之间存在未指定的关系,导致它们静默失败。这已在 FS#43159 中记录在案。

拖放(复制/粘贴)功能需要安装 open-vm-toolsgtkmm3 软件包。

通过以下任一方式使命令 vmware-userX11 之后运行

  • 确保 /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 上作为共享虚拟机运行时的问题

Workstation 11 有一个错误,如果 Arch 虚拟机作为共享虚拟机运行,并且虚拟机中正在运行 vmtoolsd,则 vmware-hostd 会崩溃。解决此错误的 open-vm-tools 补丁在此

虚拟网络编辑器 Wayland

以 root 身份运行 GUI 应用程序 -- 以下部分内容复制自

  • 当在 wayland 主机上运行 VMWare workstation 时,虚拟网络编辑器将无法在 Wayland 下启动,这是因为

尝试在 Wayland 会话中通过 susudopkexec 以 root 身份运行图形应用程序(例如 GPartedGedit)将失败,并出现类似于此的错误

$ 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