我正在尝试将 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 更多的键。 )