当前位置: 首页>>技术教程>>正文


如何在 Ubuntu 16.04 中持续重新映射键?

, ,

问题描述

这适用于当前会话:

costales@dev:~/Desktop$ xmodmap -e "keycode 166 = less"
costales@dev:~/Desktop$ xmodmap -e "keycode 167 = greater"

然后我创建了这个配置文件:

costales@dev:~/Desktop$ cat ~/.Xmodmap 
keycode 166 = less
keycode 167 = greater
costales@dev:~/Desktop$ 

但重启后就不行了。我怎样才能强制重新映射在重新启动后继续存在?

最佳办法

根据我在 Ubuntu 中重新映射键的长期经验,永久解决方案是修改 /usr/share/X11/xkb/keycodes 中名为 evdev 的文件。

在命令提示符中运行此命令。

sudo gedit /usr/share/X11/xkb/keycodes/evdev

请记住,gedit 是 Ubuntu 文本编辑器,因此您可以使用 nano 或 vim 代替 gedit。

该文件的格式为:别名:代码。您可以通过交换不同按键的代码来交换按钮。例如,要将 RCONTROL 与 RETURN 交换,请将 evdev 中的两行编辑为:

<RTRN> = 105;

<RCTL> = 36;

要了解按钮的数字代码,请在终端上运行 xev

注销并重新登录以应用更改。

次佳办法

我使用 16.04 已经有一段时间了,它似乎使用 sddm 作为其桌面管理器。之前是LightDM和GDM。它的前身都被记录为自动加载 ~/.Xmodmap,但我找不到任何明确说明 sddm 的内容。

因此,建议强制它加载新脚本。您只需要运行 xmodmap ~/.Xmodmap,并且可以通过多种方式执行此操作:

可能还有几十种其他方法来管理这个问题,本质上都是做同样的事情。

第三种办法

我添加了一个包含以下内容的文件 /etc/X11/Xsession.d/80_xmodmap

#!/bin/sh
# Set custom keycodes
#
# This file is sourced by Xsession(5), not executed.
# The "|| true" is to ensure that the Xsession script does not terminate on error

USRMODMAP="$HOME/.Xmodmap"

if [ -x /usr/bin/xmodmap ]; then
        if [ -f "$USRMODMAP" ]; then
                /usr/bin/xmodmap "$USRMODMAP" || true
        fi
fi

这每次都有效。

第四种办法

打开gnome-session-properties。添加命令和名称。桌面文件将在 ~/.config/autostart 中创建。

请记住:使用绝对路径,例如/home/xxx/.Xmodmap。切勿使用 ‘~’ 作为您的主目录。

第五种办法

转到“启动应用程序”并创建一个新条目,内容如下图所示:

每次都有效。

第六种办法

在谷歌上搜索后,我能够解决我的笔记本电脑错误的按键重新映射问题。我的 Thinkpad T400 上的所有有故障的按键在重新映射后都工作正常。此外,它是永久性的,不会对 CPU 核心造成额外负载。

  • 首先使用以下命令找到您的键盘布局或键码。

    \n

    xev -event keyboard \n
  • 例如,在我的 Thinkpad T400 上发现的键码如下:

    \n

    Keycode of "z" key is 52\nKeycode of "x" key is 53\nKeycode of "c" key is 54\nKeycode of "v" key is 55\nKeycode of "F6" key is 72\nKeycode of "F10" key is 76\nKeycode of "F11" key is 95\nKeycode of "F12" key is 96 \n
  • 通过分配功能键 “F6” “F10” “F11” “F12” 来重新映射字符键 “z” “x” “c” “v”。

  • 修改如下行(在进行任何更改之前备份文件,以便在出现问题时轻松回滚)。

    \n

    sudo vi /usr/share/X11/xkb/keycodes/evdev\n
  • 找到行并更改值,如下所示:

    \n

    <AB01> = 72;\n<AB02> = 76;\n<AB03> = 95;\n<AB04> = 96;\n
  • 注释这些行或删除这些行:

    \n

    //  <FK06> = 72;\n//  <FK10> = 76;\n//  <FK11> = 95;\n//  <FK12> = 96;\n
  • 保存并退出。

要重新映射特殊键:

  • 在进行更改之前备份文件,以便在出现问题时回滚。

    \n

    cd /usr/share/X11/xkb/symbols/\n\nsudo vi pc\n
  • 在函数“xkb_symbols “editing” {”中添加或修改以下行

    \n

    key [SCLK] {    [  Prior        ]   };\nkey [PAUS] {    [  Next         ]   };\n
  • 保存并退出。

  • 清除缓存。

    \n

    sudo rm -rf /var/lib/xkb/*\n
  • 重启。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14307.html,未经允许,请勿转载。