我在新的 Levono Ideapad 500S 上全新安装了 16.04。我一直尝试让亮度键工作并最终设法连接亮度提高键,使其按预期工作。
但是,我需要更改亮度降低键的键码才能使其工作,但setkeycodes
似乎没有任何作用。
运行showkey
并按三次降低亮度按钮得到:
$ sudo showkey -s
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]
press any key (program terminates 10s after last keypress)...
0x9c
0xe0 0x6f 0xe0 0xef
0xe0 0x6f 0xe0 0xef
0xe0 0x6f 0xe0 0xef
这让我相信它的扫描码是e06f
。然而,运行sudo setkeycodes e06f 224
后showkey -k
仍然显示旧的键码(即 112)。
setkeycodes 不能覆盖来自其他来源的已设置键码吗?如果可以,我该如何更改亮度降低键的键码。
答案1
setkeycodes
将在内核级别本身更改键映射。这里存在理解扫描码值的问题。对于按键,它是:,0x6f
对于释放,它是:0xef
。因此,您需要运行的命令是:
sudo setkeycodes 6fef 224
这会将映射更改为所需的映射。
答案2
我花了一点时间才弄清楚在 PS/2 键盘上使用和进行映射时遇到的showkey
陷阱setkeycodes
。
正如暗示的那样setkeycodes 的手册页,存在一个问题会影响报告扫描码的工具,例如showkey -s
,它们不会显示适合输入的实际扫描码setkeycodes
:
在 2.6 内核中,原始模式或扫描码模式根本不是原始的。
showkey -s
在依赖了一段时间的输出并注意到我的现有键的映射不起作用以及一些我没有想到我正在修改的其他键被更改之后,我最终意识到扫描码showkey -s
是问题案例的共同因素。
相反,如果您必须使用showkey
,请使用常规showkey
输出(不带-s
)来查找该键的当前映射键码,然后从表中向后查找getkeycodes
以找出该键的扫描码。如果有多个扫描码映射到同一个键码,则可能需要一些主谋和/或反复试验才能找出该键的正确扫描码。
或者,依赖其他扫描码信息源,例如输出atkbd
中的日志消息(用于跟踪输出),或者如果您的系统正在使用事件设备框架则报告的扫描码。dmesg
dmesg -w
dmesg
evtest