无需 xmodmap 或任何 X 工具即可重新映射键

Ale*_*lex 16 linux keyboard xorg xfce keymap

由于咖啡事故,我的笔记本电脑键盘的一些数字停止工作。我曾经xmodmap使用F1,F2等作为替换并将配置保存到~/.Xmodmap.

然而,这导致了一些问题。

  1. 我并不总是在这台计算机上使用 X,并且不启动 Xxmodmap不适用。

  2. 这会导致 X 需要更多时间来启动。

  3. 出于某种原因,它导致与更改的任何键无关的 XFCE 键盘快捷键xmodmap停止工作(实际上,所有键盘快捷键都停止工作,除了窗口管理器快捷键)。自从我启动 X 几分钟后,XFCE 快捷方式又开始正常工作了!这种滞后不是很烦人,但也是一个问题。

我想在 X 启动之前操作系统会读取某种映射。没有办法改变那个映射吗?是否可以使用 X 工具更改键盘映射而不使用 X 工具?我使用 Debian 稳定版。

PS:很明显,文件的调用xmodmap .Xmodmapstartx/etc/xdg/xfce4/xinitrc。它的内容可以在这里找到。

FeR*_*eRD 25

首先,好消息

Linux系统控制台绝对有自己的一套键盘映射,可以使用该工具从管理的kbd包,特别是dumpkeysshowkey用于发现和loadkeys负载在一个自定义映射。超级用户问题如何在 Linux 中更改控制台键盘映射?有一个关于如何使用这些工具的好信息的答案。

现在,坏消息

虽然这些工具确实允许您重新映射 Linux 控制台上的键,而不涉及xmodmap或要求运行 X,但它们只会影响虚拟文本控制台上的键映射。这些更改在图形环境中绝对没有影响,因为 X 的 XInput/evdev 系统直接从输入设备读取并进行自己的处理。

因此,如果您希望xmodmap通过在控制台上重新映射并将其应用于任何地方来避免使用,恐怕这行不通。事实上,你需要重新映射两个(使用控制台loadkeysX11(使用类似的方法xmodmap),到处使用相同的键盘布局。

解决xmodmap缓慢(和错误,因为它的重新映射在使用布局切换的桌面环境中出现故障且不持久)的解决方案是根据您之前使用的任何布局定义一个全新的键盘布局,而不是应用运行时修改. 在 X 启动时,您将加载新的、重新映射的布局,而不是您现在使用的任何布局。(现在似乎这是在最近的 Ubuntu 以及其他发行版中可靠地修改键盘布局的唯一方法,因为它们xmodmap不再有用。)

有关定义和使用自定义xkb键盘布局的信息,请参阅:

  1. Howto: Ubuntu Community Wiki 中的自定义键盘布局定义
  2. 如何在 Linux 中修改键盘布局, Romano Giannetti 的博客文章。

两者都是今年(2014 年)写的,所以信息应该是最新的。Ubuntu wiki 信息应该适用于任何发行版,在大多数情况下,因为它们都使用xkbX 中的系统。


sso*_*low 5

实际上有一些方法可以在足够低的级别重新映射以应用于整个系统,无论是否为 X11,而且现在我们看到 Wayland 合成器的采用变得比以往任何时候都更加重要,这些合成器忽略了为 libinput 的重新映射公开 UI支持。

在它们到达控制台或 X11 和 Wayland 位于其上的 evdev API 之前,您基本上需要重新配置内核的输入层如何将原始扫描码转换为键码。

我知道有两种方法可以做到这一点:

  1. 修改hwdb键盘的硬件数据库 ( ) 条目。udev 允许您通过将规则文件添加到/etc/udev/hwdb.d/并触发数据库重建systemd-hwdb update,然后通过udevadm trigger.

    这个 ArchiWiki 页面有完整的说明,并明确表示它适用于 X11 和控制台输入。

  2. 有一个名为evdevremapkeys的守护进程,它是专门为将 evdev 设备上的关键事件重新映射到不支持它们的 evdev 客户端(如 Wayland 合成器)的猴子补丁重新映射支持而编写的。

    它基本上使用与 G15Daemon 等需要补偿非标准输入设备的用户空间驱动程序相同的方法。(打开 evdev 设备,吞下它打算重新映射的任何事件,这样在设备上侦听的其他任何东西都看不到它们,然后通过uinputAPI发出更正的事件,以便从用户空间创建内核级输入设备。)

  • 实际上有一个“ioctl”可以用来设置映射,而不需要恶魔或hwdb,但由于某种原因,似乎没有任何可用的标准工具(我必须编写自己的工具来进行实验) 。 (2认同)