VMware/Install Arch Linux as a guest: Difference between revisions

From ArchWiki
m (use unambiguous uninstall)
m (changed wording to make the instructions clear)
 
(68 intermediate revisions by 24 users not shown)
Line 1: Line 1:
[[Category:Installation process]]
[[Category:Installation process]]
[[Category:Hypervisors]]
[[Category:Hypervisors]]
[[es:VMware/Installing Arch as a guest]]
[[ja:VMware に Arch Linux をインストール]]
[[ja:VMware に Arch Linux をインストール]]
[[nl:VMware/Installing Arch as a guest]]
[[ru:VMware/Installing Arch as a guest]]
[[zh-hans:VMware/Installing Arch as a guest]]
[[zh-hans:VMware/Installing Arch as a guest]]
{{Related articles start}}
{{Related articles start}}
{{Related|VMware}}
{{Related|VMware}}
{{Related|Installing VMWare vCLI}}
{{Related|VMWare vCLI}}
{{Related articles end}}
{{Related articles end}}
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].
This article is about installing Arch Linux in a [[VMware]] product, such as [https://www.vmware.com/products/workstation-player.html Workstation Player], [https://www.vmware.com/products/fusion.html Fusion] or [https://www.vmware.com/products/workstation-pro.html Workstation Pro].


== In-kernel drivers ==
== 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 {{ic|lsmod {{!}} grep ''modulename''}} ) and if it is required, the module can be added to [[mkinitcpio]]'s {{ic|MODULES}} array.  For example:
{{hc|/etc/mkinitcpio.conf|output=
...
MODULES=(... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ...)
}}
Make sure to [[regenerate the initramfs]].
}}


*{{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_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.
Line 20: Line 26:
*{{ic|vmxnet3}} - For VMware's vmxnet3 virtual ethernet NIC.
*{{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+.
* a fuse-based hgfs implementation has been added to {{ic|open-vm-tools}} 10.0+ and is supported from kernel version 4.0+.
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]. Client-server applications can write to the VMCI Sock (vsock) interface to make use of the VMCI virtual device, when communicating between virtual machines.
The following drivers are only needed if you are running Arch Linux on a hypervisor like [https://www.vmware.com/products/vsphere-hypervisor VMware vSphere Hypervisor]. Client-server applications can write to the VMCI Sock (vsock) interface to make use of the VMCI virtual device, when communicating between virtual machines.
*{{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|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.
*{{ic|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 {{ic|vmw_balloon}}, may need to be added to your [[Mkinitcpio]]'s {{ic|MODULES}} list.  For example:
{{hc| # cat /etc/mkinitcpio.conf|output=
...
MODULES="... vmw_balloon vmw_pvscsi vsock vmw_vsock_vmci_transport ..."}}
Make sure to rebuild with:
  # mkinitcpio -p linux


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


== VMware Tools versus Open-VM-Tools ==
== VMware Tools versus Open-VM-Tools ==


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.
In 2007, VMware released large portions of the [https://kb.vmware.com/kb/340 VMware Tools] under the LGPL as [https://sourceforge.net/projects/open-vm-tools/ Open-VM-Tools]. The official Tools are not available [https://packages.vmware.com/tools/esx/latest/repos/index.html 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.
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 used to have 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 the answer in [https://communities.vmware.com/thread/518735 this thread].
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 [https://communities.vmware.com/thread/518735 this thread].


== Open-VM-Tools ==
== Open-VM-Tools ==
Line 48: Line 44:
=== Utilities ===
=== Utilities ===


The {{Pkg|open-vm-tools}} package comes namely with the following utilities:
The {{Pkg|open-vm-tools}} package comes with the following utilities:


* {{ic|vmtoolsd}} - Service responsible for the Virtual Machine status report.
* {{ic|vmtoolsd}} - Service responsible for the Virtual Machine status report.
Line 57: Line 53:
* {{ic|vmware-xferlogs}} - Dumps logging/debugging information to the Virtual Machine logfile.
* {{ic|vmware-xferlogs}} - Dumps logging/debugging information to the Virtual Machine logfile.
* {{ic|vmhgfs-fuse}} - Utility for mounting vmhgfs shared folders.
* {{ic|vmhgfs-fuse}} - Utility for mounting vmhgfs shared folders.
=== Modules ===
*{{ic|vmhgfs}} - Legacy filesystem driver. Enables legacy sharing implementation between host and guest.
*{{ic|vmxnet}} - for the old VMXNET network adapter.


=== Installation ===
=== Installation ===


[[Install]] the {{Pkg|open-vm-tools}}. If you want to use shared folders you also need to install the {{AUR|open-vm-tools-dkms}} package. [[Start]] and/or [[enable]] {{ic|vmtoolsd.service}} and {{ic|vmware-vmblock-fuse.service}}.
[[Install]] {{Pkg|open-vm-tools}}. [[Start]] and/or [[enable]] {{ic|vmtoolsd.service}} and {{ic|vmware-vmblock-fuse.service}}.


Try to install {{Pkg|gtkmm3}} manually if it does not work properly. To enable copy and paste between host and guest {{Pkg|gtkmm3}} is required.
Try to install {{Pkg|gtkmm3}} manually if copy and paste between host and guest does not work properly.


== Official VMware Tools ==
== Official VMware Tools ==
Line 85: Line 75:
=== Installation (from guest) ===
=== Installation (from guest) ===


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). A make dependency for checking out {{ic|open-vm-tools}} is {{pkg|asp}}.
Install the dependencies: {{Pkg|base-devel}} (for building), {{Pkg|net-tools}} (for {{ic|ifconfig}}, used by the installer) and {{Pkg|linux-headers}} (for kernel headers). In order to check out {{ic|open-vm-tools}} you will need {{ic|pkgctl}} from the {{pkg|devtools}} package.


Then, create bogus init directories for the installer:
Then, create bogus init directories for the installer:
  # for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done
  # for x in {0..6}; do mkdir -p /etc/init.d/rc${x}.d; done


The installer can then be mounted:
The installer can then be mounted:
  # mount /dev/cdrom /mnt
  # mount /dev/cdrom /mnt


Extracted (e.g. to {{ic|/root}}):
Extracted (e.g. to {{ic|/root}}):
  # tar xf /mnt/VMwareTools*.tar.gz -C /root
  # tar xf /mnt/VMwareTools*.tar.gz -C /root


And started:
And started:
  # perl /root/vmware-tools-distrib/vmware-install.pl
  # perl /root/vmware-tools-distrib/vmware-install.pl


You can safely ignore the following build failures:
The following build failures can safely be ignored:


* VMNEXT 3 virtual network card
* VMNEXT 3 virtual network card
Line 105: Line 99:
* Fuse components not found on the system.
* Fuse components not found on the system.


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


Enable {{ic|vmware-vmblock-fuse}} systemd services (make sure you install the dependencies manually or use the {{ic|-s}} flag):
   $ pkgctl repo clone open-vm-tools
 
   $ cd open-vm-tools
   $ asp checkout open-vm-tools
   $ cd open-vm-tools/repos/community-x86_64/
   $ makepkg -s --asdeps
   $ makepkg -s --asdeps
   # cp vm* /usr/lib/systemd/system
   # cp vm* /usr/lib/systemd/system
  # systemctl enable vmware-vmblock-fuse
  # systemctl enable vmtoolsd


Reboot the Virtual Machine:
[[Enable]] {{ic|vmware-vmblock-fuse.service}} and {{ic|vmtoolsd.service}}.


# systemctl reboot
[[Reboot]] the Virtual Machine.


Log in and start the VMware Tools:
Log in and start the VMware Tools:
Line 123: Line 114:
  # /etc/init.d/rc6.d/K99vmware-tools start
  # /etc/init.d/rc6.d/K99vmware-tools start


{{Tip|There is also a [https://github.com/rasa/vmware-tools-patches project] in GitHub trying to automate all this.}}
Additionally, to auto start {{ic|vmware-tools}} on boot, create a new file {{ic|/etc/systemd/system/vmwaretools.service}}:
 
{{hc|/etc/systemd/system/vmwaretools.service|output=
[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 {{ic|vmwaretools.service}}.
{{Tip|There is also a [https://github.com/rasa/vmware-tools-patches project] in GitHub trying to automate these steps.}}


== Xorg configuration ==
== Xorg configuration ==
Line 131: Line 140:
Install the dependencies: {{Pkg|xf86-input-vmmouse}}, {{Pkg|xf86-video-vmware}}, and {{Pkg|mesa}}.
Install the dependencies: {{Pkg|xf86-input-vmmouse}}, {{Pkg|xf86-video-vmware}}, and {{Pkg|mesa}}.


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.
These packages should be all that are required to get started with booting into a {{ic|graphical target}}: . {{ic|/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 {{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:
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, [[Xorg#Xorg as Root|run Xorg as root]] to give permission for loading drivers.
 
{{hc|head=/etc/X11/Xwrapper.config|output=
needs_root_rights=yes
}}
 
to give permission for loading drivers.


== Tips and tricks ==
== Tips and tricks ==


=== Shared Folders with {{ic|vmhgfs-fuse}} utility ===
=== Shared Folders with {{ic|vmhgfs-fuse}} utility ===
Line 150: Line 152:
Share a folder by selecting ''Edit virtual machine settings > Options > Shared Folders > Always enabled'', and creating a new share.
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 with:
The shared folders should be visible with:


  $ vmware-hgfsclient
  $ vmware-hgfsclient


Now you can mount the folder:
Now the folder can be mounted:


  # mkdir <shared folders root directory>
  # mkdir <shared folders root directory>
  # vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''
  # vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''
If the error message {{ic|fusermount: option allow_other only allowed if 'user_allow_other' is set in /etc/fuse.conf}} is displayed, uncomment the following line in {{ic|/etc/fuse.conf}}:
user_allow_other


Other {{ic|vmhgfs-fuse}} mount options can be viewed by using the {{ic|-h}} input flag:
Other {{ic|vmhgfs-fuse}} mount options can be viewed by using the {{ic|-h}} input flag:
Line 163: Line 168:
  # vmhgfs-fuse -h
  # vmhgfs-fuse -h


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


Add a rule for each share:
Add a rule for each share:


{{hc|/etc/fstab|
{{hc|/etc/fstab|
.host:/''<shared_folder>'' ''/home/user1/shares'' fuse.vmhgfs-fuse defaults 0 0
.host:/''<shared_folder>'' ''<shared folders root directory>'' fuse.vmhgfs-fuse nofail,allow_other 0 0
}}
}}


Create and mount the Shared Folders:
Create and mount the Shared Folders (if not done so already):


  # mkdir /home/user1/shares
  # mkdir ''<shared folders root directory>''
  # mount /home/user1/shares
  # mount ''<shared folders root directory>''


===== Systemd =====
==== Systemd ====


Create the following {{ic|.service}}:
Create the following {{ic|.service}}:
Line 191: Line 198:
Type=oneshot
Type=oneshot
RemainAfterExit=yes
RemainAfterExit=yes
ExecStart=
ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''
ExecStart=/usr/bin/vmhgfs-fuse -o allow_other -o auto_unmount .host:/''<shared_folder>'' ''<shared folders root directory>''


[Install]
[Install]
Line 199: Line 204:
}}
}}


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:
Ensure the {{ic|''<shared folders root directory>''}} folder exists on the system. If this folder does not exist then it must be created, as the systemd service depends on it:


  # mkdir -p ''<shared folders root directory>''
  # mkdir -p ''<shared folders root directory>''
Line 205: Line 210:
[[Enable]] the {{ic|<shared folders root directory>-<shared_folder>.service}} mount target.
[[Enable]] the {{ic|<shared folders root directory>-<shared_folder>.service}} mount target.


If you want to mount all shared folders automatically then omit ''<shared_folder>''.
If all shared folders should be mounted automatically then omit ''<shared_folder>''.


=== Legacy Shared Folders with vmhgfs module ===
=== Legacy Shared Folders with vmhgfs module ===


{{Note|This functionality is only available in VMware Workstation and Fusion}}
{{Note|This functionality is only available in VMware Workstation and Fusion}}
Line 213: Line 218:
Share a folder by selecting ''Edit virtual machine settings > Options > Shared Folders > Always enabled'', and creating a new share.
Share a folder by selecting ''Edit virtual machine settings > Options > Shared Folders > Always enabled'', and creating a new share.


Make sure the {{ic|vmhgfs}} driver is loaded:
Ensure the {{ic|vmhgfs}} driver is loaded:


  # modprobe vmhgfs
  # modprobe vmhgfs


You should be able to see the shared folders with:
The shared folders should be viewable with:


  $ vmware-hgfsclient
  $ vmware-hgfsclient


Now you can mount the folder:
Now the folder can be mounted:


  # mkdir /home/user1/shares
  # mkdir /home/user1/shares
Line 228: Line 233:
==== Enable at boot ====
==== Enable at boot ====


Edit your {{ic|mkinitcpio.conf}} like this:
Edit {{ic|mkinitcpio.conf}} thusly:
{{hc| # cat /etc/mkinitcpio.conf|output=
{{hc|/etc/mkinitcpio.conf|output=
...
...
MODULES="... vmhgfs"
MODULES=(... vmhgfs)
...
...
}}
}}
and then update your ramdisk:
and then [[regenerate the initramfs]].
# mkinitcpio -p linux


===== fstab =====
===== fstab =====
Line 252: Line 256:
===== Systemd =====
===== Systemd =====


For shared folders to be working you need to have loaded the {{ic|vmhgfs}} driver. Simply create the following {{ic|.service}}s:
For shared folders to work the {{ic|vmhgfs}} driver must be loaded. Create the following {{ic|.service}}s:


{{hc|head=/etc/systemd/system/''<shared folders root directory>''-''<shared_folder>''.mount|output=
{{hc|head=/etc/systemd/system/''<shared folders root directory>''-''<shared_folder>''.mount|output=
Line 283: Line 287:
}}
}}


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:
Ensure the {{ic|''<shared folders root directory>''}} folder exists on the system. If this folder does not exist then it must be created, as the systemd scripts depend on it:


  # mkdir -p ''<shared folders root directory>''
  # mkdir -p ''<shared folders root directory>''
Line 289: Line 293:
[[Enable]] the {{ic|mnt-hgfs.automount}} mount target.
[[Enable]] the {{ic|mnt-hgfs.automount}} mount target.


If you want to mount all shared folders automatically then omit ''<shared_folder>''.
If all shared folders should be mounted automatically then omit ''<shared_folder>''.


==== Prune mlocate DB ====
==== 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}}.
When using [[mlocate]], it is pointless to index the shared directories in the {{ic|locate DB}}. Therefore, add the directories to {{ic|PRUNEPATHS}} in {{ic|/etc/updatedb}}.


=== 3D Acceleration ===
=== 3D Acceleration ===
Line 299: Line 303:
If not selected at guest creation time, 3D Acceleration can be enabled in: ''Edit virtual machine settings > Hardware > Display > Accelerate 3D graphics''.
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. It some cases, llvmpipe software rendering is much faster.}}
{{Note|Xorg can be very slow with 3D Acceleration enabled. In some cases, llvmpipe software rendering is much faster.}}


==== OpenGL and GLSL support ====
==== OpenGL and GLSL support ====
Line 305: Line 309:
It is possible to update OpenGL and GLSL with new kernel modules, overriding Arch-controlled versions.   
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.
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 ===
=== 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.
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.
There are 2 options to set up time synchronization: the host or an external source.
Line 327: Line 331:
See [[NTP]].
See [[NTP]].


=== Performance Tips ===
== Troubleshooting ==


{{Merge|VMware|Applies to all sort of VMs, particularly the last section}}
=== Network slow on guest ===


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=
...
MODULES="... vmw_pvscsi"
...
}}
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 which 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 ==
=== 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.
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.


=== File share problems with newer kernels ===
As the {{AUR|open-vm-tools-dkms}} package is no longer being updated, newer kernels are not patched correctly using it to be compatible with a host-guest file share. The [https://github.com/davispuh/open-vm-tools-dkms  Github repository] has some patch files that can be manually applied to restore functionality.
It is also recommended you check the AUR comment section for this package.
=== Sound problems ===
=== 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
If unacceptably loud or annoying sounds occur, then it may be related to the PC speaker. The issue may be resolved by [[PC speaker#Globally|disabling the PC speaker]] within the guest image.


=== Mouse problems ===
=== Mouse problems ===


The following problems may occur with mouse:
The following problems may occur with the mouse:


*The automatic grab/ungrab feature will not automatically grab input when cursor enters the window
*The automatic grab/ungrab feature does not automatically grab input when the cursor enters the window
*Missing buttons
*Missing buttons
*Input lag
*Input lag
Line 414: Line 352:
*Mouse position jumps to where it left the guest VM
*Mouse position jumps to where it left the guest VM


You can try to [[uninstall]] the {{Pkg|xf86-input-vmmouse}} package. {{Pkg|xf86-input-vmmouse}} and {{Pkg|xf86-input-libinput}} should be sufficient for handling mouse and keyboard inputs.
These may be fixed by [[uninstall]]ing 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]):
Adding settings to the {{ic|.vmx}} configuration file may help ([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=
{{hc|~/vmware/''<Virtual Machine name>''/''<Virtual Machine name>''.vmx|2=
mouse.vusb.enable = "TRUE"
mouse.vusb.enable = "TRUE"
Line 422: Line 360:
}}
}}


VMware also attempts to automatically optimize mouse for gaming. If experiencing problems, disabling it is recommended: ''Edit > Preferences > Input > Optimize mouse for games: Never''
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 [http://www.spinics.net/lists/xorg/msg53932.html disable] the {{ic|catchall}} event in {{ic|60-libinput.conf}} may be needed:
Alternatively, attempting to [https://www.spinics.net/lists/xorg/msg53932.html disable] the {{ic|catchall}} event in {{ic|60-libinput.conf}} may be required:


{{hc|/usr/share/X11/xorg.conf.d/60-libinput.conf|
{{hc|/usr/share/X11/xorg.conf.d/60-libinput.conf|
Line 439: Line 377:
==== Slow boot time ====
==== Slow boot time ====


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


*add_memory failed
*add_memory failed
Line 461: Line 399:
=== Window resolution autofit problems ===
=== 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.
"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 ====
==== Potential solution 1 ====


Make sure you have enabled autofit.
Ensure autofit is enabled. For VMware Workstation the setting can be found in: ''View -> Autosize -> Autofit Guest''
 
For VMware Worksation you can find the setting in: ''View -> Autosize -> Autofit Guest''


==== Potential solution 2 ====
==== Potential solution 2 ====


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.
For some reason, autofit requires that the packages '''gtkmm''' and '''gtk2''', 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 ====
==== Potential solution 3 ====


You may need to add the modules to mkinitcpio.conf.
The relevant modules may have to be added to mkinitcpio.conf:


{{hc|1=/etc/mkinitcpio.conf|2=
{{hc|/etc/mkinitcpio.conf|2=
MODULES="vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx"
MODULES=(vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx)
}}
}}


Do not forget to run:
Do not forget to [[regenerate the initramfs]].
 
{{bc|# mkinitcpio -p linux}}


==== Potential solution 4 ====
==== Potential solution 4 ====


[[Enable]] {{ic|vmtoolsd.service}}.
[[Enable]] {{ic|vmtoolsd.service}}.
If this does not work, ensure the {{ic|vmtoolsd.service}} is [[restart]]ed.
==== Potential solution 5 ====
If [[GNOME]] is running on [[Wayland]], [[install]] {{Pkg|xf86-video-vmware}} ({{Bug|57473}}).
See [https://github.com/vmware/open-vm-tools/issues/22#issuecomment-362705505].
==== Potential solution 6 ====
Make sure that Stretch Mode is disabled. Follow ''VM > Settings > Display > Display Scaling'' and untick the option ''Stretch mode''.


=== Drag and drop, copy/paste ===
=== Drag and drop, copy/paste ===
{{Tip|There is an unspecified relationship between it and ''gtkmm3'' that causes it to silently fail. This is documented in {{Bug|43159}}.}}


The drag-and-drop (copy/paste) feature requires both {{Pkg|open-vm-tools}} and {{Pkg|gtkmm3}} packages to be installed in order to work.
{{Tip|There is an unspecified relationship between these features and ''gtkmm3'' that causes them to silently fail. This is documented in {{Bug|43159}}.}}
 
The drag-and-drop (copy/paste) feature requires both {{Pkg|open-vm-tools}} and {{Pkg|gtkmm3}} packages to be installed.


Make the command {{ic|vmware-user}} run after [[X11]] by either:
Make the command {{ic|vmware-user}} run after [[X11]] by either:


* Ensuring {{ic|etc/xdg/autostart/vmware-user.desktop}} exists, and if not, run:
* Ensuring {{ic|/etc/xdg/autostart/vmware-user.desktop}} exists, and if not, running:
  # cp /etc/vmware-tools/vmware-user.desktop /etc/xdg/autostart/vmware-user.desktop
  # cp /etc/vmware-tools/vmware-user.desktop /etc/xdg/autostart/vmware-user.desktop
OR
OR
* Add {{ic|vmware-user}} to [[Xinitrc]]
* Add {{ic|vmware-user}} to [[Xinitrc]].
 
Copy/paste [https://github.com/vmware/open-vm-tools/issues/443 does not currently work on Wayland], though applications running through [[Xwayland]] work fine.


=== Problems when running as a shared VM on Workstation 11 ===
=== Problems when running as a shared VM on Workstation 11 ===
Line 505: Line 454:
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].
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].


=== Shared folder not mounted after system upgrade ===
== Virtual Network Editor Wayland ==
[[Running GUI applications as root]] -- some of the following is copied from
 
* When running VMWare workstation on a wayland host the Virtual Network Editor will not launch under Wayland this because
 
Trying to run a graphical application as root via [[su]], [[sudo]] or [[polkit|pkexec]] in a Wayland session (e.g. [[GParted]] or [[Gedit]]), will fail with an error similar to this:
 
{{bc|$ sudo vmware-netcfg
No protocol specified
Unable to init server: Could not connect: Connection refused
 
(gedit:2349): Gtk-WARNING **: cannot open display: :0
}}
 
This is a security feature of Wayland they reason GUI applications should not be run as root. This can be achieved using the following in the terminal
 
=== Using xhost ===
 
A more versatile —though much less secure— workaround is to use [[xhost]] to temporarily allow the root user to access the local user's X session[https://bugzilla.redhat.com/show_bug.cgi?id=1274451#c64]. To do so, execute the following command as the current (unprivileged) user:
 
$ xhost si:localuser:root
 
To remove this access after the application has been closed:
 
$ xhost -si:localuser:root
 
=== Using sudo -E ===


Most likely, this should only happen to {{Pkg|open-vm-tools}}. Since the {{ic|vmhgfs}} module belongs to {{AUR|open-vm-tools-dkms}}, the legacy filesystem driver would not be upgraded by using the command {{ic|pacman -Syu}}. Therefor, {{AUR|open-vm-tools-dkms}} should be manually upgraded before the official repositories.
Launch vmware-netcfg with:


If a shared folder is not mounted after a system upgrade, then remove the shared filesystem automount, upgrade {{AUR|open-vm-tools-dkms}}, run {{ic|pacman -Syu}}, and finally execute {{ic|mkinitcpio -p linux}}. Don't forget to restore the filesystem automount.
$ sudo -E vmware-netcfg

Latest revision as of 20:14, 10 November 2023

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. 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-vmmouse, xf86-video-vmware, and mesa.

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

The shared folders should be visible with:

$ vmware-hgfsclient

Now the folder can be mounted:

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

If the error message 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:

user_allow_other

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

# vmhgfs-fuse -h
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)).

fstab

Add a rule for each share:

/etc/fstab
.host:/<shared_folder> <shared folders root directory> fuse.vmhgfs-fuse nofail,allow_other 0 0

Create and mount the Shared Folders (if not done so already):

# mkdir <shared folders root directory>
# mount <shared folders root directory>

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

[Install]
WantedBy=multi-user.target

Ensure the <shared folders root directory> folder exists on the system. If this folder does not exist then it must be created, 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 all shared folders should be mounted 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.

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
Systemd

For shared folders to work the vmhgfs driver must be loaded. 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

Ensure the <shared folders root directory> folder exists on the system. If this folder does not exist then it must be created, as the systemd scripts depend on it:

# mkdir -p <shared folders root directory>

Enable the mnt-hgfs.automount mount target.

If all shared folders should be mounted automatically then omit <shared_folder>.

Prune mlocate DB

When using mlocate, it is pointless 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.

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.

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 VM

These may be fixed by uninstalling the xf86-input-vmmouse package. xf86-input-vmmouse and 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 gtkmm and gtk2, 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-vmware (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.

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

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

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.

Virtual Network Editor Wayland

Running GUI applications as root -- some of the following is copied from

  • When running VMWare workstation on a wayland host the Virtual Network Editor will not launch under Wayland this because

Trying to run a graphical application as root via su, sudo or pkexec in a Wayland session (e.g. GParted or Gedit), will fail with an error similar to this:

$ sudo vmware-netcfg
No protocol specified
Unable to init server: Could not connect: Connection refused

(gedit:2349): Gtk-WARNING **: cannot open display: :0

This is a security feature of Wayland they reason GUI applications should not be run as root. This can be achieved using the following in the terminal

Using xhost

A more versatile —though much less secure— workaround is to use xhost to temporarily allow the root user to access the local user's X session[2]. To do so, execute the following command as the current (unprivileged) user:

$ xhost si:localuser:root

To remove this access after the application has been closed:

$ xhost -si:localuser:root

Using sudo -E

Launch vmware-netcfg with:

$ sudo -E vmware-netcfg