8
Accessibility
github-actions[bot] edited this page 2025-09-03 10:39:13 +00:00

Screen readers

Since: 25.08

Niri has basic support for screen readers (specifically, Orca) when running as a full desktop session, i.e. you need to start niri through a display manager or through niri-session. To avoid conflicts with an already running compositor, niri won't expose accessibility interfaces when started as a nested window, or as a plain /usr/bin/niri on a TTY.

We implement the org.freedesktop.a11y.KeyboardMonitor D-Bus interface for Orca to listen and grab keyboard keys, and we expose the main niri UI elements via AccessKit. Specifically, niri will announce:

  • workspace switching, for example it'll say "Workspace 2" when you switch to the second workspace;
  • the exit confirmation dialog (appears on SuperShiftE by default);
  • entering the screenshot UI and the overview (niri will say when these are focused, nothing else for now);
  • whenever a config parse error occurs;
  • the important hotkeys list (for now, as one big announcement without tab navigation; appears on SuperShift/ by default).

Here's a demo video, watch with sound on.

Make sure Xwayland works, then run orca. The default config binds SuperAltS to toggle Orca, which is the standard key binding.

Note that there are some limitations:

  • We don't have an Alt-Tab window switcher yet; it's in the works.
  • We don't have a bind to move focus to layer-shell panels. This is not hard to add, but it would be good to have some consensus or prior art with LXQt/Xfce on how exactly this should work.
  • You need to have a screen connected and enabled. Without a screen, niri won't give focus any window. This makes sense for sighted users, and I'm not entirely sure what makes the most sense for accessibility purposes (maybe, it'd be better solved with virtual monitors).
  • You need working EGL (hardware acceleration).
  • We don't have screen curtain functionality yet.

If you're shipping niri and would like to make it work better for screen readers out of the box, consider the following changes to the default niri config:

  • Change the default terminal from Alacritty to one that supports screen readers. For example, GNOME Console or GNOME Terminal should work well.
  • Change the default application launcher and screen locker to ones that support screen readers. For example, xfce4-appfinder is an accessible launcher. Suggestions welcome! Likely, something GTK-based will work fine.
  • Add some spawn-at-startup command that plays a sound which will indicate to users that niri has finished loading.
  • Add spawn-at-startup "orca" to run Orca automatically at niri startup.

Desktop zoom

There's no built-in zoom yet, but you can use third-party utilities like wooz.