Windows-Arch Linux 键鼠共享 & 剪贴板同步配置

概述

Windows 桌面 (192.168.5.11) 与 Arch Linux 笔记本 (192.168.5.12, Niri compositor) 之间共享键盘鼠标、剪贴板、文件传输。

架构

复制代码
蓝牙键盘 (IROK MG68AW BT2)
│ Super 键、Shift 键等
▼
Windows (192.168.5.11)
│ lan-mouse client 捕获输入并发送
│
▼ TCP port 4242
│
Linux / Niri (192.168.5.12)
│ wl-uinput-proxy 包装 lan-mouse daemon
│ Wayland 虚拟键盘 → uinput 内核设备
│
▼ uinput → libinput → Niri
│ Super 键 → Niri 快捷键 ✓
│ Shift 键 → fcitx5 中英文切换 ✓
│
▼
KDE Connect(剪贴板同步 + 文件传输)
UDP/TCP 1714-1764,局域网自动发现

核心原理:为什么必须用 wl-uinput-proxy

问题

Niri 存在已知 bug (#403/#631):通过 Wayland 虚拟键盘协议 (zwp_virtual_keyboard_v1) 进入的 modifier 事件(Super、Shift、Ctrl、Alt)不会走 compositor 的快捷键处理流程,只会被转发给当前焦点窗口。

复制代码
键盘 Super 键 → lan-mouse 捕获发送 → Linux 收到
→ zwp_virtual_keyboard_v1 协议
→ Niri:modifier 事件只转发给窗口,不触发 compositor 快捷键
→ Super+T 无效 ✗, Shift 切换输入法无效 ✗

解决

wl-uinput-proxy 拦截 Wayland 虚拟键盘事件,转换为 Linux uinput 内核设备发出的真实 evdev 事件。libinput 和 Niri 无法区分它和物理键盘,modifier 键的所有处理流程恢复正常。

复制代码
键盘 Super 键 → lan-mouse 捕获发送 → Linux 收到
→ wl-uinput-proxy 拦截虚拟键盘协议
→ 转换为 uinput 内核设备 (/dev/input/eventXX)
→ libinput 视为真实硬件键盘
→ Niri 正常处理 → Super 生效 ✓, Shift 生效 ✓

按键数据流

键盘通过蓝牙连接 Windows,Windows 端的 lan-mouse client 捕获按键后通过 TCP 发送到 Linux。Linux 端 wl-uinput-proxy 将虚拟键盘事件转为 uinput 内核事件,Niri 才能正确识别 modifier 键。

wl-uinput-proxy 必须运行,否则 Niri 的虚拟键盘 modifier 事件不会触发 compositor 快捷键,也不会被输入法处理。

开机自启动

所有服务已通过 ~/.config/niri/config.kdl 中的 spawn-at-startup 自动启动,开机无需手动操作

服务 Niri 配置行
键鼠共享 spawn-at-startup "~/.local/bin/wl-uinput-proxy" "lan-mouse" "daemon"
剪贴板 + 文件传输 spawn-at-startup "kdeconnectd"
输入法 spawn-at-startup "fcitx5"

wl-uinput-proxy 会自动拉起 lan-mouse daemon 作为子进程,无需单独启动。

验证

fish 复制代码
pgrep -a "wl-uinput|lan-mouse|fcitx5|kdeconnectd"

故障排查

如 wl-uinput-proxy 未运行(通常是 lan-mouse 之前已独立启动导致冲突):

fish 复制代码
pkill lan-mouse
sleep 1
nohup ~/.local/bin/wl-uinput-proxy lan-mouse daemon > /tmp/wl-up-lan.log 2>&1 &

KDE Connect 使用指南

剪贴板同步

配对后在两端开启 Clipboard sync 插件即可。双向自动同步,无需操作。

文件传输

Windows → Linux :右键文件 → "发送到设备" → 选 leli,文件存到 ~/Downloads/

Linux → Windows

fish 复制代码
kdeconnect-cli -d f8db019a1acb402daf300e5be3caf17c --share /path/to/file

常用命令

fish 复制代码
kdeconnect-cli -l             # 查看设备
kdeconnect-cli --refresh      # 刷新设备列表

关键组件

组件 作用 路径
wl-uinput-proxy Wayland 虚拟输入 → uinput 内核设备 ~/.local/bin/wl-uinput-proxy
lan-mouse 0.11.0 跨平台键鼠共享 /usr/bin/lan-mouse
KDE Connect 26.04.3 剪贴板同步 + 文件传输 /usr/bin/kdeconnectd

wl-uinput-proxy

  • 源码:https://github.com/pgaskin/wl-uinput-proxy
  • uinput 虚拟键盘/指针设备在 Windows 鼠标首次移入 Linux 屏幕时创建
  • 设备名:wl-uinput-proxy virtual keyboard N / wl-uinput-proxy virtual pointer N

lan-mouse

  • 后端:wlroots emulation
  • 捕获方式:layer-shell
  • 释放鼠标快捷键:LeftCtrl + LeftShift + LeftAlt
  • 配置:~/.config/lan-mouse/config.toml
  • Windows 屏幕位于 Linux 上方 (position = "top")

已修改的文件

文件 说明
~/.config/niri/config.kdl 添加 kdeconnectd + wl-uinput-proxy 自启动
~/.config/lan-mouse/config.toml lan-mouse 配置
~/.config/xremap/config.yml 已弃用,禁止使用
~/.config/systemd/user/xremap.service 已禁用
~/.config/systemd/user/wl-uinput-lan-mouse.service 已禁用

注意事项

  1. 所有服务已配置自启动,开机无需手动操作
  2. uinput 虚拟键盘设备在 Windows 鼠标首次移入 Linux 屏幕时创建
  3. IP 变化时更新 ~/.config/lan-mouse/config.toml
  4. 禁止使用 xremap:会抓取键盘设备导致 Niri 输入中断
  5. Niri 重启后自启动服务会自动重新运行
  6. KDE Connect 需要 Windows 端也在运行,两端在同一局域网
  7. 不要在 Niri 自启动之外单独运行 lan-mouse,会导致 wl-uinput-proxy 启动失败
相关推荐
CHANG_THE_WORLD1 小时前
Linux C 多线程 TCP 并发服务器:从 `accept()` 到工作线程的完整解析
linux·服务器·c语言
未来可期丶1 小时前
【开发环境】Windows+Docker Desktop+WSL2最佳实践
windows·docker·docker desktop·wsl2
影视飓风TIM1 小时前
Linux基础入门笔记:命令、内核架构与压缩传输全梳理
linux·笔记·架构
敲上瘾1 小时前
Linux系统调用mmap文件映射与malloc简单模拟实现指南
linux·服务器·c语言·缓存
APItesterCris1 小时前
电商口碑自动化监控方案:30 分钟搭建商品评论实时采集 + 情感分析系统(完整可运行代码)
大数据·运维·数据仓库·自动化
wdfk_prog8 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
2501_941982059 小时前
企业微信二次开发:私域数据基石——三大核心基础能力接口实战
windows·架构·bootstrap·企业微信
x-cmd10 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
AOwhisky12 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm