In preparation for writing this article I wasn’t entirely sure when Linux distributions started to support ARM CPUs, it is not as though ARM CPUs are a recent phenomenon, devices that utilize their designs have been around for several decades with the advent of smartphones and prior to that in different variations of personal digital assistants including the infamous Apple Newton of the 1990s. Imagine my surprise when I discovered that Ubuntu has supported different ARM architectures dating back to Ubuntu 12.04 (2012).

I wasn’t aware that Ubuntu produced a version that ran on ARM CPUs until the past few years with the transition of Apple’s line of computers from Intel CPUs to ARM announced in 2020. As someone who is primarily a Mac user that tabbles with and enjoys using Linux, I’ve often relied on virtual machines to run Linux in a virtual machine on my Macs.

Since I first acquired my Mac mini shortly after Apple’s initial release of the M1 CPU, the experience with Linux distributions on ARM-based devices has been inconsistent which might due to the previous focus on supporting a server-based environment on ARM. It is also disappointing to learn that many distributions lack ARM versions, and when they do, compatibility with them in a desktop environment varies.

Thankfully, distributions like Fedora Linux offer ISOs tailored towards aarch64 devices which are compatible with Apple’s CPUs. However, my experience with Fedora Linux on ARM has been inconsistent, with errors during installation and a lack of some ARM-compatible software - for example, Google Chrome or Microsoft Edge, which technically has an aarch64 version compiled for macOS, does not provide one for Linux on ARM.

There are other distributions like Debian or the community-based ARM port of Arch Linux offer versions that will work, they offer some drawbacks, in the case of Debian you can easily cause issues with the operating system if you start installing software that was geared towards Ubuntu’s variation of Debian. I am mildly interested in Arch Linux mainly because of how highly respected it is by members of the Linux community and a recent experience with trying to reset the passwords on old Linux VMs - the process was incredibly simple thanks to Chris Titus Tech.

Ubuntu 12.04 on a ARM
device

Although I am interested in trying Arch Linux, I usually tend to rely on Ubuntu as it is the Linux distribution I am most comfortable and familiar with. Oddly, while Ubuntu has an ARM-compatible version for servers and daily-generated images of Ubuntu Desktop for aarch64, they have not officially released an Ubuntu Desktop for ARM since Apple launched its Apple Silicon Macs in 2020. This does complicate matters as it leaves users with the only option of running Ubuntu in a virtual machine on an Apple Silicon Mac by installing the server version and then installing a window environment on top of the server.

Recently, I’ve developed an interest in pursuing Red Hat Enterprise Linux1 (RHEL) System Administrator certification. I considered using Parallels, my preferred virtualization software on Mac, to run RHEL. However, I encountered issues, ranging from virtual machines booting to a black screen to multiple installation errors. To resolve these issues, I searched for solutions online and came across The Unofficial Fusion 13 for Apple Silicon Companion guide on VMware’s forums. The guide not only helped me install RHEL but also provided valuable information on running Ubuntu in a virtual machine on an Apple Silicon Mac, despite being primarily aimed at VMware Fusion users.

I am incredibly appreciative of the efforts by the author of the guide Technogeezer who wrote the 50+ page on the various different Linux distributions and how to virtualize them.

In this particular guide the author also indicates that with the latest release of Ubuntu 23.10 that Canonical has released a version of Ubuntu for ARM. There is a bit of a catch with this version at it is developed specifically for the Lenovo X13s, an ARM-based laptop that uses a Qualcomm-developed CPU and requires a minor adjustment during the installation process which I’ve added to the bottom of this post.

The main steps that were provided for Ubuntu Linux are below:

Install the full desktop environment, you can also install other environments such as KDE Plasma 5, simply replace ubuntu-desktop with kubuntu-desktop

    sudo apt install ubuntu-desktop

If you don’t want to install the entire default desktop, which will include games and productivity software, you can also install the minimal, basic version of the desktop with the following command:

If you are running Ubuntu 23.10 or later, you can install a minimal set of Ubuntu Desktop packages using the following command:

    sudo apt install ubuntu-desktop-minimal

There is an additional tool that can be installed, which might already be present on your device:

    sudo apt install open-vm-tools-desktop

There might be issues with the snap store and if you are running an pre-23.04 you will need to install the snap-store with the following command:

    sudo snap install snap-store

If you are running Ubuntu 23.10, there is a new version the software store that can be install with the following command:

    sudo snap install snap-store --channel=latest/stable/ubuntu-23.10

During my initial install there were some issues I encountered after running this command and as such I ignored using this command when installing Ubuntu in this manner. As the server version of Ubuntu uses a different mechanism for networking you will need to disable the server version:

    sudo systemctl disable systemd-networkd.service
    sudo systemctl mask systemd-networkd.service
    sudo systemctl stop systemd-networkd.service

It would be recommended that the settings used for networking should be backed up, you might need to use elevated privileges to copy the file:

Save a copy of the yam1 file found inside the etc/netplan directory.

    sudo cp /etc/netplan/\*.yaml \~/Documents

With the current configuration, in the .yaml file, you can either replace its contents or create a new file, either way you will need to enter the commands below:

**cd /etc/netplan sudo nano 00-installer-config.yaml**

Replace the entire contents of the .yaml file with the text below:

    network:
        version: 2
        renderer NetworkManager

Please note that indentation matters for .yaml files, the version and renderer tags need to start below the ‘o’ in network.

Setup the system to use Network Manager:

    sudo netplan generate
    sudo systemctl unmask NetworkManager 
    sudo systemctl enable NetworkManager 
    sudo systemctl start NetworkManager

Update the system’s configuration.

    sudo update-initramfs -u -k all

Reboot the virtual machine

sudo systemctl reboot

If you follow these steps you should be able to run a perfectly normal Ubuntu Desktop for ARM that is stable, unlike the daily images that are released. The only issue that I have yet to resolve is how to get rid of all the cruft left behind because the version of Ubuntu installed is a server version.

Installation using Ubuntu 23.10 for Lenovo X13s: When you boot off the ISO you will need to highlight Try or Install Ubuntu and then press the ‘E’ key on your keyboard. This will bring up an edit screen from which you will need to removing the following:

  • Text from clk_ignore_unused up to, but not including the ‘— quiet splash’ portion.
  • The entire line starting with devicetree

Once you have removed this text you can then press CTRL + X to continue the install as though it was no different from Ubuntu for x64.


  1. I am aware of the controversy from earlier this year with regards to Red Hat withholding certain updates from being shared with the general open source community and how it affects other Linux distributions which are based on RHEL, such as Alma Linux and Rocky Linux. ↩︎