Barrier:Rocky Linux + Windows 双机 KVM 部署
概述
使用 Barrier 实现 Rocky Linux(服务端)与 Windows(客户端)之间共享键盘鼠标。最终采用 USB 网卡 + 直连网线 + 静态 IP,不再依赖热点。鼠标移动到屏幕边缘时自动切换到另一台电脑。
本次最终落地总结
本次已经完成的实际变更如下:
- 放弃热点方案,改为 Rocky Linux 上的 USB 网卡
enp0s20f0u7u4c2直连 Windows 有线网卡。 - Rocky Linux 直连口固定为
192.168.77.1/24,Windows 直连口固定为192.168.77.2/24。 - Rocky Linux 侧由 NetworkManager 持久管理直连口,连接名为
barrier-direct-link,并启用autoconnect=yes。 - Rocky Linux 侧 Barrier 服务端继续由
systemd --user托管。 - Windows 侧保留
BarrierClient登录自启任务,并新增BarrierEthernetBoot开机任务,用于自动启用有线网卡。 - Windows 侧 Barrier 客户端连接地址已从旧热点地址
10.42.0.1切换为192.168.77.1。 - Barrier 屏幕边界配置已调整为显式百分比映射,降低多显示器高度不一致导致的边界命中问题。
环境信息
| 项目 | 服务端 (Rocky Linux) | 客户端 (Windows) |
|---|---|---|
| 系统 | Rocky Linux 9.7 | Windows 11 |
| 主机名 | RockyM | G |
| 直连 IP 地址 | 192.168.77.1 (enp0s20f0u7u4c2) |
192.168.77.2 |
| Barrier 版本 | 2.4.0 | 2.4.0 |
| 角色 | Server | Client |
| 端口 | 24800 | - |
屏幕布局
1 | +---+ +--------+ |
G(Windows)在左侧RockyM(Rocky Linux)在右侧- 从 RockyM 向左移动鼠标切换到 G,反之亦然
服务端部署(Rocky Linux)
1. 安装 Barrier
1 | sudo dnf install barrier |
2. 创建配置文件
1 | mkdir -p ~/.config/barrier |
编辑 ~/.config/barrier/barrier.conf:
1 | section: screens |
当前实际布局是
Windows(G) 在左,RockyM 在右。
使用right(0,100)/left(0,100)是为了在双机多显示器高度不完全一致时,仍按整条边界切换。
3. 让 USB 直连口持久化
实际环境中,Rocky Linux 不再依赖热点或 Wi-Fi 侧地址,而是通过 NetworkManager 管理 USB 网卡静态地址:
1 | nmcli connection add type ethernet \ |
检查状态:
1 | nmcli -g GENERAL.NAME,GENERAL.DEVICES,GENERAL.STATE,connection.autoconnect,ipv4.addresses connection show barrier-direct-link |
4. 创建 systemd 用户服务
编辑 ~/.config/systemd/user/barrier-server.service:
1 | [Unit] |
5. 启用服务
1 | # 重载 systemd 配置 |
当前实际验证使用的是
graphical-session.target下的用户服务。
Barrier 需要依附图形会话,不建议在没有桌面会话的情况下强行改成系统级服务。
6. 管理命令
1 | # 查看状态 |
7. 辅助脚本
本机还保留了一个辅助脚本,用于手工恢复直连链路和输出 Windows 参数:
1 | ~/barrier-direct-link.sh start |
客户端部署(Windows)
1. 安装 Barrier
下载并安装 Barrier:https://github.com/debauchee/barrier/releases
安装路径:C:\Program Files\Barrier\
2. 创建隐藏启动脚本
创建 C:\Program Files\Barrier\start-barrier.vbs:
1 | Set ws = CreateObject("WScript.Shell") : ws.Run """C:\Program Files\Barrier\barrierc.exe"" --name G --disable-crypto --enable-drag-drop [192.168.77.1]:24800", 0, False |
使用 VBS 包装是因为
barrierc.exe是控制台程序,直接运行会显示 CMD 黑窗口。ws.Run的第二个参数0表示隐藏窗口。
3. 配置 Windows 直连网口
Windows 有线直连口固定为 192.168.77.2/24,默认网关和 DNS 留空。
管理员 CMD:
1 | netsh interface ip set address name="以太网" static 192.168.77.2 255.255.255.0 |
如果网卡名称不是“以太网”,先执行:
1 | netsh interface show interface |
4. 创建登录自启计划任务
以管理员身份打开 CMD,执行:
1 | schtasks /create /tn "BarrierClient" /tr "wscript.exe \"C:\Program Files\Barrier\start-barrier.vbs\"" /sc onlogon /rl highest /ru Administrator /rp "<密码>" /f /it |
参数说明:
/tn "BarrierClient": 任务名称/sc onlogon: 触发器,用户登录时/rl highest: 最高权限运行,确保能注入键鼠事件到所有窗口/it: 仅在用户交互式登录时运行
5. 创建开机有线网卡自愈任务
为避免 Windows 重启后有线网卡被禁用,额外创建一个开机任务:
1 | schtasks /create /tn "BarrierEthernetBoot" /tr "powershell.exe -NoProfile -WindowStyle Hidden -Command \"Enable-NetAdapter -InterfaceDescription 'Realtek PCIe GbE Family Controller' -Confirm:$false\"" /sc onstart /ru SYSTEM /rl HIGHEST /f |
6. 管理命令
1 | :: 手动运行 |
关键配置说明
| 配置项 | 值 | 说明 |
|---|---|---|
--disable-crypto |
两端均设置 | 禁用 SSL 加密,两端必须一致 |
--disable-client-cert-checking |
服务端 | 不验证客户端证书 |
--enable-drag-drop |
客户端 | 启用跨机器拖拽文件 |
--name |
对应主机名 | 必须与配置文件中 screens 段的名称完全一致,区分大小写 |
clipboardSharing |
true | 启用剪贴板共享 |
故障排查
鼠标键盘无法切换
- 检查连接状态
服务端:
1 | ss -tnp | grep 24800 |
应看到 ESTAB 状态的连接。如果看到 FIN-WAIT 或无连接,说明连接已断。
客户端:
1 | netstat -an | findstr 24800 |
应看到 ESTABLISHED。如果是 CLOSE_WAIT,说明连接已死。
- 重启两端
服务端:
1 | systemctl --user restart barrier-server |
客户端:
1 | taskkill /F /IM barrierc.exe |
Screen Name 不匹配
客户端的 --name 参数必须与服务端配置文件中 section: screens 里定义的名称完全一致,区分大小写。可通过 hostname 命令确认主机名。
Windows 端 UAC 弹窗导致键鼠失效
如果 Windows 弹出 UAC 窗口,Barrier 客户端需要以管理员权限运行才能注入键鼠事件。计划任务已配置 /rl highest。
网络不通
确认两端在同一子网(192.168.77.0/24),且服务端 24800 端口未被防火墙拦截:
1 | # 服务端检查端口监听 |
只能单向切换
如果出现“Rocky 到 Windows 正常,但 Windows 只能往左不能往右”,优先检查以下几项:
- Rocky 直连网卡是否仍有地址:
1 | ip addr show dev enp0s20f0u7u4c2 |
- Windows 侧是否存在多个
barrierc.exe进程:
1 | tasklist | findstr /I barrierc.exe |
- Barrier 配置是否仍为全边界映射:
1 | G: |
- Rocky 服务端是否正常运行:
1 | systemctl --user restart barrier-server.service |
文件清单
| 路径 | 所在机器 | 说明 |
|---|---|---|
~/.config/barrier/barrier.conf |
Rocky Linux | Barrier 服务端配置,定义屏幕和布局 |
~/.config/systemd/user/barrier-server.service |
Rocky Linux | systemd 用户服务单元 |
NetworkManager 连接 barrier-direct-link |
Rocky Linux | USB 直连网卡静态地址与自启动 |
~/barrier-direct-link.sh |
Rocky Linux | 直连链路辅助恢复脚本 |
C:\Program Files\Barrier\start-barrier.vbs |
Windows | 隐藏窗口启动脚本 |
计划任务 BarrierClient |
Windows | 登录自启计划任务 |
计划任务 BarrierEthernetBoot |
Windows | 开机自动启用有线网卡 |