Manjaro: Fixing the screen resolution in VMware

Note: This article is probably outdated. I received reports that simply restarting the vmtoolsd service doesn’t work anymore.

Due to a bug in current versions of Manjaro, it is not possible to change the screen resolution if Manjaro is running as a VMware guest. Neither changing the resolution manually nor using the “Fit Guest Now” option is working correctly. Since the screen resolution is pinned to 800×600 pixels, it’s almost impossible to properly use the VM. I was able to reproduce the issue with my VM running Manjaro with the KDE desktop.

The underlying issue is that the systemd service providing the VMware Guest Tools is not starting properly. According to an entry in the Manjaro forums (dated May 2019) shows two possible solutions.

Temporarily, it’s possible to (re)start the necessary service with the

systemctl restart vmtoolsd.service

command. While the screen resolution can be modified instantly afterwards, you’ll have to redo this process after a reboot.

A more permanent solution is a modification of the systemd unit file /usr/lib/systemd/system/vmtoolsd.service.

As Matthew pointed out in his comment, you should avoiding editing the unit file manually and use the systemctl edit vmtoolsd.service command instead. Thanks, Matthew!

After the modification, it should look like this:

[Unit]
Description=Open Virtual Machine Tools (VMware Tools)
ConditionVirtualization=vmware
After=display-manager.service

[Service]
ExecStart=/usr/bin/vmtoolsd

[Install]
WantedBy=multi-user.target

Finally, you can change the screen resolution right after booting the system. Additionally, VMware’s “Autofit” options will work properly again.

14 Comments

  1. The proper way to do this is to: sudo systemctl edit vmtoolsd.service .. then between the comments add the [Unit] & After=display-manager.service line you provided. Do not edit unit files directly. This way then next time that vmtoolsd package is updated it can install the new version and still incorporate your changes.

  2. When attempting to restart vmtoolsd.service following the instructions provided and subsequently checking the service status via systemctl status vmtoolsd.service, I encountered the following status error:
    “vmtoolsd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services.”
    Apparently the ExecStart statement is cumulative and must be cleared via a preceding “ExecStart=” statement to clear any previously set value.

  3. Actually my previous comment was prematurely optimistic, while restarting with the ExecStart= clearing statement allows the service to start following a reboot, status reveals CGroup 404 /usr/bin/vmtoolsd
    After manually restarting the service the CGroup is set to a proper process id in my case 1940 /usr/bin/vmtoolsd.
    I’m running latest manjaro gnome as of the date of this comment.

  4. Your modification is the content of the original vmware-tools Unit-File, but it doesn’t works on my system.
    I couldn’t see a display-manager.service on my Manjaro system.
    Either a gdm.service or a display-manager.target are available.
    In the gdm.service unitfile there is an alias “display-manager.service” defined, but it seems not be recognized correctly for the dependency.
    So I changed it to

    [Unit]
    Description=Open Virtual Machine Tools (VMware Tools)
    ConditionVirtualization=vmware
    After=display-manager.target

    [Service]
    ExecStart=
    ExecStart=/usr/bin/vmtoolsd

    [Install]
    WantedBy=multi-user.target

    That works fine for my installation.
    I could see this also in the dependency tree: sudo systemctl list-dependencies

    1. Hi Gunnar, thanks for your reply! I really think I need to rewrite this article – it looks like the changes I proposed simply don’t work in current versions anymore. Thanks a lot for your suggestion!

    1. I’m currently not following Manjaro development anymore, so unfortunately, I really can’t tell if there’s a permanent way to fix this, sorry.

    1. I guess we hit a point where this workaround simply doesn’t work anymore. Time to add a note to the blog post…

  5. What worked for me was in this thread;
    https://archived.forum.manjaro.org/t/vmware-cant-change-screen-resolution/89090/30

    What worked for me was to start my guest, edit /etc/mkinitcpio.conf and comment out the old MODULES, replacing it:

    # MODULES=””
    MODULES=(vsock vmw_vsock_vmci_transport vmw_balloon vmw_vmci vmwgfx)

    Regenerate the initramfs simply by doing an upgrade (if possible), or rebuild initramfs and grub config:

    sudo mkinitcpio -P
    sudo grub-mkconfig -o /boot/grub/grub.cfg

    And reboot

Leave a Reply

Your email address will not be published.