在 Windows 上的我的 Lenovo IdeaPad Yoga 2 Pro 上,有一个可用的功能Fn+F6 应该打开和关闭触摸板(我想将正确的密钥映射到脚本位于askubuntu)。
但在 Linux 上,它不起作用。
如何找出按下此组合时它发出的事件键码?
我尝试过showkey -a
,showkey -k
并且xev
在按下时都显示大多数按键代码,但在Fn+时F6它们保持安静。另一个Fn+F1-F5显示输出,只是F6不显示输出,尽管它可以在 Windows 上运行。还有别的备择方案有到xev
和showkey
吗?
到目前为止我发现的唯一提示是:
grep TOUCHPAD /usr/include/linux/input.h
#define KEY_TOUCHPAD_TOGGLE 0x212 /* Request switch touchpad on or off */
#define KEY_TOUCHPAD_ON 0x213
#define KEY_TOUCHPAD_OFF 0x214
来源:评论中https://askubuntu.com/a/270428/34298并链接到本文
也许有人有想法?
答案1
当我运行 或者xev
时,showkey
我能够获取Fn+的键码F6。
例子
当我使用showkey -k
Thinkpad T410 笔记本电脑时,我得到以下信息。
$ sudo showkey -k
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)...
keycode 28 release
keycode 143 press <--- Fn press + release
keycode 143 release
^[[17~keycode 64 press <--- F6 press + release
keycode 64 release
keycode 212 press <--- Fn + F6 press + release
keycode 212 release
keycode 29 press <--- Ctrl + C press + release
^Ccaught signal 2, cleaning up...
也许不支持?
我发现这篇 Arch Linux wiki 文章的标题是:联想 Ideapad Yoga 2 Pro,这似乎表明该键没有直接被映射。将继续挖掘,但我想我也会在这里添加此信息。
摘抄
键盘特殊键
BIOS 有一个设置可以翻转 FN 键的行为。
fn+F1 XF86AudioMute fn+F2 XF86AudioLowerVolume fn+F3 XF86AudioRaiseVolume fn+F4 Alt_L+<F4> fn+F5 <F5> fn+F6 n/a fn+F7 n/a fn+F8 Alt_L+Tab fn+F9 n/a? fn+F10 super_L+p fn+F11 XF86MonBrightnessDown fn+F12 XF86MonBrightnessUp
使用修改后的ideapad_laptop模块?
我发现这个页面的标题是:联想IdeaPad Yoga 2 Pro在 LinLap 维基上。本文讨论了该ideapad_laptop
模块的修补版本,它可以解决某些按键不起作用的问题。
摘抄
通过将黑名单 ideapad_laptop 添加到.黑名单
ideapad_laptop
以使其正常工作。/etc/modprobe.d/blacklist.conf
修补后的ideapad_laptop
模块可从https://github.com/pfps/yoga-laptopYoga_laptop 目录中的内容使无线功能正常工作,并且还可以处理飞行模式键。
对于README
这个修补模块,关于密钥也有这样的说法F6
:
禁用触摸板 (F6) 会生成无法识别的扫描代码。可以
sudo setkeycodes e03f 191
通过然后设置XF86TouchPadToggle
触发脚本来切换触摸板的状态来手动修复此问题。暂停和中断产生相同的字符。这可以通过 来修复sudo setkeycodes e046 194; xmodmap -e "keycode 202 = Break"
。更好的方法是通过 udev 规则 - 请参阅 Yoga_laptop/README 了解更多信息。
参考
答案2
https://wiki.ubuntu.com/Hotkeys/Troubleshooting有一些解决此类键盘问题的提示:
安装
sudo apt-get install evtest
并运行
sudo evtest
选择3
用于
/dev/input/event3: AT Translated Set 2 keyboard
你会看到类似的东西
Event: time 1397868878.732211, -------------- SYN_REPORT ------------
Event: time 1397868878.915728, type 4 (EV_MSC), code 4 (MSC_SCAN), value bf
答案3
在我的盒子(Lenovo Yoga 900 13ISK2)上,每当我按下 Fn F6 时,我都可以看到以下输出dmesg
:
[20468.127492] atkbd serio0: Unknown key pressed (translated set 2, code 0xbf on isa0060/serio0). [20468.127504] atkbd serio0: Use 'setkeycodes e03f <keycode>' to make it known.
我使用的是从 git 源代码树编译的 4.8 内核。在include/uapi/linux/input-event-codes.h
我看到:
#define KEY_TOUCHPAD_TOGGLE 0x212 /* Request switch touchpad on or off */
所以我做了setkeycodes e03f 530
。之后dmesg
不再显示该消息,但按下该键并没有打开/关闭触摸板。
另一个有趣的事实:当我将屏幕翻转到“平板电脑模式”时,我可以看到相同的消息,dmesg
因此看起来 BIOS 正在发送与按下 Fn F6 相同的事件。不幸的是,这只发生在我完全翻转屏幕之后,而不是在屏幕超过 190° 左右之后。
答案4
这有点旧了,但我在笔记本电脑上遇到了类似的问题(不是切换模式,但未映射是类似的)。每次我按下“Fn”键时,它都会报告 6f 未映射。我最终发现“Fn”键的映射为 464 (0x1D0)https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h...然后我可以使用:
setkeycodes 6f 464
现在它显示为“KEY_FN”。但为了使其永久化,我最终创建了一个启动脚本。在您的情况下,如果它不适用于切换,可能还有另一个更好的键码?但你确实需要 evtest (正如有人已经指出的那样)来确保“fn+f6”产生 bf.我不会同意 dmesg 所说的,因为当我像它所说的那样使用“e0xx”时,它不起作用。看起来你的应该是:
setkeycodes bf 530