A clean, native COSMIC™ desktop panel applet for controlling virtual keyboards on Wayland systems. This project provides an elegant solution for Pop!_OS users who need reliable virtual keyboard functionality without the complexity of building a full keyboard from scratch.
Instead of implementing a complete virtual keyboard, this project takes a smart integration approach:
- 🎹 Uses wvkbd - A mature, well-tested virtual keyboard (jjsullivan5196/wvkbd)
- 🎛️ Adds COSMIC Panel Integration - A native applet that fits perfectly into COSMIC™ desktop's design language
- 🔧 Provides Easy Control - Simple toggle, show, hide, and status functionality
- Native COSMIC Applet: Appears as a keyboard icon in your COSMIC panel
- Status Aware: Shows whether the virtual keyboard is currently running
- Click to Control: Single click opens the control popup
- Start/Stop: Toggle the virtual keyboard on/off
- Show/Hide: Control visibility without stopping the process
- Signal Management: Uses proper POSIX signals (SIGUSR1/SIGUSR2)
- Process Tracking: Monitors keyboard status via process detection
- No Focus Stealing: The keyboard appears as an overlay without disrupting your workflow
- Persistent Controls: The applet remains accessible even when the keyboard is hidden
- Visual Feedback: Clear status indicators and button states
- wvkbd-mobintl: The actual virtual keyboard (external dependency)
- cosmic-ext-spaceboard: The COSMIC panel applet (this project)
- Desktop Integration: Proper
.desktopfile for COSMIC panel discovery
spaceboard/
├── src/
│ ├── main.rs # Application entry point
│ ├── window.rs # COSMIC applet implementation
│ └── lib.rs # Library placeholder
├── Cargo.toml # Rust dependencies
├── spaceboard.desktop # Desktop entry for COSMIC
├── setup.sh # Automated installation script
└── README.md # This file
🚀 Coming Soon! The easiest way to install this applet will be through the COSMIC Store:
- Open COSMIC Store
- Search for "Spaceboard"
- Click Install
- Add to your panel via COSMIC Settings → Desktop → Panel
Currently in development - see manual installation below for now.
Run the automated setup script:
chmod +x setup.sh
./setup.sh- Install wvkbd:
# Install dependencies
sudo apt update
sudo apt install build-essential pkg-config libwayland-dev libxkbcommon-dev
# Clone and build wvkbd
git clone https://github.com/jjsullivan5196/wvkbd.git
cd wvkbd
make
cp wvkbd-mobintl ~/.local/bin/
cd ..- Build the COSMIC applet:
# Build the applet
cargo build --release
# Install system-wide
sudo cp target/release/cosmic-ext-spaceboard /usr/bin/
sudo cp spaceboard.desktop /usr/share/applications/- Add to COSMIC Panel:
- Open COSMIC Settings
- Go to Desktop → Panel
- Click "Add Applet"
- Select "Spaceboard" from the list
- Click the keyboard icon in your COSMIC panel to open the control popup
- Toggle On/Off: Start or stop the virtual keyboard entirely
- Show/Hide: Control visibility while keeping the keyboard process running
- Status Display: See current keyboard state at a glance
- The virtual keyboard supports full QWERTY layout
- Click keys to type
- Supports modifier keys (Shift, Ctrl, Alt)
- Special keys (Enter, Backspace, Space) included
The applet uses standard POSIX signals to control wvkbd:
SIGUSR1: Hide the keyboardSIGUSR2: Show the keyboardSIGTERM: Stop the keyboard process
The keyboard can be customized by modifying wvkbd options in src/window.rs:
std::process::Command::new("wvkbd-mobintl")
.arg("-L") // Height: 200px
.arg("200")
// Add more arguments as neededModify spaceboard.desktop to change applet properties:
[Desktop Entry]
Name=Spaceboard
Icon=io.github.aquilesorei.Spaceboard
X-CosmicApplet=true
# Other properties...- Ensure the
.desktopfile is in/usr/share/applications/ - Restart COSMIC or log out/in
- Check that
X-CosmicApplet=trueis set in the desktop entry
- Verify
wvkbd-mobintlis in your PATH:which wvkbd-mobintl - Check process status:
pgrep wvkbd - Test manual start:
wvkbd-mobintl -L 200
- Ensure you have the COSMIC development environment set up
- Check Rust version:
rustc --version(requires recent stable) - Verify libcosmic dependencies are available
# Debug build
cargo build
# Release build
cargo build --release
# Run directly (for testing)
./target/debug/cosmic-ext-spaceboardFor COSMIC Store distribution, the applet uses Flatpak:
# Generate cargo sources for offline build
./generate-cargo-sources.sh
# Build Flatpak (requires flatpak-builder)
flatpak-builder --user --install --force-clean build-dir io.github.aquilesorei.Spaceboard.json
# Run the Flatpak version
flatpak run io.github.aquilesorei.SpaceboardRequirements for Flatpak building:
flatpak-builderflatpak-builder-tools(for cargo source generation)- Freedesktop runtime and SDK
main.rs: Simple entry point that launches the appletwindow.rs: Complete COSMIC applet implementation with:- Application trait implementation
- Message handling system
- UI rendering (icon + popup)
- Process management functions
- libcosmic: COSMIC application framework
- tokio: Async runtime for process management
- Standard library: Process control and system calls
Contributions are welcome! Areas where help is appreciated:
- UI/UX improvements
- Additional wvkbd layout options
- Better error handling
- Documentation improvements
This project is licensed under the GPL-3.0 License - see the LICENSE file for details.
- wvkbd: jjsullivan5196/wvkbd - The excellent virtual keyboard this project builds upon
- COSMIC DE: System76's desktop environment and libcosmic framework
- Pop!_OS: The target platform for this integration
- wvkbd - The virtual keyboard engine
- libcosmic - COSMIC application framework
- COSMIC DE - The desktop environment
Made for COSMIC DE users who want simple, effective virtual keyboard control without the complexity! 🚀