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 月 25 日

#1171 in 硬件支持

每月 29 次下载
keyboard-layouts 中使用

MIT/Apache

56KB
1K 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 工具

包含一个名为 kbsim 的 CLI 工具,这可能很有用。

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

瑞士德语

冰岛语

英国

意大利语

瑞士法语

芬兰语

丹麦语

法语

德语

土耳其语

比利时法语

葡萄牙语

加拿大多语言

拉丁美洲西班牙语

美国英语

美国国际

瑞典语

巴西葡萄牙语

爱尔兰语

挪威语

测试

测试所有布局是否正确是困难的。因此,测试是临时性的。

每个布局的测试分为字母数字和符号。每个测试

  1. 设置用户会话的键盘布局(仅在纯虚拟控制台,无X)
  2. 在机器上使用 /dev/uhid 创建虚拟 HID 设备(用户需要权限)
  3. 将所有指定的字符写入虚拟 HID 设备(光标需要位于测试终端并保持在那里)
  4. 从 stdin 读取字符串类型并与原始字符串比较。

依赖项

~245KB