Otto keeps your desktop in the standard places. It reads applications, icon
themes, file associations, the trash and the thumbnail cache from where the
freedesktop.org (XDG) specifications put them, and it serves the shared
Wayland protocols, so the apps, themes and tools you already use keep working
and what Otto writes stays readable by the rest of the system. The tables
below list what is supported today; if something isn’t listed, assume it
isn’t there yet.
Developers looking for where each one lives in the source want
XDG specifications,
Wayland protocols and
Text rendering.
How we see the Linux desktop
Otto tries to make the everyday easy: things a click away, in one place, with
sensible defaults. That ease sits on top of the system, not in place of it.
Otto keeps what it manages in the places the freedesktop.org (XDG) standards
name, and reads what other software puts there.
- Nothing to relearn. Otto reads your default applications from
mimeapps.list, starts what is in ~/.config/autostart, and picks up icon
themes from ~/.icons. What you know about configuring Linux, and the
dotfiles you keep, still applies. - Any part can be swapped. The trash is the shared trash, so another file
manager drops in. Notifications, the tray, the desktop portal and layer shell
are the standard interfaces, so another notification daemon, bar or launcher
can take over from Otto’s. Otto’s own parts serve apps that have never heard
of it.
We will not trade portability for convenience. Where Otto falls short, the gap
is listed under What is not supported.
Desktop specifications
| Standard | What it means in Otto | More |
|---|
| Base Directory | Config, data, cache and state go under the XDG_* directories; Otto’s log is ~/.local/state/otto/otto.log | Configuration |
| Desktop Entry | Every installed .desktop app shows in the Launcher and can be pinned; an entry’s Actions= are its right-click menu in the Dock | Launcher, Dock |
MIME applications (mimeapps.list) | Default apps are read from it, the same file xdg-mime default writes. Files’ Open With… → Always use this app writes the choice back there | Files |
| Shared MIME-info | File types and their icons match the rest of the system. Install shared-mime-info if types look generic | Files |
| Icon Theme | Any theme in ~/.icons, ~/.local/share/icons or /usr/share/icons | Theming |
| Cursor themes (Xcursor) | Any installed cursor theme and size | Theming |
| Sound Theme | System sounds come from the selected sound theme | Audio |
| Trash | The shared trash, on your home and on other drives: what another file manager deleted can be put back from Otto, and the other way round | Files |
| Thumbnails | Thumbnails another file manager already made under ~/.cache/thumbnails load instantly. Otto reads the cache; it does not add to it | Files |
| XDG user directories | Desktop, Downloads, Documents… in the Files sidebar, and the screenshot folder, are where user-dirs.dirs says | Files |
| Autostart | Entries in /etc/xdg/autostart and ~/.config/autostart start with the session; can be turned off | Autostart |
| Notifications | Otto is the notification server: notify-send and every app’s notifications work, with actions and icons | Dynamic Island |
| Desktop portal | Otto’s own backend: screen sharing, screenshots, file dialogs, appearance settings and permission prompts, for browsers, OBS and Flatpak apps | Screen Sharing |
| StatusNotifierItem | Tray icons in the top bar, with their menus (DBusMenu) | Top Bar |
Global menu (com.canonical.AppMenu) | Apps that export their menu bar show it in the top bar | Top Bar |
| MPRIS | Any media player shows in the Dynamic Island and follows the media keys | Audio |
| AT-SPI | Screen readers read Otto’s chrome and Otto’s apps | Accessibility |
| Fontconfig | Font names, aliases and your fonts.conf rendering rules; see Fonts and text | Theming |
System services Otto uses
| Service | What for |
|---|
| systemd-logind | Session, lock on suspend, power actions |
| UPower, power-profiles-daemon | Battery and power mode in the top bar |
| polkit | Otto is the authentication agent: password prompts for admin actions |
| AccountsService | Your name and picture, changing your password in Settings |
| PipeWire | Screen sharing streams, audio volume and the audio visualiser |
| greetd | The login screen |
| LocalSearch (Tracker) | File search |
Fonts and text
Fonts go through fontconfig, like every other Linux application: the font you
pick is matched against what is installed, and your fonts.conf rules for
hinting and antialiasing apply to Otto’s own text. Choosing the font is in
Theming; subpixel text, per monitor, is in
Display. Text inside other programs is drawn
by those programs; Otto tells them its font and settings so they match:
| Apps | Get Otto’s font and settings from | Follows your hint style? |
|---|
| Otto and Otto’s apps | Otto’s configuration and fontconfig | yes |
| GTK 4 | the desktop portal | yes |
| GTK 3 | GNOME’s settings store, which Otto fills at login | with grayscale text; with subpixel text every style looks alike |
| Chromium, Electron | GNOME’s settings store and fontconfig | yes |
| Qt | Qt’s GTK theme, which Otto selects unless QT_QPA_PLATFORMTHEME is set | only on an unscaled display (Qt’s own rule) |
| X11 apps (Xwayland) | XSETTINGS | yes; Qt apps only at 96 DPI |
Wayland protocols
These are the protocols applications use to talk to Otto. “Trusted apps”
means not offered to sandboxed apps (Flatpak), which cannot list windows,
read the screen or type for you. The exact version of each protocol, and the
code that serves it, is in the developer guide’s
Wayland protocols.
Core
| Protocol | What it is for | Notes |
|---|
wl_compositor, wl_subcompositor | Surfaces and their sub-parts: every Wayland app | |
wl_shm | Apps drawing on the CPU (shared-memory buffers) | |
wl_seat | Keyboard, mouse and touchpad input | |
wl_drm | GPU buffers for older Mesa and EGL apps | |
Windows
| Protocol | What it is for | Notes |
|---|
xdg-shell | Windows and popups: every Wayland app | |
xdg-decoration, KDE server decoration | Lets an app ask Otto to draw its titlebar, or draw its own | |
xdg-activation | An app handing focus to another (clicking a link opens the browser in front) | Only right after a click or key press |
xdg-foreign | A dialog attaching to another app’s window (portal file dialogs) | |
xdg-dialog | Marking a dialog modal | Modal dialogs float when tiling |
xwayland-shell, Xwayland keyboard grab | X11 apps | |
| KDE appmenu | Qt and KDE apps’ menus in the top bar | See Top Bar |
ext-background-effect | Blur behind translucent terminals and panels | The whole window is frosted, not a region |
Display and scaling
| Protocol | What it is for | Notes |
|---|
wl_output, xdg-output | Monitor size, position, scale and subpixel order | |
fractional-scale | Sharp apps at scales like 1.25 or 1.5 | |
viewporter | Apps cropping and scaling their own buffers | |
presentation-time | Accurate frame timing for video and games | Login session only |
linux-dmabuf | GPU buffers, no copies | |
linux-drm-syncobj | Explicit GPU sync, which some drivers need for smooth frames | Login session, when the GPU supports it |
drm-lease | VR headsets taking over a display | Login session only |
cursor-shape | Apps naming a cursor instead of drawing it, so it matches your theme | |
wlr-gamma-control | Colour temperature tools (gammastep, wlsunset) | Trusted apps, login session only. See Night Shift |
| Protocol | What it is for | Notes |
|---|
pointer-gestures | Touchpad swipe, pinch and hold in apps | Login session only. See Gestures |
relative-pointer, pointer-constraints | Mouse look in games, locking the pointer | Relative motion in the login session only |
tablet | Drawing tablets and pens | |
keyboard-shortcuts-inhibit | Remote desktop and VM apps getting every key | Trusted apps; lock and VT switch still work |
text-input-v3, input-method-v2 | Input methods (IME) and dictation | Input methods are trusted apps |
virtual-keyboard, wlr-virtual-pointer | Tools that type or move the pointer (emoji picker, remote desktop) | Trusted apps |
Clipboard
| Protocol | What it is for | Notes |
|---|
wl_data_device | Copy, paste, drag and drop | |
primary-selection | Middle-click paste | |
wlr-data-control, ext-data-control | Clipboard managers and wl-copy/wl-paste | Trusted apps. See Clipboard |
Panels, taskbars and capture
| Protocol | What it is for | Notes |
|---|
wlr-layer-shell | Bars, docks, launchers, wallpapers, widgets | Trusted apps. See Desktop Widgets |
ext-foreign-toplevel-list | Listing open windows | Trusted apps |
wlr-foreign-toplevel-management | Taskbars that activate, minimise, maximise or close windows | Trusted apps |
wlr-screencopy | Screenshot and recording tools (grim, wf-recorder, wl-mirror) | Trusted apps. Screen sharing goes through the portal |
Session and security
| Protocol | What it is for | Notes |
|---|
ext-session-lock | The lock screen | Only Otto’s own Lock Screen: swaylock and similar cannot lock |
idle-inhibit | Video players keeping the screen awake | |
security-context | Flatpak marking its apps as sandboxed | |
Otto’s own
| Protocol | What it is for |
|---|
otto-surface-style | Otto’s apps shaping and animating their windows (corners, shadows, blur) |
otto-dock | Apps adding items to the Dock |
otto-canvas | Items on the Side Canvas |
otto-text-cursor | Pickers (emoji) opening beside the text cursor |
What is not supported
| Missing | What to do instead |
|---|
Recent files (recently-used.xbel) | Files’ Recent place lists recently changed files in your folders, not what other apps opened |
| Writing thumbnails to the shared cache | Thumbnails other file managers made are used; Otto’s own are not saved for others |
| Startup notification (busy cursor while an app starts) | None |
org.freedesktop.FileManager1 (“Show in folder” from other apps) | Open the folder in Files |
| Text scaling | Text follows the display scale; scale the display to make text bigger |
| Pushing font changes live to GTK 3 and Qt apps | Restart the app after changing fonts |
ext-idle-notify (idle daemons like swayidle) | Use Otto’s Power Management |
wlr-output-management (wlr-randr, kanshi) | Set displays in Settings or the display profiles |
ext-image-copy-capture | Use wlr-screencopy tools or the portal |
Other newer protocols (tearing-control, color-management, xdg-system-bell, xdg-toplevel-icon, …) | Apps fall back to their default behaviour. The full list is in Wayland protocols |