Difference between revisions of "VMware/Installing Arch as a guest"

From ArchWiki
Jump to: navigation, search
m (removed link redirecting to this page)
(Autofit not working with KDE)
 
(133 intermediate revisions by 46 users not shown)
Line 1: Line 1:
 
[[Category:Getting and installing Arch]]
 
[[Category:Getting and installing Arch]]
[[Category:Virtualization]]
+
[[Category:Hypervisors]]
[[es:Installing Arch Linux in VMware]]
+
[[es:VMware/Installing Arch as a guest]]
[[ja:Installing Arch Linux in VMware]]
+
[[ja:VMware に Arch Linux をインストール]]
[[nl:Installing Arch Linux in VMware]]
+
[[nl:VMware/Installing Arch as a guest]]
[[zh-CN:Installing Arch Linux in VMware]]
+
[[zh-cn:VMware/Installing Arch as a guest]]
{{Article summary start}}
+
{{Related articles start}}
{{Article summary text|Installing Archlinux in VMware: open-vm-tools and configuring Xorg}}
+
{{Related|VMware}}
{{Article summary heading|Related}}
+
{{Related|Installing VMWare vCLI}}
{{Article summary wiki|VMware}}
+
{{Related articles end}}
{{Article summary wiki|Installing VMWare vCLI}}
+
This article is about installing Arch Linux in a [[VMware]] product, such as [http://www.vmware.com/products/player/ Player (Plus)], [http://www.vmware.com/products/fusion/ Fusion] or [http://www.vmware.com/products/workstation/ Workstation].
{{Article summary end}}
+
  
This article handles installing Archlinux in a VMware-based virtual environment such as VMware ESX, VMware Workstation/Fusion and VMware Player.
+
== In-kernel drivers ==
  
==VMware Tools versus Open-VM-Tools==
+
*{{ic|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.
 +
*{{ic|vmw_pvscsi}} - For VMware's Paravirtual SCSI (PVSCSI) HBA.
 +
*{{ic|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.
 +
*{{ic|vmwgfx}} - For 3D acceleration. This is a KMS enabled DRM driver for the VMware SVGA2 virtual hardware.
 +
*{{ic|vmxnet3}} - For VMware's vmxnet3 virtual ethernet NIC.
 +
* a fuse-based hgfs implementation has been added to {{ic|open-vm-tools}} 10.0+ and is supported from kernel version 4.0+.
 +
{{Expansion|1=The {{ic|vsock}} and {{ic|vmw_vsock_vmci_transport}} drivers need a better description: When are they needed?].}}
 +
These drivers are only needed if you are running Arch Linux on a hypervisor like [http://www.vmware.com/products/vsphere-hypervisor VMware vSphere Hypervisor]
 +
*{{ic|vsock}} - The Virtual Socket Protocol. It is similar to the TCP/IP socket protocol, allowing communication between Virtual Machines and hypervisor or host.
 +
*{{ic|vmw_vsock_vmci_transport}} - Implements a VMCI transport for Virtual Sockets.
  
VMware Tools for linux exists in 2 forms: the [http://packages.vmware.com/tools official VMware Tools] and Open-VM-Tools. VMware Tools is based on a stable snapshot of Open-VM-Tools. Open-VM-Tools contains more experimental code and features.
+
{{Note|Arch's [[Udev]] auto-detects and enables a few of these modules.  Additional modules, such as {{ic|vmw_balloon}}, may need to be added to your [[Mkinitcpio]]'s {{ic|MODULES}} list.  For example:
The official VMware Tools are not available for Archlinux.
+
{{hc| # cat /etc/mkinitcpio.conf|output=
 +
...
 +
MODULES="... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ..."}}
  
Originally, VMware Tools provided the best drivers for network and storage, combined with the functionality for other features such as time synchronization. However, for quite a while now the drivers for the network adapter en scsi adapter are part of the linux kernel, and VMware Tools is only needed for extra features and support for the "old" vmxnet adapter.
+
Make sure to rebuild with:
 +
  # mkinitcpio -p linux
  
==Open-VM-Tools modules==
+
Some modules, such as the legacy {{ic|vmhgfs}} shared folder module, will require additional work to manually {{ic|compile}} and systemd {{ic|enable}} in order to function properly.
  
The open-vm-tools-modules package contains the following modules:
+
}}
  
* vmblock: kernel filesystem module, enables drag&drop functionality between the host system and the virtual machine in VMware Workstation/Fusion.
+
== VMware Tools versus Open-VM-Tools ==
* vmhgfs: kernel filesystem module, enables file/directory sharing between the host system and the virtual machine in VMware Workstation/Fusion.
+
* vmsync: experimental filesystem sync driver, enables filesystem quiescing when creating backups and snapshots.
+
* vmci: virtual machine communication interface, high performance interface between virtual machines on the same host and between virtual machines and the host itself.
+
* vsock: part of vmci.
+
* vmxnet: driver for the old vmxnet netwerk-adapter.
+
  
==Open-VM-Tools utilities==
+
In 2007, VMware released large partitions of the [http://kb.vmware.com/kb/340 VMware Tools] under the LGPL as [http://sourceforge.net/projects/open-vm-tools/ Open-VM-Tools]. The official Tools are not available [http://packages.vmware.com/tools/esx/latest/repos/index.html separately] for Arch Linux.
  
The open-vm-tools package comes with the following utilities:
+
Originally, VMware Tools provided the best drivers for network and storage, combined with the functionality for other features such as time synchronization. However, for quite a while now the drivers for the network/SCSI adapter are part of the Linux kernel, and VMware Tools is only needed for extra features like Unity mode.
  
* vmtoolsd: service responsible for the virtual machine status report.
+
Both VMware Tools and Open-VM-Tools require the installation of {{Pkg|xf86-video-vmware}}.
* vmware-check-vm: tool to check whether a utility has been started on a physical or virtual machine.
+
* vmware-xferlogs: Dumps logging/debugging information to the virtual machine logfile.
+
* vmware-toolbox-cmd: tool to obtain virtual machine information of the host such as statistics,...
+
* vmware-user-suid-wrapper: tool to enable clipboard sharing (copy/paste) between host and virtual machine.
+
  
==Installing Open-VM-Tools==
+
== Open-VM-Tools ==
  
Install the {{Pkg|open-vm-tools}} and the {{Pkg|open-vm-tools-modules}} package in the <nowiki>[</nowiki>[[community]]<nowiki>]</nowiki> repository.
+
=== Utilities ===
  
# pacman -S open-vm-tools open-vm-tools-modules
+
The {{Pkg|open-vm-tools}} package comes namely with the following utilities:
  
Start the service and enable it at boot:
+
* {{ic|vmtoolsd}} - Service responsible for the Virtual Machine status report.
 +
* {{ic|vmware-checkvm}} - Tool to check whether a program is running in the guest.
 +
* {{ic|vmware-toolbox-cmd}} - Tool to obtain Virtual Machine information of the host.
 +
* {{ic|vmware-user-suid-wrapper}} - Tool to enable clipboard sharing (copy/paste) between host and guest.
 +
* {{ic|vmware-vmblock-fuse}} - Filesystem utility. Enables drag & drop functionality between host and guest through [[Wikipedia:Filesystem in Userspace|FUSE]] (Filesystem in Userspace).
 +
* {{ic|vmware-xferlogs}} - Dumps logging/debugging information to the Virtual Machine logfile.
 +
* {{ic|vmhgfs-fuse}} - Utility for mounting vmhgfs shared folders.
  
# systemctl start vmtoolsd
+
=== Modules ===
# systemctl enable vmtoolsd
+
  
The open-vm-tools reads the file /etc/arch-release which is empty:
+
The {{AUR|open-vm-tools-dkms}} package comes with the following modules:
  
# cat /proc/version > /etc/arch-release
+
*{{ic|vmhgfs}} - Legacy filesystem driver. Enables legacy sharing implementation between host and guest.
 +
*{{ic|vmxnet}} - for the old VMXNET network adapter.
  
==Installing the official VMware Tools==
+
=== Installation ===
  
Install the ifconfig(1) program for the installer to work properly:
+
[[Install]] {{Pkg|open-vm-tools}} from the [[official repositories]]. If you want to use shared folders you also need to install {{AUR|open-vm-tools-dkms}} from the [[AUR]].
  
# pacman -S net-tools
+
Open-VM-Tools reads version information from {{ic|/etc/arch-release}}, which is empty:
  
Install Linux kernel headers for the installer to work properly:
+
# cat /proc/version > /etc/arch-release
  
# pacman -S linux-headers
+
==== Multi-User Target ====
# cd /lib/modules/$(uname -r)/build/include/linux
+
If you're booting into the {{ic|multi-user.target}} then follow the steps mentioned here. If you're booting into the graphical.target then please skip this section and read the instructions for the {{ic|graphical.target}}.
# ln -sv ../generated/uapi/linux/version.h
+
  
Create bogus init directories for the installer to work properly:
+
[[Start]] {{ic|vmtoolsd.service}} and enable it on boot, if desired.
  
# for x in `seq 0 6`; do mkdir -pv /etc/init.d/rc$x.d; done
+
==== Graphical Target ====
 +
If you are booting into a graphical environment then follow these steps to enable the VMware tools.
  
Mount the VMware Tools virtual CDROM when offered:
+
Enable the {{ic|vmware-vmblock-fuse.service}} Systemd service.
  
# mount /dev/cdrom /mnt
+
If you have installed {{AUR|open-vm-tools-dkms}} then you should enable the {{ic|dkms.service}} Systemd service which automatically recompiles the kernel modules after a kernel update.
  
Extract the tarball:
+
Try to install {{Pkg|gtkmm}} manually if it does not work properly.
  
# cd /root
+
=== Resolution update on window resize ===
# tar zxf /mnt/VMwareTools*.tar.gz
+
[https://bbs.archlinux.org/viewtopic.php?pid=1081629#p1081629 Start] {{ic|/usr/bin/vmware-user-suid-wrapper}} from within X.
# cd vmware-tools-distrib
+
  
Run the installer and use the default answers for all questions:
+
== Official VMware Tools ==
  
  # ./vmware-install.pl
+
=== Modules ===
  
You can safely ignore the following build failures:
+
*{{ic|vmblock}} - Filesystem driver. Enables drag & drop functionality between host and guest ([https://www.mail-archive.com/open-vm-tools-devel@lists.sourceforge.net/msg00213.html superseded] by the {{ic|vmware-vmblock-fuse}} utility).
 +
*{{ic|vmci}} - High performance communication interface between host and guest.
 +
*{{ic|vmmon}} - Virtual Machine Monitor.
 +
*{{ic|vmnet}} - Networking driver.
 +
*{{ic|vsock}} - VMCI sockets.
  
* VMNEXT 3 virtual network card
+
{{Note|There is no module for {{ic|vmware-vmblock-fuse}}, and {{ic|vmblock}} has been removed from the kernel unless you disable {{ic|fuse}}.  Instead, systemd services need to be {{ic|enabled}} to allow these functions.  See instructions below.
* "Warning: This script could not find mkinitrd or updatte-initramfs and cannot remake the initrd file!"
+
}}
  
Reboot your computer:
+
=== Installation (from guest) ===
  
# systemctl reboot
+
Install the dependencies: {{Grp|base-devel}} (for building), {{Pkg|net-tools}} (for {{ic|ifconfig}}, used by the installer) and {{Pkg|linux-headers}} (for kernel headers).
  
Log in and start the VMware Tools:
+
Then, create bogus init directories for the installer:
 +
# for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done
  
  # /etc/init.d/rc6.d/K99vmware-tools start
+
The installer can then be mounted:
 +
  # mount /dev/cdrom /mnt
  
==Time synchronization==
+
Extracted (e.g. to {{ic|/root}}):
 +
# tar xf /mnt/VMwareTools*.tar.gz -C /root
  
Configuring time synchronization in a virtual machine is important: fluctuations are bound to occur more easily in a virtual machine compared to a physical host. This is mostly due to the fact that the CPU is shared by more than one virtual machine.
+
And started:
 +
# perl /root/vmware-tools-distrib/vmware-install.pl
  
There are 2 options to set up time synchronization: the host machine as source or an external server as source.
+
You can safely ignore the following build failures:
  
===Host machine as time source===
+
* VMNEXT 3 virtual network card
To use the host as a time source (for example in an ESX server), run the following command (one time is enough):
+
* "Warning: This script could not find mkinitrd or update-initramfs and cannot remake the initrd file!"
 +
* Fuse components not found on the system.
  
vmware-toolbox-cmd timesync enable
+
Enable {{ic|vmware-vmblock-fuse}} systemd services:
  
To synchronize your guest clock with the host after your host machine wakes up from sleeping (like a laptop computer):
+
  # abs community/open-vm-tools
 +
  # cp /var/abs/community/open-vm-tools/vmware-* /usr/lib/systemd/system
 +
  # systemctl enable vmware-vmblock-fuse.service
  
sudo hwclock --hctosys --localtime
+
Reboot the Virtual Machine:
  
I run the above command every time I wake up my sleeping laptop and resume using Arch Linux inside the VMWare Player.
+
# systemctl reboot
  
===External server as time source===
+
Log in and start the VMware Tools:
  
See [[NTP]].
+
# /etc/init.d/rc6.d/K99vmware-tools start
  
==Xorg configuration==
+
{{Tip|There is also a [https://github.com/rasa/vmware-tools-patches project] in GitHub trying to automate all this.}}
  
{{Note|To use Xorg in a virtual machine, a minimum of 32MB VGA memory is needed, and the VMware hardware version has to be > 8, version 7 is no longer functioning correctly.}}
+
== Xorg configuration ==
  
Install the following dependencies:
+
{{Note|To use Xorg in a Virtual Machine, a minimum of 32MB VGA memory is needed.}}
  
pacman -S xf86-input-vmmouse xf86-video-vmware svga-dri
+
Install the dependencies: {{Pkg|xf86-input-vmmouse}}, {{Pkg|xf86-video-vmware}}, and {{Pkg|mesa}}.
  
Configure the {{ic|vmwgfx}} module to [[Kernel Modules#Loading|load at boot]].
+
If booting into a {{ic|graphical target}} you are almost done. {{ic|/etc/xdg/autostart/vmware-user.desktop}} will get started which will setup most of the things needed to work with the Virtual Machine.
  
Create the following file:
+
However, if booting into {{ic|multi-user.target}} or using an uncommon setup (e.g. multiple monitors), then {{ic|vmtoolsd.service}} needs to be [[enable]]d. In addition to this, edit:
{{hc|/etc/X11/xorg.conf.d/20-gpudriver.conf|
+
Section "Device"
+
        Identifier "Card0"
+
        Driver    "vmware"
+
EndSection}}
+
  
Afterwards, a reboot is required.
+
{{hc|head=/etc/X11/Xwrapper.config|output=
 +
needs_root_rights=yes
 +
}}
  
If you're booting into a graphical target you're almost done. {{ic|/etc/xdg/autostart/vmware-user.desktop}} will get started which will setup most of the things needed to work with the virtual machine.
+
to give permission for loading drivers.
  
If you're booting into ''multi-user.target'' then you need to enable the ''vmtoolsd.service'':
+
== Tips and tricks ==
  # systemctl enable vmtoolsd.service
+
  
=== Enable 3d accleration ===
 
To enable 3d acceleration go to ''Edit virtual machine settings'' -> ''Hardware'' -> ''Display'' and enable the checkbox for ''Accelerate 3D graphics''
 
  
==Paravirtual SCSI-Adapter==
+
=== Shared Folders with {{ic|vmhgfs-fuse}} utility ===
  
Due to less overhead the paravirtual scsi-adapter can give a substantial performance boost in ESX.
+
{{Note|This functionality is only available with {{ic|open-vm-tools}} v.10.x and kernel 4.x onwards and with VMware Workstation and Fusion.}}
  
This can be used as follows: open the {{ic|/etc/[[mkinitcpio.conf]]}} file and add the following to the MODULES array:
+
Share a folder by selecting ''Edit virtual machine settings > Options > Shared Folders > Always enabled'', and creating a new share.
  
MODULES=(...vmw_pvscsi...)
+
You should be able to see the shared folders by running vmware-hgfsclient command:
  
Afterwards, run the command:
+
$ vmware-hgfsclient
  
mkinitcpio -p linux
+
Now you can mount the folder:
  
Shutdown the virtual machine and change the scsi-adapter type to: {{ic|VMware Paravirtual}}. It's safe to ignore the warning that'll pop up.
+
# mkdir <shared folders root directory>
 +
# vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''
  
==VMCI==
+
Other {{ic|vmhgfs-fuse}} mount options can be viewed by using the {{ic|-h}} input flag:
  
The [http://www.vmware.com/support/developer/vmci-sdk VMCI interface] is enabled by default in VMware Workstation and Fusion. In VMware ESX the interface is restricted, which means that communication is only possible between ESX and the virtual machine, not between virtual machines themselves. This can be changed in the Virtual Machine settings, traffic between ESX and the Virtual Machine can not be disabled.
+
# vmhgfs-fuse -h
  
==DRAG AND DROP==
+
===== fstab =====
  
Drag and Drop from files, from VMware Workstation/Fusion into the Virtual Machines, can be disabled by editing {{ic|/etc/conf.d/open-vm-tools}}:
+
Add a rule for each share:
  
VM_DRAG_AND_DROP="no"
+
{{hc|/etc/fstab|
 +
.host:/''<shared_folder>'' ''/home/user1/shares'' fuse.vmhgfs-fuse defaults 0 0
 +
}}
  
==COPY AND PASTE==
+
Create and mount the Shared Folders:
  
Install the following package (it is required for copy/paste but not listed as a dependency as reported [https://bbs.archlinux.org/viewtopic.php?id=141607 here])
+
# mkdir /home/user1/shares
 +
# mount /home/user1/shares
  
pacman -S gtkmm
+
===== Systemd =====
  
Run the following command after starting X (or add it to your {{ic|~/.xinitrc}} file) to automatically synchronize your X clipboard with the host's.  This allows you to copy text from your virtual machine and paste it in the host, and vice versa.
+
Create the following {{ic|.service}}:
  
vmware-user-suid-wrapper
+
{{hc|head=/etc/systemd/system/''<shared folders root directory>''-''<shared_folder>''.service|output=
 +
[Unit]
 +
Description=Load VMware shared folders
 +
Requires=vmware-vmblock-fuse.service
 +
After=vmware-vmblock-fuse.service
 +
ConditionPathExists=.host:/''<shared_folder>''
 +
ConditionVirtualization=vmware
  
If you get the following error (which, in rare cases, you might have to run `strace vmware-user-suid-wrapper` to see it!)
+
[Service]
 +
Type=oneshot
 +
RemainAfterExit=yes
 +
ExecStart=
 +
ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''
  
vmware-user: could not open /proc/fs/vmblock/dev
 
  
you need to first insert the vmblock module into your kernel.
+
[Install]
 +
WantedBy=multi-user.target
 +
}}
  
sudo modprobe vmblock
+
Make sure the {{ic|''<shared folders root directory>''}} folder exists on your system. If this folder does not exist then you have to create it as the systemd service depends on it:
  
To have the module loaded at boot, see [[Kernel Modules#Loading]].
+
# mkdir -p ''<shared folders root directory>''
  
===Rebuilding the vmblock module===
+
[[Enable]] the {{ic|<shared folders root directory>-<shared_folder>.service}} mount target.
  
If your kernel already has the vmblock module loaded,
+
If you want to mount all shared folders automatically then omit ''<shared_folder>''.
  
  lsmod | grep vmblock
+
=== Legacy Shared Folders with vmhgfs module ===
  
and vmware-user-suid-wrapper still doesn't work, then you'll have to build the open-vm-tools-modules package yourself from the [[Arch Build System]]:
+
{{Note|This functionality is only available in VMware Workstation and Fusion}}
  
sudo abs community/open-vm-tools-modules
+
Share a folder by selecting ''Edit virtual machine settings > Options > Shared Folders > Always enabled'', and creating a new share.
cp -R /var/abs/community/open-vm-tools-modules/ .
+
cd ./open-vm-tools-modules/
+
makepkg -s
+
pacman -U open-vm-tools-modules-*.xz
+
  
Afterwards, restart your machine for the newly rebuilt & re-installed modules to take effect!
+
Make sure the {{ic|vmhgfs}} driver is loaded:
  
== Shared Folders with the Host ==
+
# modprobe vmhgfs
  
{{Note| This functionality is only available in VMware Workstation and Fusion}}
+
You should be able to see the shared folders by running vmware-hgfsclient command:
  
Create a new Shared Folder by selecting {{ic|VM}} -> {{ic|Settings...}} in the VMware Workstation menu. Select the {{ic|Options}} tab and then {{ic|Shared Folder}}. Enable the {{ic|Always enabled}} option and create a new share. For Windows XP, you can create a share named {{ic|C}} with the Host Path {{ic|C:\}}.
+
  $ vmware-hgfsclient
  
Add the following rule to {{ic|/etc/fstab}} (adjust the uid/gid where needed) for each shared folder:
+
Now you can mount the folder:
  
  .host:/shared_folder /mnt/shared vmhgfs defaults,user,ttl=5,uid=root,gid=root,fmask=0133,dmask=0022 0 0
+
  # mkdir /home/user1/shares
 +
# mount -n -t vmhgfs .host:/''<shared_folder>'' /home/user1/shares
  
Create the mount directories and Shared Folders:
+
==== Enable at boot ====
  
mkdir /mnt/shared
+
Edit your {{ic|mkinitcpio.conf}} like this:
  mount /mnt/shared
+
{{hc| # cat /etc/mkinitcpio.conf|output=
 +
...
 +
MODULES="... vmhgfs"
 +
...
 +
}}
 +
and then update your ramdisk:
 +
  # mkinitcpio -p linux
 +
 
 +
===== fstab =====
 +
 
 +
Add a rule for each share:
 +
 
 +
{{hc|/etc/fstab|
 +
.host:/''<shared_folder>'' ''/home/user1/shares'' vmhgfs defaults 0 0
 +
}}
  
Temporary mounts are also possible:
+
Create and mount the Shared Folders:
  
  mount -t -v -o rw .host:/shared_folder /mnt/shared
+
  # mkdir /home/user1/shares
 +
# mount /home/user1/shares
  
{{Note| an alternative way, tested on VMware player}}
+
===== Systemd =====
  
.host:/ /mnt/shared vmhgfs defaults 0 0
+
For shared folders to be working you need to have loaded the {{ic|vmhgfs}} driver. Simply create the following {{ic|.service}}s:
mount -t vmhgfs .host:/ /mnt/shared
+
  
==== Enable shared folders at boot ====
+
{{hc|head=/etc/systemd/system/''<shared folders root directory>''-''<shared_folder>''.mount|output=
For shared folders to be working you need to have loaded the ''vmhgfs'' driver.
+
Simply create the following systemd files:
+
{{Hc|head=/etc/systemd/system/mnt-hgfs.mount|output=
+
 
[Unit]
 
[Unit]
 
Description=Load VMware shared folders
 
Description=Load VMware shared folders
ConditionPathExists=.host:/
+
ConditionPathExists=.host:/''<shared_folder>''
 
ConditionVirtualization=vmware
 
ConditionVirtualization=vmware
  
 
[Mount]
 
[Mount]
What=.host:/
+
What=.host:/''<shared_folder>''
Where=/mnt/hgfs
+
Where=''<shared folders root directory>''/''<shared_folder>''
 
Type=vmhgfs
 
Type=vmhgfs
 
Options=defaults,noatime
 
Options=defaults,noatime
Line 251: Line 286:
 
}}
 
}}
  
{{Hc|head=/etc/systemd/system/mnt-hgfs.automount|output=
+
{{hc|head=/etc/systemd/system/''<shared folders root directory>''-''<shared_folder>''.automount|output=
 
[Unit]
 
[Unit]
 
Description=Load VMware shared folders
 
Description=Load VMware shared folders
ConditionPathExists=.host:/
+
ConditionPathExists=.host:/''<shared_folder>''
 
ConditionVirtualization=vmware
 
ConditionVirtualization=vmware
  
 
[Automount]
 
[Automount]
Where=/mnt/hgfs
+
Where=''<shared folders root directory>''/''<shared_folder>''
  
 
[Install]
 
[Install]
Line 264: Line 299:
 
}}
 
}}
  
Make sure that the folder ''/mnt/hgfs'' exists:
+
Make sure the {{ic|''<shared folders root directory>''}} folder exists on your system. If this folder does not exist then you have to create it as the systemd scripts depend on it:
  # mkdir -p /mnt/hgfs
+
 
Enable the mount target with:
+
# mkdir -p ''<shared folders root directory>''
  # systemctl enable mnt-hgfs.automount
+
 
 +
[[Enable]] the {{ic|mnt-hgfs.automount}} mount target.
 +
 
 +
If you want to mount all shared folders automatically then omit ''<shared_folder>''.
 +
 
 +
==== Prune mlocate DB ====
 +
 
 +
When using [[mlocate]], it is useless to index the shared directories in the {{ic|locate DB}}. Therefore, add the directories to {{ic|PRUNEPATHS}} in {{ic|/etc/updatedb}}.
 +
 
 +
=== 3D Acceleration ===
 +
 
 +
If not selected at guest creation time, 3D Acceleration can be enabled in: ''Edit virtual machine settings > Hardware > Display > Accelerate 3D graphics''.
 +
 
 +
==== OpenGL and GLSL support ====
 +
 
 +
It is possible to update OpenGL and GLSL with new kernel modules, overriding Arch-controlled versions. 
 +
 
 +
At the time of this writing, 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, compared to a physical host. 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 {{ic|vmtoolsd.service}} is [[start]]ed. 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]].
 +
 
 +
=== Performance Tips ===
 +
 
 +
{{Merge|VMware|Applies to all sort of VMs, particularly the last section}}
 +
 
 +
You can try the followings tips to improve the performance of your virtual machine.
 +
 
 +
==== Paravirtual SCSI adapter ====
 +
 
 +
[http://kb.vmware.com/kb/1010398 VMware Paravirtual SCSI (PVSCSI) adapters] are high-performance storage adapters for VMware ESXi that can result in greater throughput and lower CPU utilization. PVSCSI adapters are best suited for environments, where hardware or applications drive a very high amount of I/O throughput.
 +
 
 +
The SCSI adapter type {{ic|VMware Paravirtual}} is available in the Virtual Machine settings.
 +
 
 +
If you do not have these settings in your virtual machine configuration you can still use the paravirtual SCSI adapter like this:
 +
Make sure that the paravirtual SCSI adapter is included in your kernel image. For this you have to modify your {{ic|mkinitcpio.conf}}
 +
{{hc| cat /etc/mkinitcpio.conf|output=
 +
{{ic|...}}
 +
MODULES="{{ic|...}} vmw_pvscsi"
 +
{{ic|...}}
 +
}}
 +
Rebuild your ramdisk:
 +
# mkinitcpio -p linux
 +
Shutdown your virtual machine and change the SCSI adapter your {{ic|.vmx}} to the following:
 +
scsi0.virtualDev = "pvscsi"
 +
 
 +
==== Paravirtual Network Adapater ====
 +
 
 +
VMware offers [http://kb.vmware.com/kb/1001805 multiple network adapters] for the guest OS.  The default adapter used is usually the {{ic|e1000}} adapter, which emulates an Intel 82545EM Gigabit Ethernet NIC.  This Intel adapter is generally compatible with the built-in drivers across most operating systems, include Arch.
 +
 
 +
For [http://rickardnobel.se/vmxnet3-vs-e1000e-and-e1000-part-1/ much more performance and additional features] (such as multiqueue support), the VMware native {{ic|vmxnet3}} network adapter can be used.
 +
 
 +
Arch has the {{ic|vmxnet3}} kernel module available with a default install.  Once enabled in [[mkinitcpio]] (or if it is auto-detected, check by running {{ic|<nowiki>$ lsmod | grep vmxnet3</nowiki>}} to see if it is loaded), shutdown and change the network adapter type in your ''.vmx'' file to the following:
 +
 
 +
ethernet0.virtualDev = "vmxnet3"
 +
 
 +
After changing network adapters, you will need to update your network and [[dhcpcd]] settings to use the new adapter name and mac address.
 +
 
 +
# dhcpcd ''new_interface_name''
 +
# systemctl enable dhcpcd@''new_interface_name''.service
 +
 
 +
You can get the new interface name by running {{ic|ip link}}
 +
 
 +
==== Virtual Machine Settings ====
 +
These settings could help improve the responsiveness of your virtual machine by reducing disk I/O at the expense of using more host memory.  [http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1008885 Vmware's KB1008885] provides the following optimizations:
 +
 
 +
mainMem.useNamedFile = "FALSE"
 +
MemTrimRate = "0"
 +
prefvmx.useRecommendedLockedMemSize = "TRUE"
 +
MemAllowAutoScaleDown = "FALSE"
 +
sched.mem.pshare.enable = "FALSE"
 +
 
 +
* '''mainMem.useNamedFile''': This will only work for Windows hosts and you can use this parameter if you experience high disk activity on shutting down the virtual machine. This will prevent VMware from creating a ''.vmem'' file. Use ''mainmem.backing = "swap"'' on Linux hosts instead.
 +
* '''MemTrimRate''': This setting prevents that memory whichc was released by the guest is released on the host also.
 +
* '''prefvmx.useRecommendedLockedMemSize''': Unfortunately there does not seem to exist a proper explanation for this setting. This setting seems to prevent the host system from swapping parts of the guest memory.
 +
* '''MemAllowAutoScaleDown''': Prevents that VMware adjusts the memory size of the virtual machine in case it cannot allocate enough memory.
 +
* '''sched.mem.pshare.enable''': If several virtual machines are running simultaneously VMware will try to locate identical pages and share these between the virtual machines. This can be very I/O intensive.
 +
 
 +
The following settings could also be set in the configuration dialog of VMware Workstation(''Edit -> Preferences... -> Memory/Priority'').
 +
prefvmx.minVmMemPct = "100"
 +
mainMem.partialLazySave = "FALSE"
 +
mainMem.partialLazyRestore = "FALSE"
 +
* '''prefvmx.minVmMemPct''': Sets amount of RAM in percent which should be reserved by the virtual machine on the host system. If you set this to a lower value it is possible to assign the virtual machine more memory than available in the host system. Be careful though in this case as this will most likely lead to excessive hard drive usage. If you have enough RAM then leave this value at 100.
 +
* '''mainMem.partialLazySave''' and '''mainMem.partialLazyRestore''': These two parameters will prevent the virtual machine from creating partial snapshots for suspends. When you use these parameters and you suspend your virtual machine it will take a little bit longer, but there should be less hard disk activity from VMware trying to store this information.
 +
 
 +
== Troubleshooting ==
 +
 
 +
=== Sound problems ===
 +
If unacceptably loud and annoying sounds occur, then it may be related to the [[PC speaker]]. The issue may be resolved by globally disabling the PC speaker within the guest image:
 +
 
 +
  # echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf
 +
 
 +
=== Mouse problems ===
 +
 
 +
The following problems may occur with mouse:
 +
 
 +
*The automatic grab/ungrab feature will not automatically grab input when cursor enters the window
 +
*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 VM
 +
 
 +
You can try to [[Remove]] the {{Pkg|xf86-input-vmmouse}} package. {{Pkg|xf86-input-vmmouse}} and {{Pkg|xf86-input-libinput}} should be sufficient for handling mouse and keyboard inputs.
 +
 
 +
You can try to add these settings to your {{ic|.vmx}} configuration file ([https://forums.mageia.org/en/viewtopic.php?f=7&t=7977 Mouse position jumps to where it left the guest VM]):
 +
{{hc|~/vmware/''<Virtual Machine name>''/''<Virtual Machine name>''.vmx|2=
 +
mouse.vusb.enable = "TRUE"
 +
mouse.vusb.useBasicMouse = "FALSE"
 +
usb.generic.allowHID = "TRUE"
 +
 
 +
VMware attempts to automatically optimize mouse for gaming. If experiencing problems, disabling it is recommended: ''Edit > Preferences > Input > Optimize mouse for games: Never''
 +
}}
 +
 
 +
Alternatively, attempting to [http://www.spinics.net/lists/xorg/msg53932.html disable] the {{ic|catchall}} event in {{ic|60-libinput.conf}} may be needed:
 +
 
 +
{{hc|/usr/share/X11/xorg.conf.d/60-libinput.conf|
 +
#Section "InputClass"
 +
#        Identifier "libinput pointer catchall"
 +
#        MatchIsPointer "on"
 +
#        MatchDevicePath "/dev/input/event*"
 +
#        Driver "libinput"
 +
#EndSection
 +
}}
 +
 
 +
==== Missing buttons ====
 +
 
 +
If not by default, all mouse buttons should be working after adding {{ic|1=[https://communities.vmware.com/thread/457313?start=15&tstart=0 mouse.vusb.useBasicMouse = "FALSE"]}} to the {{ic|.vmx}}.
 +
 
 +
{{hc|~/vmware/''<Virtual Machine name>''/''<Virtual Machine name>''.vmx|2=
 +
mouse.vusb.useBasicMouse = "FALSE"
 +
}}
 +
 
 +
=== Boot problems ===
 +
 
 +
==== Slow boot time ====
 +
 
 +
You may see the following errors 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 {{ic|1=mem.hotadd = "FALSE"}} to the {{ic|.vmx}}.
 +
 
 +
{{hc|~/vmware/''<Virtual Machine name>''/''<Virtual Machine name>''.vmx|2=
 +
mem.hotadd = "FALSE"
 +
}}
 +
 
 +
==== Shutdown/Reboot hangs ====
 +
 
 +
Adjust the timeout for the vmtoolsd service (defaults to 90 seconds).
 +
 
 +
{{hc|/etc/systemd/system/vmtoolsd.service.d/timeout.conf|2=
 +
[Service]
 +
TimeoutStopSec=1
 +
}}
 +
 
 +
=== Window resolution autofit problems ===
 +
 
 +
Autofit means that when you resize the VMWare window in the host, ArchLinux should automatically follow and readjust its resolution to fit the new size of the host window.
 +
 
 +
For some reason autofit requires packages '''gtkmm''' and '''gtk2''', so you should check that you have them installed. If you don't have X windows installed or you are using a non GTK-based desktop environment such as KDE, you might have to install them manually.
 +
 
 +
 
 +
 
 +
'''Potential solution 2'''
 +
 
 +
You may need to add the modules to mkinitcpio.conf.
 +
 
 +
{{hc|1=/etc/mkinitcpio.conf|2=
 +
MODULES="vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx"
 +
}}
 +
 
 +
Do not forget to run:
 +
 
 +
{{bc|# mkinitcpio -p linux}}
 +
 
 +
=== Drag and drop, copy/paste ===
 +
 
 +
The drag-and-drop (copy/paste) feature requires both {{Pkg|open-vm-tools}} and {{Pkg|gtkmm}} packages to be installed in order to work.
 +
 
 +
{{ic|/etc/xdg/autostart/vmware-user.desktop}} may try to start ''vmware-user-suid-wrapper'' properly when you log in, but there is an unspecified relationship between it and ''gtkmm'' that causes it to silently fail. This is documented in {{Bug|43159}}.
 +
 
 +
=== Problems when running as a shared VM on Workstation 11 ===
 +
 
 +
Workstation 11 has a bug where vmware-hostd crashes if an Arch guest is running as a shared VM and vmtoolsd is running in the guest.  A patch to open-vm-tools to work around the bug is [https://github.com/vmware/open-vm-tools/issues/31 here].
  
=== Prune mlocate DB ===
+
=== Shared folder not mounted after system upgrade ===
  
When using mlocate, it's useless to index the shared directories in the {{ic|locate DB}}. Therefore, add the directories to {{ic|PRUNEPATHS}} in {{ic|/etc/updatedb}}.
+
{{Style|Broken english}}
  
== Trouble shooting ==
+
This is probably only happens to {{Pkg|open-vm-tools}}. Since the vmhgfs module belongs to {{AUR|open-vm-tools-dkms}} which belongs to AUR repositiory, therefore would not get's updated automatically by the {{ic|pacman -Syu}} command. Always update the {{AUR|open-vm-tools-dkms}} manually before the system upgrade.  
=== Mouse not working as expected ===
+
If you have the problem that mouse clicks are not registered in some programs you can try the following: edit ''/etc/X11/xorg.conf.d/10-evdev.conf'' and comment out the section with the identifier ''evdev pointer catchall'' [[http://www.spinics.net/lists/xorg/msg53932.html xf86-input-vmmouse does not work expected]]
+
  
=== Network connection not working ===
+
If you happened to get in to this situation, you need to remove the automount for shared file system, upgrade and do a {{ic|mkinitcpio -p linux}}.
Add the following line to your ''.vmx'' file:
+
  ethernet0.virtualDev = "vmxnet3"
+
More informations about the network adpater types can be found on the following page: [http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&docType=ex&bbid=TSEBB_1295982031224&url=&stateId=1%200%20381138238&dialogID=381134132&docTypeID=DT_KB_1_1&externalId=1001805&sliceId=2&rfId= Choosing a network adapter for your virtual machine]
+

Latest revision as of 22:33, 24 November 2016

Related articles

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

In-kernel drivers

  • 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+.

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: The vsock and vmw_vsock_vmci_transport drivers need a better description: When are they needed?]. (Discuss in Talk:VMware/Installing Arch as a guest#)

These drivers are only needed if you are running Arch Linux on a hypervisor like VMware vSphere Hypervisor

  • 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.
Note: Arch's Udev auto-detects and enables a few of these modules. Additional modules, such as vmw_balloon, may need to be added to your Mkinitcpio's MODULES list. For example:
 # cat /etc/mkinitcpio.conf
...
MODULES="... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ..."

Make sure to rebuild with:

 # mkinitcpio -p linux

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 partitions 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, for quite a while now the drivers for the network/SCSI adapter are part of the Linux kernel, and VMware Tools is only needed for extra features like Unity mode.

Both VMware Tools and Open-VM-Tools require the installation of xf86-video-vmware.

Open-VM-Tools

Utilities

The open-vm-tools package comes namely 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-suid-wrapper - 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.

Modules

The open-vm-tools-dkmsAUR package comes with the following modules:

  • vmhgfs - Legacy filesystem driver. Enables legacy sharing implementation between host and guest.
  • vmxnet - for the old VMXNET network adapter.

Installation

Install open-vm-tools from the official repositories. If you want to use shared folders you also need to install open-vm-tools-dkmsAUR from the AUR.

Open-VM-Tools reads version information from /etc/arch-release, which is empty:

# cat /proc/version > /etc/arch-release

Multi-User Target

If you're booting into the multi-user.target then follow the steps mentioned here. If you're booting into the graphical.target then please skip this section and read the instructions for the graphical.target.

Start vmtoolsd.service and enable it on boot, if desired.

Graphical Target

If you are booting into a graphical environment then follow these steps to enable the VMware tools.

Enable the vmware-vmblock-fuse.service Systemd service.

If you have installed open-vm-tools-dkmsAUR then you should enable the dkms.service Systemd service which automatically recompiles the kernel modules after a kernel update.

Try to install gtkmm manually if it does not work properly.

Resolution update on window resize

Start /usr/bin/vmware-user-suid-wrapper from within X.

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).

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

You can safely ignore the following build failures:

  • 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:

 # abs community/open-vm-tools
 # cp /var/abs/community/open-vm-tools/vmware-* /usr/lib/systemd/system
 # systemctl enable vmware-vmblock-fuse.service

Reboot the Virtual Machine:

# systemctl reboot

Log in and start the VMware Tools:

# /etc/init.d/rc6.d/K99vmware-tools start
Tip: There is also a project in GitHub trying to automate all this.

Xorg configuration

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

Install the dependencies: xf86-input-vmmouse, xf86-video-vmware, and mesa.

If booting into a graphical target you are almost done. /etc/xdg/autostart/vmware-user.desktop will get started which will setup most of the things 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, edit:

/etc/X11/Xwrapper.config
needs_root_rights=yes

to give permission for loading drivers.

Tips and tricks

Shared Folders with vmhgfs-fuse utility

Note: This functionality is only available with open-vm-tools v.10.x and kernel 4.x onwards and with VMware Workstation and Fusion.

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

You should be able to see the shared folders by running vmware-hgfsclient command:

$ vmware-hgfsclient

Now you can mount the folder:

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

Other vmhgfs-fuse mount options can be viewed by using the -h input flag:

# vmhgfs-fuse -h
fstab

Add a rule for each share:

/etc/fstab
.host:/<shared_folder> /home/user1/shares fuse.vmhgfs-fuse defaults 0 0

Create and mount the Shared Folders:

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

Create the following .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=
ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/<shared_folder> <shared folders root directory>


[Install]
WantedBy=multi-user.target

Make sure the <shared folders root directory> folder exists on your system. If this folder does not exist then you have to create it as the systemd service depends on it:

# mkdir -p <shared folders root directory>

Enable the <shared folders root directory>-<shared_folder>.service mount target.

If you want to mount all shared folders automatically then omit <shared_folder>.

Legacy Shared Folders with vmhgfs module

Note: This functionality is only available in VMware Workstation and Fusion

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

Make sure the vmhgfs driver is loaded:

# modprobe vmhgfs

You should be able to see the shared folders by running vmware-hgfsclient command:

$ vmware-hgfsclient

Now you can mount the folder:

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

Enable at boot

Edit your mkinitcpio.conf like this:

 # cat /etc/mkinitcpio.conf
...
MODULES="... vmhgfs"
...

and then update your ramdisk:

# mkinitcpio -p linux
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
Systemd

For shared folders to be working you need to have loaded the vmhgfs driver. Simply create the following .services:

/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

Make sure the <shared folders root directory> folder exists on your system. If this folder does not exist then you have to create it as the systemd scripts depend on it:

# mkdir -p <shared folders root directory>

Enable the mnt-hgfs.automount mount target.

If you want to mount all shared folders automatically then omit <shared_folder>.

Prune mlocate DB

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

3D Acceleration

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

OpenGL and GLSL support

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

At the time of this writing, 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, compared to a physical host. 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.

Performance Tips

Merge-arrows-2.pngThis article or section is a candidate for merging with VMware.Merge-arrows-2.png

Notes: Applies to all sort of VMs, particularly the last section (Discuss in Talk:VMware/Installing Arch as a guest#)

You can try the followings tips to improve the performance of your virtual machine.

Paravirtual SCSI adapter

VMware Paravirtual SCSI (PVSCSI) adapters are high-performance storage adapters for VMware ESXi that can result in greater throughput and lower CPU utilization. PVSCSI adapters are best suited for environments, where hardware or applications drive a very high amount of I/O throughput.

The SCSI adapter type VMware Paravirtual is available in the Virtual Machine settings.

If you do not have these settings in your virtual machine configuration you can still use the paravirtual SCSI adapter like this: Make sure that the paravirtual SCSI adapter is included in your kernel image. For this you have to modify your mkinitcpio.conf

 cat /etc/mkinitcpio.conf
...
MODULES="... vmw_pvscsi"
...

Rebuild your ramdisk:

# mkinitcpio -p linux

Shutdown your virtual machine and change the SCSI adapter your .vmx to the following:

scsi0.virtualDev = "pvscsi"

Paravirtual Network Adapater

VMware offers multiple network adapters for the guest OS. The default adapter used is usually the e1000 adapter, which emulates an Intel 82545EM Gigabit Ethernet NIC. This Intel adapter is generally compatible with the built-in drivers across most operating systems, include Arch.

For much more performance and additional features (such as multiqueue support), the VMware native vmxnet3 network adapter can be used.

Arch has the vmxnet3 kernel module available with a default install. Once enabled in mkinitcpio (or if it is auto-detected, check by running $ lsmod | grep vmxnet3 to see if it is loaded), shutdown and change the network adapter type in your .vmx file to the following:

ethernet0.virtualDev = "vmxnet3"

After changing network adapters, you will need to update your network and dhcpcd settings to use the new adapter name and mac address.

# dhcpcd new_interface_name
# systemctl enable dhcpcd@new_interface_name.service

You can get the new interface name by running ip link

Virtual Machine Settings

These settings could help improve the responsiveness of your virtual machine by reducing disk I/O at the expense of using more host memory. Vmware's KB1008885 provides the following optimizations:

mainMem.useNamedFile = "FALSE"
MemTrimRate = "0"
prefvmx.useRecommendedLockedMemSize = "TRUE"
MemAllowAutoScaleDown = "FALSE"
sched.mem.pshare.enable = "FALSE"
  • mainMem.useNamedFile: This will only work for Windows hosts and you can use this parameter if you experience high disk activity on shutting down the virtual machine. This will prevent VMware from creating a .vmem file. Use mainmem.backing = "swap" on Linux hosts instead.
  • MemTrimRate: This setting prevents that memory whichc was released by the guest is released on the host also.
  • prefvmx.useRecommendedLockedMemSize: Unfortunately there does not seem to exist a proper explanation for this setting. This setting seems to prevent the host system from swapping parts of the guest memory.
  • MemAllowAutoScaleDown: Prevents that VMware adjusts the memory size of the virtual machine in case it cannot allocate enough memory.
  • sched.mem.pshare.enable: If several virtual machines are running simultaneously VMware will try to locate identical pages and share these between the virtual machines. This can be very I/O intensive.

The following settings could also be set in the configuration dialog of VMware Workstation(Edit -> Preferences... -> Memory/Priority).

prefvmx.minVmMemPct = "100"
mainMem.partialLazySave = "FALSE"
mainMem.partialLazyRestore = "FALSE"
  • prefvmx.minVmMemPct: Sets amount of RAM in percent which should be reserved by the virtual machine on the host system. If you set this to a lower value it is possible to assign the virtual machine more memory than available in the host system. Be careful though in this case as this will most likely lead to excessive hard drive usage. If you have enough RAM then leave this value at 100.
  • mainMem.partialLazySave and mainMem.partialLazyRestore: These two parameters will prevent the virtual machine from creating partial snapshots for suspends. When you use these parameters and you suspend your virtual machine it will take a little bit longer, but there should be less hard disk activity from VMware trying to store this information.

Troubleshooting

Sound problems

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

 # echo "blacklist pcspkr" > /etc/modprobe.d/nobeep.conf

Mouse problems

The following problems may occur with mouse:

  • The automatic grab/ungrab feature will not automatically grab input when cursor enters the window
  • 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 VM

You can try to Remove the xf86-input-vmmouse package. xf86-input-vmmouse and xf86-input-libinput should be sufficient for handling mouse and keyboard inputs.

You can try to add these settings to your .vmx configuration file (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"
usb.generic.allowHID = "TRUE"

VMware attempts to automatically optimize mouse for gaming. If experiencing problems, disabling it is recommended: Edit > Preferences > Input > Optimize mouse for games: Never

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

/usr/share/X11/xorg.conf.d/60-libinput.conf
#Section "InputClass"
#        Identifier "libinput pointer catchall"
#        MatchIsPointer "on"
#        MatchDevicePath "/dev/input/event*"
#        Driver "libinput"
#EndSection

Missing buttons

If not by default, all mouse buttons should be working after adding mouse.vusb.useBasicMouse = "FALSE" to the .vmx.

~/vmware/<Virtual Machine name>/<Virtual Machine name>.vmx
mouse.vusb.useBasicMouse = "FALSE"

Boot problems

Slow boot time

You may see the following errors 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 you resize the VMWare window in the host, ArchLinux should automatically follow and readjust its resolution to fit the new size of the host window.

For some reason autofit requires packages gtkmm and gtk2, so you should check that you have them installed. If you don't have X windows installed or you are using a non GTK-based desktop environment such as KDE, you might have to install them manually.


Potential solution 2

You may need to add the modules to mkinitcpio.conf.

/etc/mkinitcpio.conf
MODULES="vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx"

Do not forget to run:

# mkinitcpio -p linux

Drag and drop, copy/paste

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

/etc/xdg/autostart/vmware-user.desktop may try to start vmware-user-suid-wrapper properly when you log in, but there is an unspecified relationship between it and gtkmm that causes it to silently fail. This is documented in FS#43159.

Problems when running as a shared VM on Workstation 11

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

Shared folder not mounted after system upgrade

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: Broken english (Discuss in Talk:VMware/Installing Arch as a guest#)

This is probably only happens to open-vm-tools. Since the vmhgfs module belongs to open-vm-tools-dkmsAUR which belongs to AUR repositiory, therefore would not get's updated automatically by the pacman -Syu command. Always update the open-vm-tools-dkmsAUR manually before the system upgrade.

If you happened to get in to this situation, you need to remove the automount for shared file system, upgrade and do a mkinitcpio -p linux.