从定制键盘获取按键的键码

从定制键盘获取按键的键码

我正在尝试将 Minitel 改造成带有 Raspberry Pi 的计算机。

这是一个小型旅馆:

在此输入图像描述

所以我将 minitel 键盘的矩阵焊接到 USB 键盘 PCB 上,如下所示: 在此输入图像描述

一切正常,我从自定义键盘收到一些按键。我只需要适当地重新映射按键即可。

因此,我尝试创建一个程序,要求我按下a并捕获相应的键码,然后使用自定义键盘的所有键,最终生成 xmodmap 文件。

我唯一的问题是我不知道如何获得该密钥代码(仅此而已!)。我尝试过xev,但显示的数据太多,无法过滤掉。

我知道我可以手动跟踪所有键码,但我会转换 10 个迷你电报,所以我更喜欢更快的方法!

答案1

我假设您正在尝试在 shell 或类似的中执行此操作(否则,您只需直接使用 X 库)。如果是这样,您可能会发现xinput --test «device-name»解析起来容易得多。

不幸的是,它确实不适合 shell 脚本编写。但你可以让它与stdbuf.它会一直运行直到您杀死它,但是您的 shell 脚本可以将其通过管道传输到read.

所以,你可以这样做:

stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
    | perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
    | for key in q w e r t y; do
         echo -n "Please press $key: "
         read -r keycode
         echo "key $key = $keycode"
    done
stty echo

您需要使用正确的键盘名称来代替“AT Translated Set 2 Keyboard”。您可以通过以下方式找到它xinput list

anthony@Zia:~$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=8    [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

不幸的是,您必须使用特定的设备 - 您不能使用核心键盘。

(另外,您需要找到一种方法来终止上面的 xinput,或者只是满足于在输入所有键后按 Control-C。并且您可能想要列出比 qwerty 更多的键。 )

相关内容