Tiling compositors

Voice typing on Hyprland, sway and i3

Tiling setups are hand-built, so Vocalinux cannot assume the pieces a full desktop provides. This guide covers which text injection backend applies on each compositor, how to bind dictation to a key in your config, and the fallback that works when typing into other windows does not.

Support status

Compositor / WMStatusSessionNotes
swayGood supportWaylandWayland native, uses wtype
i3Good supportX11Uses xdotool
HyprlandExperimentalWaylandMay need wtype configuration

Status comes from the project's desktop compatibility table. For GNOME, KDE and the general Wayland picture, see voice dictation on Wayland.

Text injection options

Vocalinux picks a backend automatically. On Wayland, when IBus is not selected, it tries the RemoteDesktop portal first, then ydotool, then wtype, and finally xdotool for XWayland windows. sway and Hyprland are on its list of compositors that do not bridge IBus to native Wayland apps, so IBus is skipped there unless the ibus-wayland helper (IBus 1.5.32 and newer) is running.

Backend (config value)Where it appliesNeeds
IBus (ibus)Desktops that bridge IBus; on sway and Hyprland only with ibus-wayland runningIBus. On sway and Hyprland, Vocalinux skips IBus unless the ibus-wayland bridge is running
RemoteDesktop portal (portal)Wayland desktops whose portal implements RemoteDesktoporg.freedesktop.portal.RemoteDesktop. GNOME and KDE Plasma have it; most wlroots compositors do not
ydotool (ydotool)Any Wayland sessionA usable /dev/uinput and a working ydotoold setup
wtype (wtype)sway, Hyprland and other virtual-keyboard compositorsThe wtype package
xdotool (xdotool)i3 and other X11 sessions; XWayland windows only on WaylandThe xdotool package

Pin a backend

Edit ~/.config/vocalinux/config.json and restart Vocalinux. An explicit non-IBus value skips IBus selection. If the pinned tool is missing, Vocalinux warns and falls back to its normal order.

config.json
{
  "text_injection": {
    "backend": "wtype"
  }
}

To try a backend for one run without saving it:

terminal
user@linux:~$ VOCALINUX_FORCE_BACKEND=wtype vocalinux --debug

Terminals

When text goes in through the clipboard, Vocalinux sends Ctrl+V in normal fields and Ctrl+Shift+V in terminal windows. Terminal detection works on Hyprland, sway and niri.

Setup steps

  1. 1

    Install Vocalinux and the typing tools

    Install Vocalinux, then make sure wtype and wl-clipboard are installed on sway or Hyprland, or xdotool on i3.

  2. 2

    Check that the tool can type

    Focus a text field and run wtype "hello" on Wayland or xdotool type "hello" on X11. If nothing appears, Vocalinux cannot type there either.

  3. 3

    Choose how dictation starts

    Either add yourself to the input group for the built-in hotkey, or turn on External Activation and bind vocalinux --toggle in your compositor config.

  4. 4

    Pin a backend if autodetection guesses wrong

    Set text_injection.backend in ~/.config/vocalinux/config.json, for example to wtype, then restart Vocalinux.

Keybinds via D-Bus

On Wayland the built-in hotkey reads /dev/input, so your user must be in the input group (the source installer does this; .deb and .rpm packages cannot). The alternative, added in v0.18.0, is to turn on Settings → Shortcuts → External Activation (Desktop Shortcut) and let the compositor own the key. These binds toggle dictation; they cannot do push-to-talk.

sway or i3 config
bindsym $mod+Shift+d exec vocalinux --toggle
hyprland.conf
bind = SUPER SHIFT, D, exec, vocalinux --toggle

Or keep the built-in listener and join the group, then log out and back in:

terminal
user@linux:~$ sudo usermod -aG input $USER

The full D-Bus interface and Flatpak command are in global shortcuts. Minimal window-manager sessions may also need their own autostart line; see autostart.

The Dictation Pad fallback

If no backend types reliably on your setup, send dictation to the Dictation Pad instead (added in v0.18.0). It is an in-app window that receives the text, and you copy it out by hand, so no injection path is involved. Turn on Settings → Dictation → Dictate into Dictation Pad, then open it with Open Dictation Pad in the same group or Dictation Pad in the tray menu. Later releases fixed the pad ghosting away when idle under a Wayland compositor (v0.18.1) and stopped it travelling between workspaces with Settings (v0.18.5). Details on the Dictation Pad page.

Troubleshooting

Nothing is typed anywhere

Install the Wayland tools and test them by hand, then run Vocalinux with debug logging and check which backend it reports. The startup log records a pin request; a live test in the target app is the real confirmation.

terminal
user@linux:~$ sudo apt install wtype wl-clipboard xclip xsel
terminal
user@linux:~$ wtype "hello"

ydotool is chosen but does nothing

ydotool needs /dev/uinput and a running ydotoold. Fix that setup or pin wtype.

The hotkey never fires

Confirm you are in the input group in the current session, or switch to External Activation with a compositor bind. On i3 (X11) the built-in X11 listener handles the hotkey without that group.

FAQ

Why does dictation work in my browser but not in native Wayland apps?

That is the classic IBus symptom: the compositor does not relay IBus commits to native Wayland clients, so IBus reports success while nothing appears. Pin the wtype backend and restart Vocalinux.

Does the RemoteDesktop portal work on sway or Hyprland?

Only if your portal backend implements org.freedesktop.portal.RemoteDesktop. GNOME and KDE Plasma do and most wlroots compositors do not. When it is missing, Vocalinux moves on to ydotool and then wtype.

Can I use push-to-talk on a tiling compositor?

Yes, with the built-in listener, which on Wayland needs your user in the input group. A compositor keybind over D-Bus can only toggle dictation.

Is Hyprland supported?

Hyprland is marked Experimental in the compatibility table and may need wtype configuration. sway and i3 are marked as good support.

More help: troubleshooting and desktop reliability.

Dictate on your tiling setup

Install Vocalinux, check that wtype or xdotool can type, and bind dictation to a key in your compositor config.