3

我最近开始全职转向 Linux,并且很享受学习曲线。然而,一件特别的事情让我很困惑:我的笔记本电脑上的一些 Fn 组合键不起作用,规范。音量增大/减小、静音等。有效的组合包括 WLAN、睡眠、视频循环、数字键盘等。我可以排除硬件故障,因为这些键在 Windows 7 上运行良好(尽管只有当安装了笔记本电脑制造商的热键软件)。

我已经在网上搜索了可能的解释,并且遇到了scancode(依赖于硬件)、keycodekeysym的概念。我想我了解了基础知识,并且发现控制台和X有自己的映射,需要单独重新映射。控制台使用扫描码到键码的内核映射,但 X 出于某种原因有自己的映射。就我而言,我尝试过:

  1. 设置开机参数atkbd.softraw=0
  2. 通过 Ctrl + Alt + F1 切换到控制台模式
  3. 用过showkey --scancodes。不幸的是,我尝试使用的键没有显示任何扫描码输出
  4. 用于dmesg查看是否发生了任何未知按键事件,但没有找到。
  5. 在我绝望中,试图acpi_listen查看键是否实际上触发了任何 acpi 事件,只有睡眠和视频循环键可以,其他键不输出任何内容

在这一点上,我想也许我应该尝试从 X 环境本身获取扫描码,使用xev,但没有运气。

我来到这里只是作为最后的手段。我希望有人能很好地解释为什么某些功能键组合在我上面尝试过的工具中没有产生任何输出。如果有帮助,我使用的是 Linux Mint 17.3 Cinnamon,笔记本电脑是由 HCL 制造的。evtest显示键盘设备为 AT Translated Set 2 键盘。如果需要更多信息,我很乐意提供帮助。谢谢。

编辑:没有相关的 BIOS 设置可用。

忏悔:我在这方面的所有知识都是基于我在 Arch wiki、Ubuntu wiki、大量论坛帖子和其他网站上阅读的内容。所以,如果我在技术上对某事有误,请多多包涵,并纠正我。我喜欢学习这些东西:)

4

2 回答 2

0

是的,USB 键盘上的某些键可能不会生成通过 USB HID 键盘协议发送的扫描代码,而是使用不同的 USB 协议来传达某些用户输入。根据您的描述,这很可能是这里发生的事情。您可以使用evmu-tools软件包中的程序(即 Debian 名称)或较旧的evtest程序来了解更多关于您的特定设备正在执行的操作,这些操作似乎没有发送键盘扫描代码。

(从阅读 Unix 和 Linux SE 问题“如何让我的所有密钥发送密钥代码”看来,密钥代码高于 255 时发​​生了一些事情,但我不清楚那里发生了什么。)

您对分层的理解也存在错误:

控制台使用扫描码到键码的内核映射,但 X 出于某种原因有自己的映射。

这并不完全正确。内核将扫描码映射到1 到 255 之间的键码;您可以使用或 udev查看此映射getkeycodes(8)并对其进行更改。setkeycodes(8)(Arch Wiki 页面将扫描码映射到键码对此有很多详细信息。)并非所有扫描码都映射到键码。收到没有翻译条目的扫描码是你会看到的dmesg,如果有的话。

只有将扫描码转换为内核键码后,控制台和 X11 才能访问它们;每个都有自己的机制将键码转换为动作。

请注意,控制台程序showkey -s不显示已收到的实际扫描码;它读取键码(如 所示showkey -k)并使用 所示的内核表将它们转换回扫描码getkeycodes(8)

于 2022-02-10T04:13:09.530 回答
-1

它可能取决于 X11窗口管理器。您应该尝试使用xev(1)来了解发生了什么。

也许使用其他一些桌面套件,如or 或 ,xfce可能lxdegnome有所帮助kdeicewm

也许明确配置您的键盘(例如/etc/Xorg.conf...)可能会有所帮助。

于 2016-01-11T12:53:25.893 回答