Troubleshooting Guide
Common issues and solutions for QMKonnect across different platforms.
General Issues
QMKonnect Won’t Start
Symptoms: App doesn’t start or exits right away
Solutions:
- Check configuration file:
qmkonnect -c # Create default config qmkonnect -v # Run with verbose output
- Check dependencies:
- Make sure required libraries are installed
- Check system compatibility
- Run with debug output:
qmkonnect --debug
- Check permissions:
- Linux: User in
input
andplugdev
groups - macOS: Accessibility permissions granted
- Windows: Run as Administrator if needed
- Linux: User in
Keyboard Not Detected
Symptoms: QMKonnect runs but doesn’t communicate with keyboard
Diagnosis:
# Test keyboard connection
qmkonnect --test-connection
# List available HID devices
# Linux:
ls -la /dev/hidraw*
cat /sys/class/hidraw/hidraw*/device/uevent
# Windows:
# Use Device Manager to check HID devices
# macOS:
system_profiler SPUSBDataType | grep -i keyboard
Solutions:
- Verify keyboard configuration:
- Check vendor_id and product_id in config
- Ensure Raw HID is enabled in QMK firmware
- Confirm qmk-notifier module is included
- Check QMK firmware:
// In rules.mk RAW_ENABLE = yes // In config.h #define RAW_USAGE_PAGE 0xFF60 #define RAW_USAGE_ID 0x61
- Permission issues (Linux):
# Add user to groups sudo usermod -a -G input,plugdev $USER # Install udev rules sudo cp packaging/linux/udev/99-qmkonnect.rules.template /etc/udev/rules.d/99-qmkonnect.rules sudo udevadm control --reload && sudo udevadm trigger
Window Detection Not Working
Symptoms: QMKonnect runs but doesn’t detect window changes
Platform-specific solutions:
Windows
# Check if running as tray app
qmkonnect --tray-app
# Verify window hooks are working
qmkonnect -v # Look for window change events
Linux
# Check Hyprland integration
echo $HYPRLAND_INSTANCE_SIGNATURE
# Test Hyprland socket
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock -
Note: Only Hyprland is supported on Linux. Other window managers are not supported yet. Please contribute support for your window manager!
macOS
- Grant Accessibility permissions:
- System Preferences → Security & Privacy → Privacy
- Select “Accessibility”
- Add QMKonnect to allowed applications
- Test window detection:
./QMKonnect.app/Contents/MacOS/qmkonnect -v
Platform-Specific Issues
Windows Issues
System Tray Icon Missing
Solutions:
- Check if running as tray app:
qmkonnect --tray-app
- Restart Windows Explorer:
taskkill /f /im explorer.exe start explorer.exe
- Check system tray settings:
- Settings → Personalization → Taskbar
- Select which icons appear on taskbar
Multiple Instances Running
Symptoms: Multiple QMKonnect processes in Task Manager
Solutions:
- Kill all instances:
taskkill /f /im qmkonnect.exe
- Start single instance:
qmkonnect --tray-app
- Check startup folder for duplicates:
%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
Permission Errors
Solutions:
- Run as Administrator
- Check Windows Defender exclusions
- Verify antivirus isn’t blocking the application
Linux Issues
Systemd Service Fails
Check service status:
systemctl --user status qmkonnect
journalctl --user -u qmkonnect -f
Common fixes:
- Service file issues:
# Reinstall service file curl https://raw.githubusercontent.com/dabstractor/qmkonnect/main/packaging/linux/systemd/qmkonnect.service.template | tee ~/.config/systemd/user/qmkonnect.service systemctl --user daemon-reload systemctl --user enable --now qmkonnect
- Binary path issues:
# Verify binary location which qmkonnect # Update service file if needed systemctl --user edit qmkonnect
Hyprland Integration Issues
Check Hyprland socket:
# Verify socket exists
ls -la /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/
# Test socket communication
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | head -10
Solutions:
- Socket permission issues:
# Check socket permissions ls -la /tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock # Restart Hyprland if needed
Note: Only Hyprland is supported on Linux. Other window managers are not supported yet. Please contribute support for your window manager!
macOS Issues
Accessibility Permissions
Grant permissions:
- System Preferences → Security & Privacy → Privacy
- Select “Accessibility” from left panel
- Click lock to make changes
- Add QMKonnect to allowed applications
Verify permissions:
# Check current permissions
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "SELECT * FROM access WHERE service='kTCCServiceAccessibility';"
Application Bundle Issues
Solutions:
- Rebuild application bundle:
cd packaging/macos ./build.sh
- Check code signing:
codesign -v QMKonnect.app
- Reset application permissions:
tccutil reset Accessibility com.yourcompany.qmkonnect
Configuration Issues
Invalid Configuration File
Symptoms: Configuration errors on startup
Solutions:
- Validate TOML syntax:
# Use online TOML validator or python3 -c "import toml; toml.load('config.toml')"
- Reset to defaults:
# Backup current config cp ~/.config/qmk-notifier/config.toml ~/.config/qmk-notifier/config.toml.bak # Create new default config qmkonnect -c
- Check file permissions:
ls -la ~/.config/qmk-notifier/config.toml chmod 644 ~/.config/qmk-notifier/config.toml
Wrong Keyboard IDs
Find correct IDs:
Using QMK Configuration
// Check your QMK config.h
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0000
Using System Tools
# Linux
lsusb | grep -i keyboard
cat /sys/class/hidraw/hidraw*/device/uevent | grep -E "HID_ID|HID_NAME"
# macOS
system_profiler SPUSBDataType | grep -A 10 -B 10 -i keyboard
# Windows PowerShell
Get-WmiObject -Class Win32_USBHub | Where-Object {$_.Name -like "*keyboard*"}
Performance Issues
High CPU Usage
Diagnosis:
# Monitor CPU usage
top -p $(pgrep qmkonnect)
# Check polling interval
qmkonnect -v # Look for timing information
Solutions:
- Increase polling interval:
[window_detection] poll_interval = 200 # Increase from default 100ms
- Use application filtering:
[window_detection] include_apps = ["code", "firefox", "terminal"] # Only monitor specific apps
- Check for infinite loops:
qmkonnect --debug # Look for repeated events
Memory Leaks
Monitor memory usage:
# Linux
ps aux | grep qmkonnect
valgrind --leak-check=full qmkonnect
# macOS
leaks qmkonnect
# Windows
# Use Task Manager or Process Explorer
Communication Issues
Data Not Reaching Keyboard
Debug communication:
# Show what's being sent
qmkonnect --dry-run
# Test with minimal data
qmkonnect --debug
Check QMK side:
// Add debug output to QMK
#ifdef CONSOLE_ENABLE
void qmk_notifier_notify(const char* app_class, const char* window_title) {
printf("Received: app='%s', title='%s'\n", app_class, window_title);
}
#endif
Raw HID Issues
Verify Raw HID setup:
- QMK firmware:
# In rules.mk RAW_ENABLE = yes
- Test Raw HID:
# Linux - test hidraw device echo "test" > /dev/hidraw0 # Check if device accepts data qmkonnect --test-connection
Getting Help
Collecting Debug Information
When reporting issues, include:
- System information:
# Linux uname -a lsb_release -a # macOS sw_vers # Windows systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
- QMKonnect version:
qmkonnect --version
- Debug output:
qmkonnect --debug > debug.log 2>&1
- Configuration file:
cat ~/.config/qmk-notifier/config.toml
Where to Get Help
- GitHub Issues: https://github.com/dabstractor/qmkonnect/issues
- QMK Discord: #help channel
- Documentation: This site and README files
Creating Bug Reports
Include:
- Operating system and version
- QMKonnect version
- Steps to reproduce
- Expected vs actual behavior
- Debug logs
- Configuration file (remove sensitive data)