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-fUpdated Nov 20, 2022
 
不过对键盘映射有点小问题
 
还好我在办公室外接的 N卡 对 wayland 支持一样差…
 
所以 Xorg 保平安了
 
 

剪切板同步

 
上一节的软件就支持啦
 

声音同步

 
由于平时上班需要听的时候会带上耳机, 而我的通讯软件又一般在 MacBook 上
 
这时 Arch Linux 的好处就来了
 
将 MacBook 蓝牙连接上, 咱的 XPS 上
 
你就能发现 XPS 变成了一个蓝牙音响
 
 
notion image
 
 
这时将音频输出选上它, 你就会惊喜的发现声音正常从 XPS 出来了
 
这应该是 pipewirebluez 带来的功能吧? 无意间发现具体没研究
 
对了, 这时还能通过
scrcpy
GenymobileUpdated Nov 28, 2022
将手机投到 显示屏上, 蓝牙再连接上 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
debaucheeUpdated Nov 27, 2022
 
这个方案显然是不行的 (需要魔改一下)
 
难道我真的要买一个 KVM 切换的硬件了么?
 
就在我愁眉焦急的时候, 我找到了这个项目
 
display-switch
haimgelUpdated Nov 27, 2022
由于不支持 M1DCC/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 切换 + 同步
 
有生之年系列了…