← Otto User GuideGetting Started

Installing Otto, launching it on your hardware, and the handful of things worth checking on first run.

Installing

Pre-built packages are published on the GitHub Releases page.

Debian / Ubuntu

sudo dpkg -i otto_*.deb
sudo apt-get install -f   # pull in any missing dependencies

Fedora / RHEL

sudo dnf install otto-*.rpm

Arch Linux

curl -O https://raw.githubusercontent.com/nongio/otto/main/PKGBUILD
makepkg -si

If you already downloaded the release tarball, drop the PKGBUILD next to it and makepkg will use it without re-downloading.

Building from source

git clone https://github.com/nongio/otto
cd otto
cargo build --release

You need libwayland, libxkbcommon, libudev, libinput, libgbm and libseat. Add xwayland if you want to run X11 applications. Minimum supported Rust version is 1.87.0 for the compositor itself; building the whole workspace (otto-rdp pulls in GStreamer) needs 1.96.0.

What gets installed

BinaryRole
ottoThe compositor itself
otto-barTop bar — clock, tray, application menus
otto-islandsDynamic island — notifications, activities, dialogs
otto-lockScreen locker
otto-greeterLogin screen client for greetd
otto-rdpRemote desktop bridge
xdg-desktop-portal-ottoScreen sharing portal backend

Packages also install /etc/otto/config.toml (a copy of otto_config.example.toml), a wayland-sessions entry so Otto appears in your display manager, the portal service files, and — on Arch and Fedora — the PAM service for otto-lock.

Launching

After installing, “Otto” appears in the session list of GDM, SDDM, LightDM and friends. Pick it and log in.

To start it by hand:

otto                # auto-detects the backend

Otto chooses --winit when it finds an existing Wayland or X11 session (it runs as a window, which is what you want for development), and --tty-udev when started from a bare TTY.

Backends

FlagUse
--tty-udevBare metal: DRM/KMS + libinput. The real session. Needs logind/seatd, or root.
--winitRuns as a window inside another Wayland or X11 session. Best for trying Otto out.
--x11Runs as an X11 client. Basic and not actively maintained.
--headlessNo display output; used by the test harness.

Other flags

FlagEffect
--loginRun as a greeter host — see Login Greeter
--probePrint the connectors, resolutions and refresh rates Otto can see, then exit
--systemd-notifySend READY=1 and activate graphical-session.target (for Type=notify user units)
--version, --helpAs expected

--login and --systemd-notify are orthogonal to the backend flag and can be combined with it.

Use --probe first if you are writing display profiles — it tells you the exact connector names (eDP-1, HDMI-A-1, …) and modes to put in your config.

First-run checklist

Otto ships lean: the top bar and the dynamic island are separate programs, and nothing is started for you unless you ask. A useful starting configuration in ~/.config/otto/config.toml:

[[exec_once]]
cmd = "otto-bar"

[[exec_once]]
cmd = "otto-islands"

See Autostart for XDG autostart and systemd integration.

Then, in rough order of how much you will miss them:

  1. Keyboard shortcuts — the shipped /etc/otto/config.toml defines them. If you write your own config from scratch, Otto starts with no bindings at all. See Keyboard Shortcuts.
  2. Screen sharing — needs xdg-desktop-portal installed and a portals.conf pointing at Otto. See Screen Sharing.
  3. Screen locking — needs /etc/pam.d/otto-lock. Debian and Ubuntu users must install it manually. See Lock Screen.
  4. Lid and power button — Otto handles these itself, which requires HandleLidSwitch=ignore and HandlePowerKey=ignore in logind.conf. See Power Management.
  5. Clipboard persistence — Wayland loses clipboard contents when the source app exits. See Clipboard.

Quitting

Logo+Q and Ctrl+Alt+Backspace always quit Otto. These two are wired into the compositor ahead of the config file and cannot be rebound or removed, so there is always a way out of a session whose config is broken.

Where to go next

Take the Desktop Tour to learn what everything on screen is, then Configuration to start making it yours.