Skip to content

Latest commit

 

History

History
208 lines (160 loc) · 7.15 KB

File metadata and controls

208 lines (160 loc) · 7.15 KB

🖥️ Desktop Environment Support

Tested on major Linux distributions (Fedora, Ubuntu, Arch Linux) and tiling window managers (Hyprland, Sway)

If you encounter issues with your desktop environment, feel free to open an issue.

For system tray on GNOME - to have full-featured UX with menu:

# Ubuntu/Debian:
sudo apt install gnome-shell-extension-appindicator
# Fedora:
sudo dnf install gnome-shell-extension-appindicator
# Arch Linux:
sudo pacman -S gnome-shell-extension-appindicator

KDE and other DEs have built-in system tray support, no need for appindicator

Text output status (outputter, for automatic text insertion into active window)

Current Implementation: Smart Auto-Selection

Desktop Environment Primary Tool Fallback Status
🟢 GNOME+Wayland RemoteDesktop portal → ydotool clipboard ✅ Auto-detected
🟢 KDE+Wayland RemoteDesktop portal → wtype clipboard ✅ Auto-detected
🟢 Sway/Other Wayland wtype → ydotool clipboard ✅ Auto-detected
🟢 X11 (all DEs) xdotool clipboard ✅ Works out-of-box

GNOME/KDE use the RemoteDesktop portal when available (one-time permission dialog), with a tool/clipboard fallback.

Other Wayland compositors (Sway, Hyprland, etc.) use wtype out of the box.

Flatpak

Inside the sandbox wtype cannot work: the Wayland security-context blocks its virtual-keyboard protocol on wlroots/Hyprland, and GNOME/KDE never exposed it. Dabri therefore selects automatically:

Compositor Active-window typing Setup
GNOME / KDE RemoteDesktop portal None — one-time permission dialog
Hyprland / wlroots / Sway ydotool (uinput) Opt-in (see below)

The portal path is provided by go-wlportal and needs no extra permissions.

Note: the portal types through the active keyboard layout, so it can't produce characters outside it (e.g. any non-ASCII text on a Latin/US layout). In that case Dabri switches to clipboard mode and notifies you — paste with Ctrl+V.

For wlroots/Hyprland auto-typing, grant uinput access once (otherwise Dabri falls back to clipboard):

# 1) Allow the sandbox to see /dev/uinput
flatpak override --user --device=all io.github.ashbuk.dabri
# 2) Allow non-root access to /dev/uinput on the host (if not already granted)
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules
sudo udevadm control --reload && sudo udevadm trigger
sudo usermod -a -G input $USER   # re-login required

Dabri starts its own ydotoold inside the sandbox when uinput is accessible.

Notifications go through the org.freedesktop.portal.Notification portal (no extra permissions). It works wherever a Notification portal backend is present, which most desktops ship by default. If yours doesn't, install one (e.g. xdg-desktop-portal-gtk) or use the native package or AppImage instead.

Direct typing on Wayland - Tool options (native)

The application automatically selects the best available typing tool:

  • wtype: Works without setup on non-GNOME Wayland compositors (KDE, Sway, etc.). Automatically selected if available.
  • ydotool: Required for GNOME/Wayland, also works as fallback on other Wayland compositors. Requires setup (see below).

ydotool setup (recommended user-unit)

  1. Install ydotool:
sudo dnf install ydotool   # Fedora
sudo apt install ydotool   # Ubuntu/Debian
  1. Allow access to /dev/uinput for non-root:
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-uinput.rules
sudo udevadm control --reload && sudo udevadm trigger
sudo usermod -a -G input $USER
# Re-login required for group change
  1. Run ydotool as user-unit service (no root):
mkdir -p ~/.config/systemd/user
tee ~/.config/systemd/user/ydotool.service >/dev/null <<'EOF'
[Unit]
Description=ydotool user daemon

[Service]
ExecStart=/usr/bin/ydotoold --socket-perm=0660
Restart=always

[Install]
WantedBy=default.target
EOF
  1. Restart and run the service
systemctl --user daemon-reload
systemctl --user enable --now ydotool

This setup uses user service: safer and no root privileges needed

For non-GNOME Wayland compositors, wtype work without any setup - the app will automatically try it first

X11 works out-of-the-box without additional setups

Clipboard fallback

  • Works on all desktop environments
  • Requires manual Ctrl+V after speech recognition
  • No additional setup needed

⌨️ Hotkeys


Built-in provider (app listens for keypresses)

Dabri handles hotkeys internally. Configure the key in ~/.config/dabri/config.yaml:

hotkeys:
  start_recording: "ctrl+shift+r"
  stop_recording: "ctrl+shift+r"

Restart Dabri after saving.

Default provider: D-Bus GlobalShortcuts portal — works out of the box on GNOME and KDE, no setup required.

Hyprland: The portal registers shortcuts but Hyprland requires an explicit binding in hyprland.conf. Run hyprctl globalshortcuts while Dabri is running to see the registered IDs, then add:

bind = <mods>, <key>, global, <appid>:<shortcutid>

Optional: evdev provider

The classic direct input access approach. Use if:

  • Your WM/DE doesn't implement XDG GlobalShortcuts (i3, bspwm, openbox, etc.)
  • You want to rebind hotkeys from the Dabri tray menu directly
  • Portal behavior is inconsistent on your setup

Trade-off: requires access to all input devices (/dev/input/event*), not just keyboard.

Option A — udev rule (scoped to session user, recommended):

echo 'KERNEL=="event*", SUBSYSTEM=="input", ATTRS{capabilities/key}!="0", TAG+="uaccess"' \
  | sudo tee /etc/udev/rules.d/70-dabri-input.rules
sudo udevadm control --reload && sudo udevadm trigger

Option B — input group (broader access):

sudo usermod -a -G input $USER  # then logout/login

Then enable in ~/.config/dabri/config.yaml:

hotkeys:
  provider: evdev

CLI command delegated to DE/WM custom shortcut

Let your DE or WM handle the key — no provider needed, Dabri just receives the command.

  • GNOME: Settings → Keyboard → Keyboard Shortcuts → Custom Shortcuts → + → command: dabri toggle
  • KDE: System Settings → Shortcuts → Custom Shortcuts → + → command: dabri toggle
  • Tiling WMs (i3, sway, bspwm, etc.):
    bindsym $mod+r exec dabri toggle
    

Separate start/stop commands are also available: dabri start / dabri stop. See CLI Usage Guide.


Autostart on Login

If you want Dabri ready as soon as you log in (without launching app manually), add to your session startup:

GNOME / KDE / XFCE (XDG autostart)

mkdir -p ~/.config/autostart
cat > ~/.config/autostart/dabri.desktop << 'EOF'
[Desktop Entry]
Name=Dabri
Exec=dabri
Icon=io.github.ashbuk.dabri
Type=Application
Terminal=false
X-GNOME-Autostart-enabled=true
EOF

Hyprland

Add to ~/.config/hypr/hyprland.conf:

exec-once = dabri

Last updated: 2026-06-20