Kernel-level /dev/uinput hardware typing • Real-time neural swipe-to-type • Continuous terminal modifier chording • Zero focus stealing • Dual-orientation view profiles
✨ Features • 🆚 Comparison • 🌍 Portability • 🏗️ Architecture • 🚀 Quickstart • 🎨 Themes • 🤝 Contributing
If you've ever tried using a Linux tablet (Surface Pro, Dell Latitude Detachable, ThinkPad Fold), 2-in-1 laptop, or gaming handheld (Steam Deck, ROG Ally, Legion Go) on Wayland, you know the frustration:
- ❌ Maliit & Squeekboard: Rigid full-width bottom docks that eat 50% of your screen, zero swipe typing, and terminal modifier keys (
Ctrl+Shift+▲buffer scrolling,Ctrl+C) reset after a single tap. - ❌ Onboard & Florence: Ancient X11 relics that completely crash, glitch, or fail to composite under modern Wayland compositors (Plasma 6, GNOME 46+, Hyprland).
- ❌ IBus / Fcitx Virtual Panels: Rely on application-level text-input protocols that flatly ignore raw terminals (Kitty, Alacritty, Foot), Neovim, TTYs, games, and sandboxed Flatpaks.
Aurora solves touch input on modern Linux once and for all.
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ Aurora Touch Keyboard │
│ │
│ ❖ Drag [All] [Copy] [Paste] [Esc] [Tab] 📌 Set Default − [100% ▾] + ◢ Resize │
│ [Auto-Dock ▾] [⬇ Dock] [QWERTY ▾] [Aurora Glass ▾] [ 🗕 ] [ ✕ ] │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ ⚡ FUTO [ ✓ aurora ] [ authority ] [ auto ] [ around ] [ ✕ ] │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 2 3 4 5 6 7 8 9 0 - = ⌫ Backspace │
│ Tab q w e r t y u i o p [ ] \ │
│ Caps a s d f g h j k l ; ' Enter ↵ │
│ Shift z x c v b n m , . / Shift ⇧ │
│ [Ctrl] [Super ❖] [Alt] [ Space ] [AltGr] [◄][▲][▼][►] │
└─────────────────────────────────────────────────────────────────────────────────────────┘
Emits genuine physical EV_KEY hardware keystrokes directly into the Linux kernel via /dev/uinput. It works universally across everything: Kitty, Neovim, Firefox, Steam games, TTYs, and sandboxed Flatpaks without depending on IBus or XTest.
Powered by FUTO Swipe's edge neural encoder (honorable_sturgeon, a 1D-CNN spatial model) running via ExecuTorch, decoded with a trie-constrained CTC beam search ported directly from FUTO's own published reference implementation — not a hand-rolled approximation.
- ~14ms mean decode latency, end-to-end socket round trip on this hardware — down from ~240ms before the beam search rewrite, measured on the project's own headless synthetic-trajectory benchmark.
- 100% top-1 accuracy on multi-syllable words (infrastructure, characteristic, sustainability, implementation...) on that same internal benchmark, up from 35.5% under the previous greedy-decode approach — see
VOCAB_CONTEXT_SPEC.mdfor the full before/after methodology. - Context-aware disambiguation: an ephemeral rolling window of recently-typed words feeds FUTO's trained context language model (
hungry_jellyfish), so ambiguous swipes are resolved using what you just typed (e.g. "critical" correctly biases a following swipe toward "infrastructure" over shape-alike distractors). - Instant Auto-Commit: Top candidate is immediately typed with a trailing space upon lifting your finger.
- One-Tap Candidate Chips: Tap secondary chips to auto-backspace and substitute words instantly.
- Zero-Dependency Fallback: If the neural daemon is offline, automatically falls back to an internal SHARK² geometric decoder.
A transparent 60 FPS overlay renders anti-aliased Bézier glowing neon trails matching your active glassmorphic theme, complete with smooth exponential decay fading.
Persistent modifier latching lets you lock Ctrl+Shift and tap ▲ Up or ▼ Down repeatedly to smoothly scroll terminal buffers without modifiers resetting between keystrokes. Releasing Super ❖ emits a clean tap to toggle your application launcher.
Tablets rotate — KWin rules don't. Aurora's View Profile Architecture maintains independent coordinates, dimensions, dock modes, and button typography for Landscape vs. Portrait views:
- Auto-Dock Default: Automatically docks centered at the bottom of the screen with taskbar clearance buffer.
-
📌 Set Default Calibration: Drag or resize the keyboard to your ideal spot and tap
📌 Set Defaultto lock it in for that orientation. -
Direct KWin DBus Placement: Instructs the Wayland compositor to reposition the window in
$<20\text{ms}$ on rotation or restore, completely bypassing default window centering.
Resize on the fly with the touch finger corner grip (◢ Resize), +/− zoom stepper buttons, or scale presets down to a compact 25% Mini or 50% Quadrant tile for side-by-side multitasking.
Click 🗕 to collapse the keyboard into a sleek 160×160 floating touch badge anchored in the corner of your screen. Tap the badge anytime to instantly restore the keyboard.
| Feature | Maliit / Squeekboard | Onboard (X11) | GNOME OSK | Aurora Touch Keyboard |
|---|---|---|---|---|
| Terminal & Neovim Compatibility | ❌ Broken | ❌ Broken | 🟢 100% Universal (/dev/uinput) |
|
| Neural Swipe-to-Type | ❌ None | ❌ None | ❌ None | 🟢 FUTO Neural + Trie Beam Search + Context LM |
| Glowing Gesture Trail | ❌ None | ❌ None | ❌ None | 🟢 60 FPS Anti-Aliased Glow |
| Continuous Terminal Chording | ❌ Resets on Tap | ❌ Resets on Tap | 🟢 Full Multi-Modifier Latching | |
| Wayland Focus Isolation | ❌ Focus Steals | 🟢 Native (WindowDoesNotAcceptFocus) |
||
| Dual Landscape/Portrait Profiles | ❌ Stretches | ❌ None | ❌ None | 🟢 Dedicated View Profiles & Calibration |
| Tiling Scaling (25% to 125%) | ❌ Fixed Bar | ❌ Fixed Bar | 🟢 Dynamic Corner Grip & Presets | |
| Glassmorphic Theming | ❌ Plain Flat | ❌ 2000s Skeuomorphic | ❌ System Default | 🟢 4 Curated Glassmorphic Themes |
| Environment | Protocol | Status | Window Movement Method |
|---|---|---|---|
| KDE Plasma 6 | Wayland (KWin) | 🟢 Primary Target | Direct KWin DBus Scripting + startSystemMove() |
| KDE Plasma 5.27+ | Wayland / X11 | 🟢 Fully Supported | startSystemMove() / X11 Move |
| GNOME 45 / 46+ | Wayland (Mutter) | 🟢 Fully Supported | Native startSystemMove() |
| Hyprland / Sway / Wayfire | Wayland (wlroots) | 🟢 Fully Supported | Floating window rule / Layer rule |
| SteamOS / Gamescope | Wayland Handheld | 🟢 Fully Supported | Floating Overlay |
| X11 Standalone (i3/bspwm/XFCE) | X11 | 🟢 Fully Supported | Native X11 event loop |
- 2-in-1 Tablet PCs: Dell Latitude 7320/7210 Detachable, Microsoft Surface Pro series (Pro 4–10 / Go), Lenovo ThinkPad X1 Fold / Yoga, HP Spectre x360, Framework Laptop 13 Touch.
- Handheld PCs: Valve Steam Deck (LCD & OLED), ASUS ROG Ally / Ally X, Lenovo Legion Go, GPD Win, OneXPlayer.
- ARM64 Devices: Raspberry Pi 4 & 5 (Official Touchscreen), Pine64 PineTab 2, Rockchip RK3588 Tablets.
flowchart TD
subgraph Input Layer
Touch[Touch Finger / Stylus] -->|Drag Gesture| Btn[SwipeKeyButton]
Touch -->|Tap Keystroke| Btn
end
subgraph UI & Visual FX
Btn -->|Stroke Coordinates| Trail[SwipeTrailOverlay<br/>60 FPS Glowing Trail]
Btn -->|Candidate Click / Auto-Commit| Bar[CandidateBar<br/>Auto-Commit Chips & Toasts]
end
subgraph Gesture Decoding Pipeline
Ctx[RollingTokenContext<br/>FIFO of recent words] -.->|context| Client
Btn -->|Raw Trail x,y,t| Client[FutoSwipeClient<br/>Unix Domain Socket]
Client -->|IPC /tmp/futo_swipe.sock| Daemon[futo_daemon<br/>1D-CNN Encoder + Trie-Constrained<br/>CTC Beam Search + Context LM]
Daemon -->|Candidate Words| Client
Client -->|Top Predictions| Bar
Bar -.->|committed word| Ctx
Btn -.->|Offline Fallback| Fallback[SHARK² Geometric Decoder]
end
subgraph Kernel Hardware Layer
Bar -->|Committed Text / Chords| Engine[KeyEngine<br/>evdev.UInput Device]
Btn -->|Direct Hardware Keycodes| Engine
Engine -->|EV_KEY Events| Kernel[/dev/uinput Virtual Keyboard/]
Kernel -->|Universal Hardware Typing| Apps[Kitty • Alacritty • Neovim • Firefox • Steam Games]
end
subgraph Window & Geometry Management
Screen[Screen Geometry & Rotation Watcher] --> GeoMgr[GeometryManager<br/>Landscape / Portrait View Profiles]
GeoMgr -->|Compositor Positioning| KWin[KWin Wayland DBus Scripting]
GeoMgr -->|Anti-Centering placement=1| KWinRules[~/.config/kwinrulesrc]
end
sudo dnf install python3-pyqt6 python3-evdevsudo pacman -S python-pyqt6 python-evdevsudo apt install python3-pyqt6 python3-evdevTo allow Aurora to type without requiring sudo / root permissions:
# Add your user to the input group:
sudo usermod -aG input $USER
# Or install the udev rule:
echo 'KERNEL=="uinput", GROUP="input", MODE="0660", OPTIONS+="static_node=uinput"' | sudo tee /etc/udev/rules.d/99-uinput.rules
sudo udevadm control --reload-rules && sudo udevadm trigger(Log out and log back in once for group changes to take effect).
git clone https://github.com/b0id/aurora-keyboard.git
cd aurora-keyboard
# Run installer (creates ~/.local/bin links, .desktop entry, and autostart entry):
./install.sh
# Start the neural swipe daemon in background:
./aurora-futo-daemon &
# Launch Aurora Touch Keyboard:
aurora-keyboardAurora ships with 4 meticulously crafted glassmorphic themes:
| Theme | Aesthetic | Neon Trail Color | Preview |
|---|---|---|---|
| Aurora Glass (Default) | Deep Slate Glassmorphic Translucency | Cyan Neon (#38bdf8) |
Translucent blur with subtle border highlights |
| Cyber Neon | Cyberpunk High-Contrast Dark | Neon Rose (#f43f5e) |
High-visibility neon accents |
| OLED Dark | Pitch Black Pure Contrast (Battery Saver) | Crisp White (#ffffff) |
Absolute black for OLED displays |
| Light Velvet | Sleek Light Mode Surface | Sky Blue (#0284c7) |
Modern frosted light appearance |
Switch themes live via the top action bar dropdown, or launch with a specific theme and layout:
aurora-keyboard --theme "Cyber Neon" --layout "DEV"- Auto-Dock (Default): Aurora opens docked cleanly to the bottom of your screen.
- Custom Placement in Landscape:
- Drag the keyboard by the
❖ Draghandle anywhere on screen. - Resize it with the
◢ Resizecorner grip. - Click
📌 Set Defaulton the top action bar to lock your Landscape preset.
- Drag the keyboard by the
- Custom Placement in Portrait:
- Rotate your tablet to Portrait orientation.
- Drag and resize the keyboard to your preferred portrait position.
- Click
📌 Set Defaultto lock your Portrait preset.
- Rotating your tablet will now seamlessly switch between your saved Landscape and Portrait profiles!
Run the full automated unit and integration test suite:
python3 -m unittest discover -s tests -p "test_*.py"Contributions are warmly welcomed! Feel free to submit issues, feature requests, or pull requests:
- 💡 Dictionary & Lexicons: Add specialized terminology, developer keywords, or localized dictionaries.
- 📱 Compositor Profiles: Help test and refine layer-shell rules for Sway, Hyprland, and GNOME.
- 🎨 New Themes: Submit custom QSS glassmorphic colorways.
- Aurora Touch Keyboard Core: Licensed under the GNU General Public License v3.0 (GPL-3.0-or-later). Strong copyleft guarantees that any derivative works and forks remain 100% free and open source.
- Neural Gesture Models: Powered by FUTO Swipe under the FUTO Model Weights License 1.0.