VMware/Install Arch Linux as a guest - ArchWiki

Jump to content

# VMware/Install Arch Linux as a guest

From ArchWiki
< VMware

Related articles

- VMware
- VMWare vCLI

This article is about installing Arch Linux in a VMware product, such as Workstation Player, Fusion or Workstation Pro.

## In-kernel drivers

Note Arch's Udev auto-detects and enables some of these modules. If any of them is not auto-detected (check by running `lsmod | grep modulename` ) and if it is required, the module can be added to mkinitcpio's `MODULES` array. For example:

    /etc/mkinitcpio.conf

    ...
    MODULES=(... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ...)

Make sure to regenerate the initramfs.

- `vmw_balloon` - The physical memory management driver. It acts like a "balloon" that can be inflated to reclaim physical pages by reserving them in the guest and invalidating them in the monitor, freeing up the underlying machine pages so they can be allocated to other guests. It can also be deflated to allow the guest to use more physical memory. Deallocated Virtual Machine memory can be reused in the host without terminating the guest.
- `vmw_pvscsi` - For VMware's Paravirtual SCSI (PVSCSI) HBA.
- `vmw_vmci` - The Virtual Machine Communication Interface. It enables high-speed communication between host and guest in a virtual environment via the VMCI virtual device.
- `vmwgfx` - For 3D acceleration. This is a KMS enabled DRM driver for the VMware SVGA2 virtual hardware.
- `vmxnet3` - For VMware's vmxnet3 virtual ethernet NIC.
- a fuse-based hgfs implementation has been added to `open-vm-tools` 10.0+ and is supported from kernel version 4.0+.

The following drivers are only needed if you are running Arch Linux on a hypervisor like VMware vSphere Hypervisor[dead link 2024-07-30—HTTP 404]. Client-server applications can write to the VMCI Sock (vsock) interface to make use of the VMCI virtual device, when communicating between virtual machines.

- `vsock` - The Virtual Socket Protocol. It is similar to the TCP/IP socket protocol, allowing communication between Virtual Machines and hypervisor or host.
- `vmw_vsock_vmci_transport` - Implements a VMCI transport for Virtual Sockets.

Some modules, such as the legacy `vmhgfs` shared folder module, will require additional work to manually `compile` and systemd `enable` in order to function properly.

## VMware Tools versus Open-VM-Tools

In 2007, VMware released large portions of the VMware Tools under the LGPL as Open-VM-Tools. The official Tools are not available separately for Arch Linux.

Originally, VMware Tools provided the best drivers for network and storage, combined with the functionality for other features such as time synchronization. However, now the drivers for the network/SCSI adapter are part of the Linux kernel.

The official VMware Tools also had the advantage of being able to use the Unity mode feature, but as of VMWare Workstation 12, Unity mode for Linux guests has been removed due to lack of use and developer difficulties in maintaining the feature. See this thread.

## Open-VM-Tools

### Utilities

The open-vm-tools package comes with the following utilities:

- `vmtoolsd` - Service responsible for the Virtual Machine status report.
- `vmware-checkvm` - Tool to check whether a program is running in the guest.
- `vmware-toolbox-cmd` - Tool to obtain Virtual Machine information of the host.
- `vmware-user` - Tool to enable clipboard sharing (copy/paste) between host and guest.
- `vmware-vmblock-fuse` - Filesystem utility. Enables drag & drop functionality between host and guest through FUSE (Filesystem in Userspace).
- `vmware-xferlogs` - Dumps logging/debugging information to the Virtual Machine logfile.
- `vmhgfs-fuse` - Utility for mounting vmhgfs shared folders.

### Installation

Install open-vm-tools. Start and/or enable `vmtoolsd.service` and `vmware-vmblock-fuse.service`.

Try to install gtkmm3 manually if copy and paste between host and guest does not work properly.

## Official VMware Tools

### Modules

- `vmblock` - Filesystem driver. Enables drag & drop functionality between host and guest (superseded by the `vmware-vmblock-fuse` utility).
- `vmci` - High performance communication interface between host and guest.
- `vmmon` - Virtual Machine Monitor.
- `vmnet` - Networking driver.
- `vsock` - VMCI sockets.

Note There is no module for `vmware-vmblock-fuse`, and `vmblock` has been removed from the kernel unless you disable `fuse`. Instead, systemd services need to be `enabled` to allow these functions. See instructions below.

### Installation (from guest)

Install the dependencies: base-devel (for building), net-tools (for `ifconfig`, used by the installer) and linux-headers (for kernel headers). In order to check out `open-vm-tools` you will need `pkgctl` from the devtools package.

Then, create bogus init directories for the installer:

    # for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done

The installer can then be mounted:

    # mount /dev/cdrom /mnt

Extracted (e.g. to `/root`):

    # tar xf /mnt/VMwareTools*.tar.gz -C /root

And started:

    # perl /root/vmware-tools-distrib/vmware-install.pl

The following build failures can safely be ignored:

- VMNEXT 3 virtual network card
- "Warning: This script could not find mkinitrd or update-initramfs and cannot remake the initrd file!"
- Fuse components not found on the system.

Enable `vmware-vmblock-fuse` systemd services (make sure the dependencies are manually installed, or that the `-s` flag) used. The `open-vm-tools` source code should be checked out using the Arch build system.

    $ pkgctl repo clone open-vm-tools
    $ cd open-vm-tools
    $ makepkg -s --asdeps
    # cp vm* /usr/lib/systemd/system

Enable `vmware-vmblock-fuse.service` and `vmtoolsd.service`.

Reboot the Virtual Machine.

Log in and start the VMware Tools:

    # /etc/init.d/rc6.d/K99vmware-tools start

Additionally, to auto start `vmware-tools` on boot, create a new file `/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

And enable the new `vmwaretools.service`.

Tip There is also a project in GitHub trying to automate these steps.

## Xorg configuration

Note To use Xorg in a Virtual Machine, a minimum of 32MB VGA memory is needed.

Install the dependencies: xf86-input-libinput and mesa.

- xf86-input-libinput — The modern standard for input handling, which replaces the legacy xf86-input-vmmouse driver. Use of xf86-input-vmmouse is discouraged, as it can conflict with libinput, potentially causing issues with mouse cursor positioning and button clicks.
- mesa — Required for hardware-accelerated graphics.

These packages should be all that are required to get started with booting into a `graphical target`: . `/etc/xdg/autostart/vmware-user.desktop` will get started which will set up most of what is needed to work with the Virtual Machine.

However, if booting into `multi-user.target` or using an uncommon setup (e.g. multiple monitors), then `vmtoolsd.service` needs to be enabled. In addition to this, run Xorg as root to give permission for loading drivers.

## Tips and tricks

### Shared Folders with vmhgfs-fuse

Note The FUSE client (Userspace) is used in modern Linux environments, specifically for VMware Tools `open-vm-tools` versions 10.3.0 and newer on Linux kernel 3.10 and later, and for versions 10.0.0 through 10.2.x on Linux kernel 4.0.0 and newer all with ESXi, VMware Workstation, and VMware Fusion: https://knowledge.broadcom.com/external/article/313233/how-to-configure-vmware-tools-shared-fol.html

Share a folder by selecting Edit virtual machine settings > Options > Shared Folders > Always enabled and creating a new share.

The shared folders should be visible with:

    $ vmware-hgfsclient

Now the folder can be mounted:

    # mkdir -p <shared folders root directory>
    # vmhgfs-fuse .host:/<shared_folder> <shared folders root directory> -o allow_other -o auto_unmount

If the error `fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf` is displayed, uncomment the following line in `/etc/fuse.conf`:

    # sed -i 's/^#user_allow_other$/user_allow_other/' /etc/fuse.conf

Note In case I/O operations (such as `cp`, `mv` or `cat`) result in an "Input/output error" when accessing the shared folder then setting the mount option `max_write` can serve as a workaround (observed with `open-vm-tools` version 11.1.0 and higher; see this bug report: https://github.com/vmware/open-vm-tools/issues/437)).

#### Automounting with systemd

Warning Do not use `/etc/fstab` with `x-systemd.automount` for `vmhgfs-fuse`. Because `vmhgfs-fuse` does not signal mount completion through the standard kernel mount protocol, systemd re-arms the automount unit on every access and spawns additional FUSE instances, producing stacked mounts visible via `findmnt`.

The recommended approach is a `Type=simple` service unit that calls `vmhgfs-fuse` directly in foreground mode, requiring no mount helper. systemd tracks the process directly and restarts it automatically on failure or disconnection.

##### All shared folders

Enable `user_allow_other` in the FUSE configuration to allow non-root users to access mounted shares:

    # sed -i 's/^#user_allow_other$/user_allow_other/' /etc/fuse.conf

Create `/etc/systemd/system/vmhgfs-fuse.service`:

    /etc/systemd/system/vmhgfs-fuse.service

    [Unit]
    Description=VMware HGFS Shared Folders
    ConditionVirtualization=vmware
    Requires=vmware-vmblock-fuse.service
    After=vmware-vmblock-fuse.service

    [Service]
    Type=simple
    ExecStartPre=/bin/mkdir -p /mnt/hgfs
    ExecStart=/usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -f -o allow_other -o auto_unmount
    ExecStop=/usr/bin/fusermount3 -u /mnt/hgfs
    Restart=always
    RestartSec=5s

    [Install]
    WantedBy=multi-user.target

    # systemctl daemon-reload
    # systemctl enable --now vmhgfs-fuse.service
    $ findmnt /mnt/hgfs

##### Individual shared folders

To mount a specific named share into a custom directory, create a separate service unit per share. The unit name must encode the mount path with slashes replaced by dashes.

Example — mount the share `<shared_folder>` to `<shared folders root directory>`:

    /etc/systemd/system/<shared folders root directory>-<shared_folder>.service

    [Unit]
    Description=VMware HGFS Shared Folder: /<shared_folder>
    ConditionVirtualization=vmware
    ConditionPathExists=.host:/<shared_folder>
    Requires=vmware-vmblock-fuse.service
    After=vmware-vmblock-fuse.service

    [Service]
    Type=simple
    ExecStartPre=/bin/mkdir -p <shared folders root directory>
    ExecStart=/usr/bin/vmhgfs-fuse .host:/<shared_folder> <shared folders root directory> -f -o allow_other -o auto_unmount
    ExecStop=/usr/bin/fusermount3 -u <shared folders root directory>
    Restart=always
    RestartSec=5s

    [Install]
    WantedBy=multi-user.target

    # systemctl daemon-reload
    # systemctl enable --now <shared folders root directory>-<shared_folder>.service

#### Advanced Mount Options

The following options may be passed via `-o` flags in `ExecStart`. Values and defaults are sourced from `vmhgfs-fuse --help` (version 1.6.12.0, libfuse 3.18.2).

Option | Default | Description
--- | --- | ---
`allow_other` | off | Allows users other than root to access the filesystem. Requires `user_allow_other` in `/etc/fuse.conf`.
`allow_root` | off | Allows access by root in addition to the mounting user. Mutually exclusive with `allow_other`.
`auto_unmount` | off | Automatically unmounts when the `vmhgfs-fuse` process terminates or crashes. Recommended for service-managed mounts.
`kernel_cache` | off | Caches file data in the kernel. May cause stale reads when the shared folder is modified concurrently from host and guest.
`auto_cache` | off | Enables caching based on file modification times. Disable explicitly with `noauto_cache`.
`io_uring` | off | Enables high-performance `io_uring` communication between kernel and userspace. Requires Linux 6.14 or later.
`io_uring_q_depth=N` | — | Sets the io_uring submission queue depth. Has no effect if `io_uring` is not enabled.
`max_write=N` | — | Sets the maximum write size in bytes. Set to `524288` as a workaround for I/O errors on `open-vm-tools` 11.1.0 and later.
`umask=M` | — | Sets permissions for all entries using an octal mask (e.g., `umask=022`).
`fmask=M` | — | Sets permissions for files only. Takes precedence over `umask` for files.
`dmask=M` | — | Sets permissions for directories only. Takes precedence over `umask` for directories.
`uid=N` | 0 | Overrides the displayed owner UID for all entries in the mount. Only needed if files must appear owned by a specific user. Obtain the correct value with `id -u username`.
`gid=N` | 0 | Overrides the displayed group GID for all entries in the mount. Obtain the correct value with `id -g username`.
`entry_timeout=T` | 1.0s | Cache timeout in seconds for directory entry names.
`negative_timeout=T` | 0.0s | Cache timeout in seconds for names of deleted entries.
`attr_timeout=T` | 1.0s | Cache timeout in seconds for file and directory attributes.
`ac_attr_timeout=T` | (attr_timeout) | Override of `attr_timeout` used by the auto-cache mechanism.
`max_threads=N` | 10 | Maximum number of worker threads allowed.
`max_idle_threads=N` | -1 | Maximum number of idle worker threads kept alive. `-1` means unlimited.
`clone_fd` | off | Allocates a separate FUSE device fd per thread. May improve performance under high concurrency.

Note `vmhgfs-fuse` maintains an internal attribute cache with a hard-coded 5-second timeout (`CACHE_TIMEOUT` in `cache.c`), independent of the FUSE-level `attr_timeout`. Setting `attr_timeout=0` does not disable this internal cache. This can cause stale metadata when the shared folder is modified concurrently from host and guest.

#### Troubleshooting

##### FUSE environment check

Before investigating mount failures, verify the FUSE environment:

    $ vmhgfs-fuse --enabled

Exit codes:

- `0 - HGFS FUSE client enabled` — environment is healthy.
- `2 - HGFS FUSE client needs FUSE environment` — `fusermount3` is missing or `fuse` is not registered in `/proc/filesystems`. Verify that fuse3 is installed:

    $ ls /usr/bin/fusermount3

#### Legacy Shared Folders with vmhgfs module

Note Kernel mode vmhgfs used by default on older systems or when the FUSE client is not applicable with ESXi, VMware Workstation, and VMware Fusion. VMware Tools versions prior to 10.0.0 are not compatible with Linux kernel 4.0.0 and newer: https://knowledge.broadcom.com/external/article/313233/how-to-configure-vmware-tools-shared-fol.html

Share a folder by selecting Edit virtual machine settings > Options > Shared Folders > Always enabled, and creating a new share.

Ensure the `vmhgfs` driver is loaded:

    # modprobe vmhgfs

The shared folders should be viewable with:

    $ vmware-hgfsclient

Now the folder can be mounted:

    # mkdir /home/user1/shares
    # mount -n -t vmhgfs .host:/<shared_folder> /home/user1/shares

##### Enable at boot

Edit `mkinitcpio.conf` thusly:

    /etc/mkinitcpio.conf

    ...
    MODULES=(... vmhgfs)
    ...

and then regenerate the initramfs.

##### fstab

Add a rule for each share:

    /etc/fstab

    .host:/<shared_folder> /home/user1/shares vmhgfs defaults 0 0

Create and mount the Shared Folders:

    # mkdir /home/user1/shares
    # mount /home/user1/shares

### Prune locate DB

When using locate, it is pointless to index the shared directories in the `locate DB`. Therefore, add the directories to `PRUNEPATHS` in `/etc/updatedb.conf`.

### 3D Acceleration

If not selected at guest creation time, 3D Acceleration can be enabled in: Edit virtual machine settings > Hardware > Display > Accelerate 3D graphics.

Note Xorg can be very slow with 3D Acceleration enabled. In some cases, llvmpipe software rendering is much faster.

#### OpenGL and GLSL support

It is possible to update OpenGL and GLSL with new kernel modules, overriding Arch-controlled versions.

Currently, OpenGL 3.3 and GLSL 3.30 can be supported. See https://bbs.archlinux.org/viewtopic.php?id=202713 for more details.

### Time synchronization

Configuring time synchronization in a Virtual Machine is important; fluctuations are bound to occur more easily in a guest VM. This is mostly due to the CPU being shared by more than one guest.

There are 2 options to set up time synchronization: the host or an external source.

#### Host machine as time source

To use the host as a time source, ensure `vmtoolsd.service` is started. Then enable the time synchronization:

    # vmware-toolbox-cmd timesync enable

To synchronize the guest after suspending the host:

    # hwclock --hctosys --localtime

#### External server as time source

See NTP.

## Troubleshooting

### Network slow on guest

Arch Linux, as well as other Linux guests, may have slow network speeds while using NAT. To resolve this, switch the network type to Bridged mode in the guest settings on the host, changing the configuration file for the network on the guest where necessary. For more information on configuration, see Network configuration. If on a Windows host and it is not connecting properly despite correct guest configuration, open the Virtual Network Editor on the host as Administrator and press the Restore defaults button at the bottom left.

### Sound problems

If unacceptably loud or annoying sounds occur, then it may be related to the PC speaker. The issue may be resolved by disabling the PC speaker within the guest image.

### Audio and Video stuttering problems

In virtual machines, audio and video stuttering, crackling, or lag can occur, affecting playback in applications like Firefox and system notifications. This issue is often linked to the PipeWire audio backend and emulated drivers. Adjusting ALSA ringbuffer settings or PipeWire configurations can help resolve these glitches.

For detailed steps on troubleshooting and fixing these issues, see Audio and Video stuttering/crackling

### Mouse problems

The following problems may occur with the mouse:

- The automatic grab/ungrab feature does not automatically grab input when the cursor enters the window
- Missing buttons
- Input lag
- Clicks are not registered in some applications
- Mouse cursor jumps when entering/leaving virtual machine
- Mouse position jumps to where it left the guest virtual machine

These may be fixed by uninstalling the legacy xf86-input-vmmouse package. xf86-input-libinput should be sufficient for handling mouse and keyboard inputs.

Adding settings to the `.vmx` configuration file may help (Mouse position jumps to where it left the guest VM):

    ~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx

    mouse.vusb.enable = "TRUE"
    mouse.vusb.useBasicMouse = "FALSE"

VMware also attempts to automatically optimize the mouse for gaming. If problems are experienced, disabling the optimization is recommended: Edit > Preferences > Input > Optimize mouse for games: Never

Alternatively, attempting to disable the `catchall` event in `60-libinput.conf` may be required:

    /usr/share/X11/xorg.conf.d/60-libinput.conf

    #Section "InputClass"
    #        Identifier "libinput pointer catchall"
    #        MatchIsPointer "on"
    #        MatchDevicePath "/dev/input/event*"
    #        Driver "libinput"
    #EndSection

### Boot problems

#### Slow boot time

The following errors may be displayed if VMWare's memory hot-add feature is enabled:

- add_memory failed
- acpi_memory_enable_device() error

Disable the memory hot-add feature by setting `mem.hotadd = "FALSE"` to the `.vmx`.

    ~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx

    mem.hotadd = "FALSE"

#### Shutdown/Reboot hangs

Adjust the timeout for the vmtoolsd service (defaults to 90 seconds).

    /etc/systemd/system/vmtoolsd.service.d/timeout.conf

    [Service]
    TimeoutStopSec=1

### Window resolution autofit problems

"Autofit" means that when the VMWare window's size is adjusted in the host, Arch Linux in the guest should automatically follow and readjust its resolution to fit the new size of the host window.

#### Potential solution 1

Ensure autofit is enabled. For VMware Workstation the setting can be found in: View -> Autosize -> Autofit Guest

#### Potential solution 2

For some reason, autofit requires that the packages gtkmmAUR and gtk2AUR, are installed. Hence ensure that those two packages are installed on the guest. If X windows is not installed or a non–GTK-based desktop environment (such as KDE) is being used, these packages might have to be installed independently.

#### Potential solution 3

The relevant modules may have to be added to mkinitcpio.conf:

    /etc/mkinitcpio.conf

    MODULES=(vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx)

Do not forget to regenerate the initramfs.

#### Potential solution 4

Enable `vmtoolsd.service`.

If this does not work, ensure the `vmtoolsd.service` is restarted.

#### Potential solution 5

If GNOME is running on Wayland, install xf86-video-vmwareAUR (FS#57473).

See [1].

#### Potential solution 6

Make sure that Stretch Mode is disabled. Follow VM > Settings > Display > Display Scaling and untick the option Stretch mode.

#### Potential solution 7

Manually set the resolution using the `video=` option in the kernel command line.

### Drag and drop, copy/paste

Tip There is an unspecified relationship between these features and gtkmm3 that causes them to silently fail. This is documented in FS#43159.

The drag-and-drop (copy/paste) feature requires both open-vm-tools and gtkmm3 packages to be installed.

Make the command `vmware-user` run after X11 by either:

- Ensuring `/etc/xdg/autostart/vmware-user.desktop` exists, and if not, running:

    # cp /etc/vmware-tools/vmware-user.desktop /etc/xdg/autostart/vmware-user.desktop

or

- Add `vmware-user` to Xinitrc.

Copy/paste does not currently work on Wayland, though applications running through Xwayland work fine.

With upgrade of VMWorkstation to version 17.6.2 copy/paste again silently stopped working. Adding the lines

    keyboard.allowBothIRQs = "FALSE"
    keyboard.vusb.enable = "TRUE"

to the VMX file solved the problem.

### Problems when running as a shared virtual machine on Workstation 11

Workstation 11 has a bug where vmware-hostd crashes if an Arch guest is running as a shared virtual machine and vmtoolsd is running in the guest. A patch to open-vm-tools to work around the bug is here.

### Virtual Network Editor Wayland

When running VMWare workstation on a Wayland host, the Virtual Network Editor will not launch. See Privilege elevation for graphical applications#Wayland for the reason and the possible solutions.

Categories:

- Installation process
- Hypervisors

Hidden category:

- Pages with dead links

VMware/Install Arch Linux as a guest
Add topic