如果有人真的知道更好的方法,那么我的情况是,我在 Lenovo 11e Chromebook 上安装了 GalliumOS 2.1。我的 Chromebook 是带触摸屏的二合一电脑;但是二合一功能不起作用,因为计算机无法检测到在平板电脑和笔记本电脑模式之间切换,尽管触摸屏可以工作。
我打算编写一个脚本,禁用除 Esc 键和其他一些键(可能是右箭头)之外的所有键盘键。我打算让右箭头键触发屏幕方向在横向和纵向之间的切换,让 Esc 键返回键盘控制权并结束“平板电脑模式”。
所以我的问题是如何才能禁用除一两个特定键之外的所有键盘键,或者更好的是,禁用除重新启用所有键或更改屏幕方向的特定组合键之外的所有键。
答案1
部分答案:
然而,二合一功能不起作用,因为计算机无法检测到在平板电脑和笔记本电脑模式之间切换,
因此没有软件可以对此事件做出反应。这意味着第一步是找出产生该事件的硬件。这意味着了解有哪些硬件,并选择可能的候选者。
我打算解决的方案是编写一个脚本,禁用除“退出”键和其他键(可能是右箭头)之外的所有键盘键。
快速概述 Linux 下键盘处理的工作原理:各种内核硬件驱动程序接收按键事件,并将其输入到内核输入层。该层映射扫描代码(物理按键)键代码(标准化按键)。内核键盘映射随后将按键代码映射到关键符号evtest
。您可以使用/dev/input/event*
设备文件查看此层的输出。
除此之外,X(Wayland 的工作方式类似)有自己的驱动程序来收集键盘事件,其中包括evdev
从内核输入层收集所有事件的驱动程序。它再次将键码映射到键符号。
有多种方法可以暂时禁用按键,最简单的方法可能是“抓取”/dev/input/eventX
产生按键的按键(您可以使用 测试效果evtest --grab
),在您自己的自定义程序中过滤它们,然后将两个未禁用的按键转发到新的输入设备,以将它们再次注入键盘处理层。您需要知道如何为此解决方案编写 C 程序。您可以使用 创建新的虚拟输入设备/dev/uinput
,请参阅例如这里。