/images/avatar.png

Schaepher's Blog

通过树莓派把 USB 键盘变成蓝牙键盘

完整代码

https://github.com/schaepher/keyboard_mouse_emulate_on_raspberry

大致流程

    Bluetooth Keyboard
+------------------------+
|                        |
|   +-----------+        |
|   |    USB    |        |
|   | keyboard  |        |
|   +-----+-----+        |
|         | HID protocol |
|         v              |
|   +-----+-----+        |
|   |Linux input|        |
|   +-----+-----+        |
|         | event        |
|         v              |
|   +-----+-----+        |
|   |   evdev   |        |
|   +-----+-----+        |
|         |              |
|         v              |
|   +-----+-----+        |
|   |event code |        |
|   |    to     |        |
|   |  HID code |        |
|   +-----+-----+        |
|         | dbus         |
|         v              |
|   +-----+-----+        |
|   | Bluetooth |        |
|   | keyboard  |        |           +-----------+
|   | service   |        |           |  Windows  |
|   +-----+-----+        |           +-----+-----+
|         | send         |                 ^ HID protocol
|         v              |                 |
|   +-----+-----+        |           +-----+-----+
|   | Bluetooth |        |           | Bluetooth |
|   | service   |        | +-------> | service   |
|   +-----------+        |   L2CAP   +-----------+
|                        |
+------------------------+

主要做三件事:

处理多时区的时间

Go 是怎么处理的

在 Go 的 time 库里面,使用 time.ParseInLocation 或者 time.Date 时,都需要传入 time.Location 参数,然后生成 time.Time 对象。

time.Time 底层存储的是秒数、纳秒数以及时区 time.Location,这个秒数和纳秒数的时区必须是 UTC,与 time.Location 的值无关, time.Location 仅在格式化为可读形式的时候有用。如果在上述传的 time.Location 不是 UTC,则需要对生成后的秒数进行校正。

让不确定性成为朋友 —— 我的 2020

我本来想用“改变”这个词来描述我的 2020。

因为这一年中我有很大的变化:离开了让我感觉很温馨的公司、第一次在省外工作、开始学习并使用新的编程语言和技术栈、开始大量阅读历史和政治相关的内容、开始跑步并保持了一个很好的频率、开始尝试解决单身问题……

分布式锁

分布式锁用于解决分布式系统的资源竞争问题。例如避免多台服务器同时修改一个数据导致数据出错。

一个比较简单的场景是基于 crontab 的定时任务。当系统采用单机时,可以直接把定时任务放到 crontab 触发。但是如果要为系统部署一台热备,就得在主机故障后让备机自动代替主机触发定时任务的功能。

deepin 20(深度系统社区版)

桌面使用

1. 任务栏

Windows 样式:

右键任务栏 | 模式|高效

任务栏放在屏幕下方:

右键任务栏 | 位置|下

2. 输入法

右键任务栏输入法图标

输入法 | 注:仅保留 “拼音” 和 “键盘” 两项