前言

Mac / Windows / Linux 桌面设备的互通一直是个问题。为了能用一套键鼠同时控制多台不同系统的设备,多年来有很多方案可以实现。

比较经典的是 Synergy ,但该软件已经变成了订阅制,原有的开源版本不再积极维护;

debauchee/barrier 是继承自 Synergy 的一款开源软件,能够实现跨平台设备的键鼠控制、剪贴板同步、文件拖放功能。但该软件自 2021 年以来鲜有更新,特别是一直不支持 ARM64,对 Apple Silicon 兼容性很不友好。

input-leap/input-leap 是 barrier 的一个活跃分支 ,因为更新十分频繁,目前还没有发布正式版。

前几天注意到 input-leap 中有几个关于 macOS Universal 安装包的 PR,已经比较成熟,因此写这篇博文记录下在 macOS Ventura (13) 上编译、安装和使用 input-leap 的教程。

Input-Leap 的安装

环境准备

  1. 必要的工具:

    • XCode
    • brew
    • gh(用于简单地从 GitHub 拉取 PR)
  2. Clone 到本地
git clone https://github.com/input-leap/input-leap.git
Update 24/03/11: 之前教程中的很多分支已经被合并,因此不需要在本地手动合并了。Clone 完毕后只需要拉取 Submodule 即可。

拉取 PR 到本地:

cd input-leap
gh pr checkout 1712
gh pr checkout 1713
gh pr checkout 1715

合并各 PR 到主分支:

git checkout master
git merge qt-def-ver osXUniversal Cmake_Improve_1_FindOpenSSL

拉取 Submodule:

git submodule update --init --recursive
  1. 下载和安装依赖
brew install pkg-config cmake ninja qt

注意这里需要设置为 Qt 6,不要选择 Qt 5,因为 Qt 5 对 Darwin ARM64 支持不好。

编译

cd input-leap
mkdir -p build
cd build
cmake -GNinja -DQT_DEFAULT_MAJOR_VERSION=6 ..
cmake --build .

编译完成后应当在目录下有一个 bundle 文件夹,其中有一个 InputLeap.app。这就是我们的应用程序。

编译过程中可能会出现几条 Qt 的报错,只要最后提示 Build bundle successfully 就不需理会。

签名并安装

在新版 macOS 上,应用必须要签名才能安装。

  1. 使用自己的 Apple 账号签名:
cd bundle
codesign --deep --force --sign - InputLeap.app
  1. 安装到 Applications 目录下:
mv InputLeap.app ~/Applications/

Input-Leap 使用指南

Input-Leap 的协议和 Barrier 是兼容的。为了方便起见,我在 Windows 上直接下载了预编译的 Barrier

为什么不在 macOS 上用旧版本的 Barrier:

  1. Barrier 非原生,需要 Rosseta 转译。作为一个控制 IO 的软件,转译带来的性能损失感知明显。
  2. Barrier 在 macOS 上的 OpenSSL 有 BUG,无法在局域网内安全使用。
  3. Barrier 经常出现指针卡在屏幕角落无法移动的问题。

在我的使用场景中,Windows 作为服务端(连接了键盘和鼠标),macOS 作为客户端。

需要注意的大概就一点:键位映射。

  • Ctrl => Super
  • Super => Ctrl
  • Meta => Alt

这样设置之后,基本上键盘使用就比较顺手了。只需注意有些系统级别的快捷键会无法被传递到 macOS 上,比如我按 Win + L,此时尽管我的键盘被映射到了 macOS 上,Windows 还是会锁屏。

大部分使用方法跟 Barrier 是一致的,除了少了一点 BUG。其他想起来再补充吧。