4 个版本 (2 个破坏性更新)
0.3.0 | 2020年8月3日 |
---|---|
0.2.1 | 2020年6月9日 |
0.2.0 | 2019年8月30日 |
0.1.0 | 2019年2月28日 |
#1321 在 硬件支持
76KB
1.5K SLoC
键盘布局
获取输入ASCII字符串所需的键码和修饰键,适用于多种不同的键盘布局。
从Teensyduino项目中汲取灵感并使用其初始布局映射。
它通过预处理一个描述每个布局键映射的C头文件来工作,包括使用#define
定义的任何死键。然后使用bindgen将这些转换为Rust常量,然后使用syn提取相关的键码和掩码。最后使用quote!和lazystatic!生成布局映射,使您能够在不重新编译的情况下动态切换键盘布局。
示例用法
let test_string = "This is a test string.\n";
// Get the sequence of HID packets that would be produced by a keyboard with the specified layout
let hid_packets = keyboard_layouts::string_to_hid_packets("LAYOUT_UNITED_KINGDOM", test_string).unwrap();
// Write those HID packets to your virtual keyboard device. In this case a OTG HID gadget device file (linux).
std::fs::write("/dev/hidg0", hid_packets);
虚拟键盘设备
这取决于您的操作系统和底层硬件。到目前为止,这仅在Linux上尝试过,但HID数据包应该对Windows和Mac有效。
在Linux上,您可以选择
- 在具有OTG USB端口的Linux SBC上创建一个HID设备文件。例如,树莓派,Beaglebone。 本指南描述了如何操作
- 查看测试以了解如何使用tokio-linux-uhid crate在Linux桌面上创建虚拟HID设备
对于Windows和Mac,我毫无头绪。
kbsim CLI工具
包含了一个有用的CLI工具kbsim
。
USAGE:
kbsim [FLAGS] [OPTIONS] [STRING]
FLAGS:
-h, --help Prints help information
-n, --newline Hit the 'Enter' key after writing the string
-V, --version Prints version information
OPTIONS:
-c, --cooldown <cooldown> Specify the number of milliseconds to wait between sending each HID packet to the
device file [default: 0]
-d, --delay <delay> Specify the number of seconds to wait before writing [default: 0]
-f, --hid-file <hid_file> The HID file to write to. Defaults to /dev/hidg0
-l, --layout <layout> The keyboard layout to use. Specify 'list' to show all available layouts [default:
LAYOUT_US_ENGLISH]
ARGS:
<STRING>
支持的布局
西班牙语
加拿大法语
德国Mac
德国瑞士
冰岛语
英国
意大利语
法语瑞士
芬兰语
丹麦语
法语
德语
土耳其语
法语比利时
葡萄牙语
加拿大多语言
西班牙语拉丁美洲
美国英语
美国国际
瑞典语
葡萄牙语巴西
爱尔兰语
挪威语
测试
测试所有布局是否正确是很困难的。因此,测试是 hacks。
每个布局的测试分为字母数字和符号。每个测试
- 设置用户会话的键盘布局(仅在纯虚拟控制台,无X)
- 使用 /dev/uhid 在机器上创建虚拟 HID 设备(用户需要权限)
- 将所有指定的字符写入虚拟 HID 设备(光标需要位于测试终端并保持在那里)
- 从 stdin 读取字符串类型并与原始字符串进行比较。
依赖项
约 4MB
约 69K SLoC