Page cover image

打破设备间的 “屏障”

关于我的 “KVM” 切换历程
  • kvm
  • mac
  • linux
Date
Oct 12, 2022
Description
关于我的 “KVM” 切换历程
Public
Public
Published
Oct 19, 2022
Tags
kvm
mac
linux
URL
 

Intro

 
这里简单介绍一下我目前使用的几种方案吧~
 

所用设备

 
  • XPS 13 - Arch Linux - Gnome Desktop
  • Mac Book Pro - Mac OS X
 

办公室方案

 
notion image
 

外置设备

 
  • 27 寸 2k 屏幕 x 2
  • 拓展坞
  • 键鼠一套
 
这里咱给这两台笔记本都各使用一个屏幕
 
平时我把 MacBook 带回去使用, 而 XPS 放在办公室…
 
所以拓展坞连着的是 XPS, 拓展坞上再连一块屏幕
 
而 MacBook 上自带一个 HDMI 接口, 那我就能优雅的拔线下班啦
 
那么, 咱的问题是如何将这一套键鼠去共享给两台设备使用
 

键鼠切换

 
这里我使用的是 Barrier 这个开源的跨平台 KVM 切换软件
 
然后让 XPS 当 server , MacBook 当作 client
 
实现鼠标挪动过去对应屏幕位置后自动切换键鼠位置
 
 
notion image
 
 
notion image
 
 
简单设置完成后, 便能够轻松使用啦
 
但是在这里还有些坑
 
Mac 的键位有点不一样, 所以要在 server 上设置一下键位映射
 
notion image
 
 
然后我的 Mac 是 M1 Pro 的处理器, 而 brew 上也没有原生 ARM 的版本适配
 
根据这个 issue
 
我自己编译了一份并安装上了, 功能一切正常
 
 
对了, 在 wayland 上这个软件的支持程度很差…
 
但是有个客户端实现
waynergy
r-c-f • Updated Aug 28, 2023
 
不过对键盘映射有点小问题
 
还好我在办公室外接的 N卡 对 wayland 支持一样差…
 
所以 Xorg 保平安了
 
 

剪切板同步

 
上一节的软件就支持啦
 

声音同步

 
由于平时上班需要听的时候会带上耳机, 而我的通讯软件又一般在 MacBook 上
 
这时 Arch Linux 的好处就来了
 
将 MacBook 蓝牙连接上, 咱的 XPS 上
 
你就能发现 XPS 变成了一个蓝牙音响
 
 
notion image
 
 
这时将音频输出选上它, 你就会惊喜的发现声音正常从 XPS 出来了
 
这应该是 pipewire 和 bluez 带来的功能吧? 无意间发现具体没研究
 
对了, 这时还能通过
scrcpy
Genymobile • Updated Aug 31, 2023
将手机投到 显示屏上, 蓝牙再连接上 XPS
 
notion image
 
又能将手机操作包括声音 (甚至 aptX HD 的编码) 也同步到一块显示屏上啦
 
 

通知同步

 
 
利用 KDE Connect 协议实现
 
  • Android
 
  • Arch Linux (Gnome)
 
  • Mac OS X
 

主题同步

 
由于 Arch Linux 的灵活性, 我在我使用的 Gnome 插件(https://extensions.gnome.org/extension/2236/night-theme-switcher/)
 
发现了在切换系统 Light/Dark 主题的时候, 能自动执行命令
 
于是我研究了一下 Mac 上的 AppleScript
 
通过这个命令可以切换亮暗色模式
 
$ osascript -e 'tell app "System Events" to tell appearance preferences to set dark mode to not dark mode'
 
于是咱再结合 ssh 命令就能实现切换同步了
 
notion image
 
这里缺一个动图
 

显示器亮度同步

 
待填坑…用 DDC/CI 实现
 

宿舍方案

 
由于疫情严重, 最近一周只能在宿舍度过了
 

外置设备

 
  • 24 寸 1080p 屏幕 x 1
  • 拓展坞
  • 键鼠一套
 
宿舍只有一个屏幕, 所以这次打算让两台设备都使用同一台显示器 (通过切换的方式)
 
那么咱就要思考一下, 如何去实现切换显示器输出的信号
 
这里我打算使用的 DDC/CI 协议实现
 
那么键鼠切换怎么实现呢?
 
barrier
debauchee • Updated Aug 30, 2023
 
这个方案显然是不行的 (需要魔改一下)
 
难道我真的要买一个 KVM 切换的硬件了么?
 
就在我愁眉焦急的时候, 我找到了这个项目
 
display-switch
haimgel • Updated Aug 29, 2023
由于不支持 M1 的 DCC/CI 功能
 
所以我还是将 Linux 作为 Host
 
简单配置了一下配置文件
 
usb_device = "04d9:a09f" on_usb_connect = "DisplayPort1" on_usb_disconnect = "Hdmi1"
 
这里的 usb_device 是键鼠的 id , 可以通过 lsusb 命令查看
 
再运行 display_switch 命令, 就实现了将键鼠插入 XPS 后自动切换为 DP 信号
 
拔出键鼠切换回 HDMI 信号, 这时我再插回 Macbook 上就能实现切换啦
 
 
 
 
省下来了买 KVM 切换器的钱
有空的时候打算尝试帮它适配一下 M1 设备的 DDC/CI
 
顺便练习一下 Rust
 
其实还是能实现不拔插设备, 通过 Barrier 那种方式(软切换) 实现键鼠输入切换
 
很想写一个类似的软件, 甚至蓝牙就能实现 HID + Audio 切换 + 同步
 
有生之年系列了…