Skip to main content

Screen Readers

Available since version 25.08
Niri has basic support for screen readers (specifically, Orca) when running as a full desktop session. 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
  • Started as a plain /usr/bin/niri on a TTY

Implementation

Niri implements the org.freedesktop.a11y.KeyboardMonitor D-Bus interface for Orca to listen and grab keyboard keys, and exposes the main niri UI elements via AccessKit.

Announced Elements

Niri will announce the following UI elements through screen readers:

Workspace Switching

Announces workspace changes (e.g., “Workspace 2”)

Exit Dialog

Announces the exit confirmation dialog (Super+Shift+E)

Window Switcher

Announces selected window titles in Alt+Tab switcher (Since 25.11)

Screenshot UI

Announces when screenshot UI and overview are focused

Config Errors

Announces config parse errors when they occur

Hotkey List

Announces important hotkeys (Super+Shift+/)

Setting Up Orca

1

Verify Xwayland Integration

Make sure Xwayland works correctly, then run:
orca
2

Use Default Toggle Bind

The default config binds Super+Alt+S to toggle Orca, which is the standard key binding.
binds {
    Mod+Alt+S { spawn "orca"; }
}
3

Verify X11 Socket

Check that niri is listening on the X11 socket:
journalctl --user-unit=niri -b
You should see output like:
niri[2474]: 2025-08-29T04:07:40.700137Z  INFO niri: listening on X11 socket: :0

Current Limitations

The following limitations currently exist:
  • No layer-shell panel focus: There’s no bind to move focus to layer-shell panels. This feature requires consensus or prior art with LXQt/Xfce.
  • Screen requirement: You need a screen connected and enabled. Without a screen, niri won’t give focus to any window. Virtual monitors may be a better solution for accessibility purposes.
  • Hardware acceleration required: You need working EGL (hardware acceleration).
  • No screen curtain: Screen curtain functionality is not yet implemented.

Distribution Configuration

If you’re shipping niri and would like to make it work better for screen readers out of the box, consider these changes:
Change the default terminal from Alacritty to one that supports screen readers:
binds {
    Mod+T { spawn "gnome-console"; }
}
Use application launcher and screen locker that support screen readers:Most GTK-based applications should work well.
Add a spawn-at-startup command that plays a sound to indicate niri has finished loading:
spawn-at-startup "paplay" "/usr/share/sounds/freedesktop/stereo/complete.oga"
Automatically run Orca at niri startup:
spawn-at-startup "orca"

Desktop Zoom

There’s no built-in zoom yet, but you can use third-party utilities:

wooz

A screen magnification tool for Wayland compositors

Usage Example

# Install wooz
# Check your distribution's package manager

# Run wooz
wooz

Demo

Watch this demo video with sound on to see screen reader support in action:

Build docs developers (and LLMs) love