Linux apps, through AT-SPI, the accessibility tree Orca reads: native apps (GTK 3, GTK 4), web views (WebKitGTK: Tauri, Wails), Electron, Qt, Java and Flutter, as they ship, under X11 or Wayland.
Axx runs desktops of its own, desktops at once (1 by default): each a virtual screen (Xvfb), with its own session bus and accessibility bus for each scenario, and its own view of the file system, in which an app’s home is at the same path in every desktop. Nothing shows on your screen, and a feature never names a desktop: a scenario takes one, as a mobile scenario takes a device. It needs Xvfb, dbus-daemon and at-spi2-core (axx doctor checks them); more than one desktop needs user and mount namespaces, which a host that forbids them does not give, and then desktop scenarios run one at a time.
On Wayland (display: wayland), each scenario’s desktop is a headless GNOME Shell of its own, the desktop most Linux users run, on the scenario’s session bus. Apps start in its GNOME session and pick Wayland or X11 as they do on a GNOME desktop: GTK, Qt 6 and Electron Wayland, Java and Qt 5 its Xwayland (Debian’s and Ubuntu’s Qt 5 is read on X11 only: with qtwayland5 installed, its registration’s env.QT_QPA_PLATFORM is xcb). The desktop portals answer them as GNOME’s do. GNOME Shell’s remote desktop takes the pointer’s and the keyboard’s events, and an extension of Axx’s, run from the session’s folder (nothing is installed), puts each window’s frame at the screen’s corner, shows no top bar, overview or notification, and takes screenshots. It needs gnome-shell and pipewire (and xwayland, for X11 apps), and a system bus: on a machine with systemd, its logind; in a container without logind, no /run/systemd/seats.
Each scenario has a desktop, and a clean app. Before the app starts, its home is emptied, and it starts with HOME and the XDG folders in it; the scenario’s session bus runs with them too, so the app’s settings (dconf), keyring and portals start empty. Axx switches on what toolkits need to be read: the assistive technology announcement, the accessibility bus’s address on the screen (Qt 5), and java-atk-wrapper for Java apps where it is installed. Chromium (Electron, CEF) builds its tree from the environment, but leaves out what shows: an Electron app’s registration starts it with --force-renderer-accessibility in its args. An app’s ./ files are its home’s .local/share.
Add it to a project with axx pack add desktop-linux; it builds on desktop-core, which comes with it.
Settings
Section titled “Settings”In axx.yaml, under packs.desktop-linux:
| Setting | Takes | Values | Default |
|---|---|---|---|
desktops |
How many Linux desktops run at once: desktop scenarios beyond them wait for one. More than one needs user and mount namespaces. | a number, 1 to 32 | 1 |
display |
What Axx’s desktops run: x11, a virtual screen (Xvfb); or wayland, a headless GNOME Shell for each scenario. | x11, wayland |
x11 |
desktop-linux.app
Section titled “desktop-linux.app”Given the {word} linux app with the following properties: | property | value |The table may start with the row naming its columns, as above, or go straight to its rows.
Register a Linux app. The app starts when a step launches it. On another OS, the registration does nothing, so a feature registers the app once for each OS it runs on.
| Parameter | Takes | For example |
|---|---|---|
{word} |
one word, with no spaces | parcels, PX-4101 |
| Property | Takes | Default |
|---|---|---|
app |
the app: an executable of the project (an AppImage too), or a command on PATH | required |
args |
the arguments it starts with, a quoted one with spaces; a file of the project is relative to axx.yaml | |
env.<name> |
an environment variable it starts with, like env.PARCELS_API |
|
locale |
its language and region, like de-DE |
en-US |
timezone |
its time zone, like Europe/Berlin |
UTC |
owner |
system for an app the desktop runs, or starts when another app asks it to, like GNOME Files (nautilus): the scenario reads it as it runs, and never resets, launches or stops it |
Example:
Given the depot linux app with the following properties: | app | ../depot-desk/tauri/src-tauri/target/release/depot-desk |Since 0.2.0.