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 启动失败
相关推荐
云飞云共享云桌面13 小时前
机械制造研发部门:一台SolidWorks云主机替代 10 台传统图形工作站
运维·服务器·网络·3d·自动化·制造
j7~13 小时前
【ProtoBuf】(篇一)初识 ProtoBuf
运维·服务器·序列化·protobuf·protobuf的适用特点
seahahacsdn13 小时前
Windows获取SYSTEM用户权限的方法应用-计划任务
windows
丰锋ff13 小时前
用户管理命令
linux·运维·服务器
迪菲赫尔曼13 小时前
【基础篇 08】让VS Code连接服务器:界面在本地,文件保存到远端
运维·服务器·vscode·yolo·论文·教程·ultralyt
上海云盾-小余14 小时前
七层 CC 攻击检测难点:如何区分真实用户与攻击请求
网络·人工智能·windows·tcp/ip·udp
刚入门的大一新生14 小时前
Linux-线程概念
linux·jvm
H.莓飛14 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
2501_9151063214 小时前
Windows 上开发 Unity iOS,使用 KXBuild 进行真机调试、性能采样与打包 ipa
windows·vscode·unity·ios·个人开发·swift·敏捷流程
xianyuCcCcCCCcc14 小时前
Kubernetes :健康检查、认证授权与可视化面板
运维·云原生·kubernetes·dashboard