Elyra
Elyra The coding agent eTerm The terminal that knows where each command ends Starf An activity monitor for Apple silicon that never invents a number etrans An SSH and SFTP client for macOS Elyra VM Virtual machines for macOS, Linux and Windows on your Mac Litr A small, native web browser for macOS Notr A notebook for macOS e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Refr Local-first PDF workspace for macOS Elyra Workspace A desktop workspace for coding agents Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Elyra
Linux guests

Linux guests

Linux VMs run on Apple's Virtualization framework with virtio devices, which current distributions support out of the box. Installer ISOs must be for ARM64 (aarch64).

Installing from the catalog

A VM made from Ubuntu 26.04 or Fedora 44 in the + menu gets its installer when it first starts. Its window, and its row in the library, show each step:

  1. Looking up: the newest release of that version for ARM64, on Ubuntu's or Fedora's own server (Ubuntu 26.04.1 rather than 26.04, for one).
  2. Downloading into ~/Library/Caches/Elyra VM/Installers/ (Ubuntu Desktop is about 4 GB, Fedora Workstation about 2.7 GB). Like a macOS download, it carries on after a dropped connection or a stop. Every VM after the first uses the same copy.
  3. Checking it against the SHA-256 the distribution publishes. A download that doesn't match is thrown away, and the VM says so.
  4. Booting it: the ISO becomes the VM's installer, and the summary shows the release, such as Ubuntu 26.04.1 LTS.

Then install the system from the live session as on a PC.

Ready to use

Six systems in the + menu need no installing: each is the distribution's own cloud image for ARM64, an installed system, set up at its first boot; three of them get a desktop too (with a desktop).

In the menu Downloads, once for every VM Checked with
Ubuntu Server 26.04 (ready to use) Ubuntu's server cloud image, about 950 MB SHA-256
Fedora Cloud 44 (ready to use) Fedora Cloud Base Generic, about 530 MB SHA-256
Debian 13 (ready to use) Debian's generic cloud image, about 430 MB SHA-512

At its first start the VM downloads the image, checks it against the distribution's published checksum, turns it into the VM's disk, and boots it. cloud-init, in each image, sets it up at that first boot from a small volume Elyra VM writes into the VM's folder (cloud-init.iso):

  • the host name, from the VM's name: Web Server becomes web-server
  • your user: your Mac's user name, an administrator without a password (in sudo, or wheel in Fedora), with the public SSH keys in your Mac's ~/.ssh and a password of its own, which the VM's settings show (Login)
  • SSH, with passwords allowed
  • the shared folders mounted at /mnt/mac
  • Elyra VM Tools, so elyravm exec works at once

About 20 seconds after it starts, the VM is ready:

$ elyravm start "web server" --hidden
$ elyravm exec "web server" -- cloud-init status
status: done
$ elyravm forward "web server" 2222:22
$ ssh -p 2222 localhost

The disk grows to the VM's disk size on the first boot. These three have no desktop: for one, choose a desktop below, or install one yourself (sudo apt install ubuntu-desktop-minimal in Ubuntu, for one). Fedora keeps SELinux on, as it ships, and Elyra VM Tools runs under it.

With a desktop

In the menu The desktop
Ubuntu 26.04 Desktop (ready to use) Ubuntu's own (ubuntu-desktop-minimal), with Firefox
Fedora 44 Desktop (ready to use) GNOME (@gnome-desktop), with Firefox
Debian 13 Desktop (ready to use) GNOME (gnome-core), with Firefox ESR

They download the same cloud images as the servers above, and are set up as they are; then, at the end of the first boot, cloud-init installs the desktop from the distribution's servers (some 4 to 8 minutes, as your connection allows: elyravm exec <vm> -- cloud-init status says done when it is), logs you in by itself, and the desktop comes up in the window. With 3D graphics on, as they are by default on macOS 27, they draw with your Mac's GPU from the first boot: Elyra VM Tools, which carries the keyboard and pointer, comes up before the desktop is installed.

The image is kept in ~/Library/Caches/Elyra VM/Installers/ under its name and the start of its checksum, as the distributions keep one name for the newest image of a release: a newer one is downloaded beside it, not taken for a damaged copy.

After installing

Apple's Virtualization framework can't restart a Linux guest: a restart stops the VM. So when a Linux VM stops by itself while its installer is in, and its disk now holds a system (a partition table), Elyra VM takes the installer out and starts the VM again into the installed system, just as the restart at the end of an install would. The window closes and opens again on the way.

To take an installer out by hand, choose Eject Installer in the VM's … menu while the VM is stopped. A VM made from an ISO of your own is handled the same way.

What the guest sees

Device Linux driver Notes
Disk virtio-blk (/dev/vda) the VM's disk.img
Installer USB mass storage (/dev/sda) while installer is set
cloud-init volume virtio-blk (/dev/vdb), read-only systems ready to use
Elyra VM Tools virtio socket (vsock), port 1024 Elyra VM Tools
Network virtio-net NAT behind your Mac
Display virtio-gpu follows the window; with 3D graphics, Elyra VM's own, drawing with your Mac's GPU
Keyboard, pointer USB the pointer is absolute: no capture, no lag
Sound virtio-snd (Linux 5.13+) output; input only if the microphone is allowed
Shared folders virtiofs tag elyravm
Clipboard virtio console port for the SPICE agent needs spice-vdagent
Serial console virtio console (/dev/hvc0) written to console.log
Entropy, memory balloon virtio-rng, virtio-balloon

The VM boots with EFI. Its EFI variables, where the installed system keeps its boot entry, are kept in the VM's folder (nvram), so after installing, the VM boots from its disk.

Network

With Shared networking the VM gets a private address from your Mac, usually in 192.168.64.0/24. The VM reaches the internet through the Mac, and the Mac reaches the VM at that address, for example ssh user@192.168.64.5. Find it in the guest with ip addr.

The VM keeps its MAC address, so the address usually stays the same from start to start. The VM's settings show it, and elyravm forwards <vm> prints it. Elyra VM finds it in your Mac's DHCP leases by the VM's MAC address, or from Elyra VM Tools when it runs in the VM. A guest that asks for its address by something else than its MAC address, as Ubuntu Server's systemd-networkd does by itself, can't be found without Elyra VM Tools (the systems ready to use are set up to ask by MAC address). To reach the VM through a port on your Mac instead, forward one (VM settings).

Shared folders

Folders listed in the VM's shared_folders (VM settings) are shared as one virtiofs filesystem tagged elyravm, with each folder as a directory in it, named after the folder (or its name).

sudo mkdir -p /mnt/mac
sudo mount -t virtiofs elyravm /mnt/mac
ls /mnt/mac            # Projects  Downloads

To mount it at every boot, add to /etc/fstab:

elyravm  /mnt/mac  virtiofs  rw,nofail  0  0

Folders marked read_only can't be written from the guest. The share also holds Elyra VM Tools, read-only, with its installer. With Elyra VM Tools running, the shared folders are mounted at /mnt/mac by themselves.

The clipboard

Copy and paste between the Mac and the guest goes through the SPICE agent. Install it in the guest and log in to a graphical session:

sudo apt install spice-vdagent      # Ubuntu, Debian
sudo dnf install spice-vdagent      # Fedora

Turn it off for a VM with "clipboard": false in its permissions.

The display

The guest's screen follows the size of the VM's window. Desktop environments pick up the new size by themselves; a text console keeps its size.

The serial console

Everything the guest writes to /dev/hvc0 lands in console.log in the VM's folder, which is emptied at each start. It is useful when the screen stays black, and for agents that read the guest's output. To see the kernel and a login there, boot with console=hvc0 on the kernel command line and run a getty on hvc0.

Shutting down

Shut Down asks Elyra VM Tools to shut the guest down, when it runs there, and also sends an ACPI power button press. Systems with systemd or acpid shut down cleanly on the button too; minimal systems without either, and without Elyra VM Tools, ignore it. Use poweroff in the guest, or Force Stop.