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 启动失败
相关推荐
林间码客3 小时前
从DevOps到DevSecOps:构建现代软件交付的基石与护城河
大数据·运维·devsecops·devops
李白你好3 小时前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk4 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu4 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇4 小时前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
轻揉小乔 真新人5 小时前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
曹牧5 小时前
C#:`JsonConvert.DeserializeObject`
windows·c#
Yan_chen6665 小时前
SSH(Secure Shell)安全外壳协议详解
运维·网络协议·ssh
lingran__6 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
JckOLF04Z7 小时前
软件项目“免坑”指南
windows