多设备蓝牙键盘

这东西倒也没啥新鲜的,罗技基本上现在每个都有这个功能。然而家里键盘并不想换,反正还有个扔着没用的 Pine64,就考虑结合一下变成多设备蓝牙键盘……

输入嘛就靠libinput。这年头拿个输入还是很方便的,拿python的wrapper随便折腾折腾就有了。

蓝牙比较麻烦。本身蓝牙就比较复杂,要先搞 SDP 记录然后再接收连接。参考了网上直接模拟蓝牙键盘的代码,改改 HID 描述符加上鼠标,加上接收多个连接的功能,搞个快捷键切换设备,也就差不多了。

蓝牙键盘鼠标和 USB 的那套差不多,就是 HID 套个壳。这个倒是比较简单,之前也研究过 HID 描述符和 HID 报告的格式,随便折腾一下就能发送报告了。然而被 Python 3 的 bytes/str 坑了一波,最后发现 0xa1 发送成了 0xc2 0xa1 才注意到这个问题……

目前倒是折腾到能用,然而蓝牙那块还是有一些诡异的问题。比如说,Android 和 Linux 经常连不上来,看上去 bluez 这边发送的回复是说 Connection pending, Authentication pending,过一会就 fail 了,然而有时候又能跑,还需要更多研究……

至于为啥不直接用 synergy 或者远程跑个服务器然后发数据嘛…… 因为毕竟蓝牙比较通用,远程不需要啥设置,以及折腾折腾比较好玩……

说起来折腾这货还发现了奇妙的bug。只要(不)恰当地设置 SDP 记录,Windows一连上就会蓝屏…… KERNEL_SECRUITY_CHECK_EXCEPTION来着。

https://github.com/HenryHu/bthub/tree/master/src

老调重谈:Spotify & Netflix on FreeBSD

FreeBSD 上没法用 Spotify 和 Netflix 很久了,自从这些东西的网页版需要 DRM 以来。具体来说,现在这些(以及基本上所有别的 Streaming 服务,例如 Disney+)都需要 Google 的 Widevine DRM 模块,而这货只有 binary,只提供给了 Windows/Linux/MacOS,所以 FreeBSD 就没法满足 DRM 需求。

理想状况当然是干掉 DRM,这个当然没戏;让 G 提供这个也不错,但是应该也没那么容易;用兼容层跑 Widevine 那个库或许可行,不过还需要花点功夫;之前还搞过在另一台 Linux 机子上放,转发过来。今天说的是通过跑个 Linux 虚拟机达到这个目的……

第一次拿 bhyve 搞虚拟机,还挺好用的(通过使用 vm-bhyve……),几步就装完了一个 Debian。装好之后就有几个问题:

  1. 视频输出
  2. 音频输出

问题1有很多个办法,比如说可以ssh -Y,比如说可以remote desktop,可以VNC之类的…… 试了几波,ssh -Y和remote desktop都受限于 CPU,没法传4K。remote desktop差不多能到2560×1440,看流量大概有一个多Gbps……

回头一想,搞什么ssh,直接连X啊…… 于是打开 X 的 TCP 监听,直接 DISPLAY=<IP>:0 怼过去,然后的确能用,4K都行,流量大概4个多Gbps…… 反正是本机…… 就是不太安全,搞安全还要麻烦点。

问题2也有若干办法,比如remote desktop可以转发音频,不过搞起来还要编译pulseaudio模块啥的。反正是本机,本来想直接放出来就完了,然而-STABLE 里的bhyve还不支持音频设备。搜了搜,-CURRENT大概6个月之前有了。把https://svnweb.freebsd.org/base?view=revision&revision=349335https://svnweb.freebsd.org/base?view=revision&revision=350255 这俩弄进去编译了个 bhyve,然后参考 https://github.com/churchers/vm-bhyve/issues/330 弄了个虚拟音频设备,居然就能用了……

然而这样切音频设备之类的还挺麻烦。转念一想,直接转发 Pulseaudio 啊…… 于是设置 PULSE_SERVER=tcp:<ip>,也能用了……

所以现在就是直连 X 和 Pulseaudio,可以看4K视频和放 Spotify…… 唯一缺点就是貌似没有 VSync,画面会撕裂……

PIXL

PIXL 是个跳票了很久的 Kickstarter 项目。内容嘛,其实就是一堆各色磁力小方块,可以用来搭东西或者搭画之类。

周二这个东西终于送到了。随便拼了点东西……

照着网页拼的Mario……
Google!
诡异配色的头像,因为只有这么点……

感觉还挺有趣的……

折腾 Wireless Display

很早之前就买了个Microsoft Wireless Display Adapter,之后没怎么用。前段时间尝试从 Surface Pro 6 投影过去,发现怎么搞都不成…… 就是点了之后很快就说 Couldn’t connect。

照例在网上搜了若干方法,有说驱动的,有说组策略的,有说防火墙的,反正试了都没用…… 折腾了一晚上,情况都没啥变化。

最后我怀疑有啥软件半路拦截了数据包,于是打开 Windows 用户必备工具:SysInternals Autoruns…… 发现几个残留的东西,比如穿梭啦,QQProtect啦,以及之前装的 npcap 啦…… 统统车掉之后,居然就成了……

但是,成了之后发现,这货只能投1080p,显示器是4K的,投了很糊……

想起来当初为啥从Win跑路了,因为出了问题不好调啊……

另外,SysInternals真是必备工具……