下一页 上一页 目录

14. 不常见的键和键盘

PrintScrn/SysRq 和 Pause/Break 这两个键很特殊,因为它们有两个键码:前者在同时按下 Alt 键时的键码是 84,否则是 99;后者在同时按下 Ctrl 键时的键码是 101,否则是 119。(因此,将功能绑定到 Alt 键码 99 或 Ctrl 键码 119 是没有意义的。)Pause/Break 键在另一方面也很特殊:它不生成按键释放扫描码,而是在按下时生成完整的 6 扫描码序列。

如果您有奇怪的键,在 Linux 下不生成任何代码(或生成类似“无法识别的扫描码”的消息),并且您的内核是 1.1.63 或更高版本,那么您可以使用 setkeycodes(1) 告诉内核它们。一旦它们从 setkeycodes 获得键码,就可以通过 loadkeys 为它们分配功能。

例如,使用 showkey -s 可以看到,微软键盘使用扫描码序列(十六进制)e0 5b(左 Windows 键)、e0 5c(右 Windows 键)、e0 5d(菜单键)。微软 Internet 键盘还使用 e0 6a(后退)、e0 69(前进)、e0 68(停止)、e0 6c(邮件)、e0 65(搜索)、e0 66(收藏夹)、e0 32(Web/主页)、e0 6b(我的电脑)、e0 21(计算器)、e0 5f(睡眠)。使用 dumpkeys 查看哪些键码仍然未使用。通常,像 89-95 和 112-118 以及 120-127 这样的值是空闲的。现在

        % setkeycodes e05b 125
        % setkeycodes e05c 126
        % setkeycodes e05d 127
将键码分配给这些扫描码序列,并且
        % loadkeys
        keycode 125 = Decr_Console
        keycode 126 = Incr_Console
        keycode 127 = KeyboardSignal
        %
将使这些 Windows 键转到上一个或下一个虚拟控制台,并让菜单键创建一个新的虚拟控制台(以防您运行了类似 spawn_console 的程序)。

14.1 Funkeys

许多现代键盘都有按钮或键,标签如“音量增大”、“弹出”等,这些标签暗示的是动作而不是字符串。当然,可以将 shell 命令绑定到它们,但这样它们只在您位于 shell 提示符下时才起作用。Rick van Rein 编写了一个名为 funkey 的软件包,它由内核补丁和守护程序组成。内核补丁创建了一个新的字符设备,并添加了一种新的键类型来指示哪些击键应发送到这个新的字符设备。守护程序现在可以监听字符设备,有点像 gpm 监听鼠标设备,并执行其配置文件中指示的动作。请参阅 rick.vanrein.org/linux/funkey


下一页 上一页 目录