hyprkvm Public
Go to file
T
Code
Use Git or checkout with SVN using the web URL.
No matching headings.
HyprKVM
Hyprland-native software KVM switch that integrates with workspace navigation.
Features
- Workspace-integrated switching: Move past your last workspace to switch machines
- Mouse edge switching: Standard screen-edge triggers like Synergy/Barrier
- Hyprland keybind switching: Trigger switches using your movefocus Hyprland binds
- TLS encryption: Secure connections with TOFU (Trust On First Use) certificate pinning
- Clipboard sharing: Automatic clipboard sync between machines
Installation
Arch Linux (AUR)
yay -S hyprkvm
# or
paru -S hyprkvm
RHEL / Fedora / Rocky / Alma / CentOS
# Add the musicsian repository
sudo dnf config-manager --add-repo https://repos.musicsian.com/musicsian.repo
# Install hyprkvm
sudo dnf install hyprkvm
Homebrew (Linux)
# Add the tap
brew tap tenseleyFlow/tap
# Install hyprkvm
brew install hyprkvm
NixOS / Nix
Add to your flake inputs:
{
inputs.hyprkvm.url = "github:tenseleyFlow/hyprKVM";
}
Then add to your packages:
environment.systemPackages = [
inputs.hyprkvm.packages.${pkgs.system}.default
];
Or use the standalone flake directly:
nix run github:tenseleyFlow/hyprKVM -- daemon
Build from Source
# Clone
git clone https://github.com/tenseleyFlow/hyprKVM.git
cd hyprKVM
# NixOS
nix develop
cargo build --release
# Arch Linux / CachyOS
sudo pacman -S rust wayland libxkbcommon openssl
cargo build --release
# Binaries output to target/release/hyprkvm and target/release/hyprkvm-ctl
Quick Start
1. Configure
Create ~/.config/hyprkvm/hyprkvm.toml:
[machines]
self_name = "laptop"
[[machines.neighbors]]
name = "desktop"
direction = "right"
address = "192.168.1.100:24850"
Each machine needs its own config pointing to its neighbors.
2. Start the Daemon
# If installed via package manager
hyprkvm daemon
# If built from source
./target/release/hyprkvm daemon
3. First Connection
On first connection, you'll be prompted to trust the remote machine's certificate fingerprint. This is stored in ~/.config/hyprkvm/known_hosts.toml for future connections.
4. Usage
- Mouse: Move cursor to screen edge with a configured neighbor
- Escape: Press Scroll Lock (or triple-tap Shift) to return control
CLI Commands
# Start the daemon
hyprkvm daemon
# View logs
hyprkvm-ctl logs
# Check status
hyprkvm-ctl status
Configuration
Neighbor Machines
[[machines.neighbors]]
name = "desktop"
direction = "right" # left, right, up, down
address = "192.168.1.100:24850"
# fingerprint = "SHA256:..." # Optional: pre-trust certificate
Network & TLS
[network]
listen_port = 24850
bind_address = "0.0.0.0"
connect_timeout_secs = 5
ping_interval_secs = 5
ping_timeout_secs = 10
[network.tls]
# Auto-generated if missing
cert_path = "~/.config/hyprkvm/cert.pem"
key_path = "~/.config/hyprkvm/key.pem"
Escape Hotkey
[input.escape_hotkey]
key = "scroll_lock"
modifiers = [] # e.g., ["super"] for Super+ScrollLock
[input]
triple_tap_enabled = true
triple_tap_key = "shift"
triple_tap_window_ms = 500
Clipboard
[clipboard]
enabled = true
sync_on_enter = true
sync_on_leave = true
sync_text = true
sync_images = true
max_size = 10485760 # 10MB
Logging
[logging]
level = "info" # error, warn, info, debug, trace
See config/hyprkvm.example.toml for all options.
Hyprland Keybind Integration (Optional)
Intercept workspace movement to trigger machine switching:
# ~/.config/hypr/hyprland.conf
bind = SUPER, Left, exec, hyprkvm move left
bind = SUPER, Right, exec, hyprkvm move right
bind = SUPER, Up, exec, hyprkvm move up
bind = SUPER, Down, exec, hyprkvm move down
Firewall
Open port 24850 (or your configured port):
# UFW
sudo ufw allow 24850/tcp
# firewalld
sudo firewall-cmd --add-port=24850/tcp --permanent
sudo firewall-cmd --reload
License
MIT License