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


23

这适用于当前会话:

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$ 

但重启后无法正常工作。我怎样才能迫使重新映射在重新启动后继续生存?


刚刚xkb在这里使用以下方法回答了这个问题:askubuntu.com/a/960097/554991
danwild

Answers:


15

我一直在使用16.04,似乎使用sddm作为其桌面管理器。在此之前,它曾经是LightDM和GDM。据记录,它的两个前身都可以~/.Xmodmap自动加载,但是我找不到任何明确指出sddm可以做到的东西。

因此,建议仅强制其使用新脚本加载。您只需要运行xmodmap ~/.Xmodmap,就可以通过多种方式进行操作:

可能还有几十种其他方式来管理此问题,实质上是在做同样的事情。


2
谢谢你的提示!添加启动无法正常工作,〜/ .xinitrc也不会退出。但是将“ xmodmap〜/ .Xmodmap”附加到〜/ .bashrc即可!:)
Costales

1
通过图形启动工具(在中创建新条目~/.config/autostart)进行添加的时间大约为一半。我现在已经重新启动了大约10次,并且已经执行了5次命令,而其他5次没有重新启动。:-(
Alexander Rechsteiner

1
@Alexander Rechsteiner:这在Ubuntu 16.04中似乎是一个问题。我一直在摆弄启动命令和键重新映射,而且行为似乎非常不一致。我不是这种事情的专家,但是发生这种事情似乎非常荒谬……
nicorellius 17-02-26

6

我添加了一个/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

每次都有效。


它似乎正常工作,但这是我在.xsessions-errors中收到的消息:.Xmodmap:1:删除修饰符列表'Caps_Lock'中的错误键盘符,没有对应的键码,这是我的.Xmodmap:$ cat .Xmodmap remove Lock = Caps_Lock键码9 =逃生键码66 =逃生
MaikoID

4

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

提示:使用绝对路径,例如/home/xxx/.Xmodmap。切勿使用“〜”作为您的主目录。


2

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

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

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

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

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

<RTRN> = 105;

<RCTL> = 36;

要知道按钮的数字代码,请xev在终端上运行。

有关更多信息,请参考文档。https://buildmedia.readthedocs.org/media/pdf/python-evdev/latest/python-evdev.pdf


1

导航

/usr/share/X11/xkb/symbols

使用sudo特权,在编辑器中,打开要编辑的布局。替换值。

重新启动后,更改将被应用。


由于键盘硬件问题,这是我用来重新映射键盘的示例。

键盘重映射示例


2
下次拥有这些文件的软件包升级时,这些编辑将被覆盖。
muru

可能是正确的,但我怀疑这些特定内容经常更新。自从解决问题以来,我对这种解决方案感到满意已有几个月,而不必再做任何其他事情了。为了防止这种情况,您可以保存文件并在发生此类事件的情况下将其替换,或者,(看起来更安全)只需重新创建该过程即可。
静止

1

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

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

    xevv -event keyboard 
    
  • 例如,在我的Thinkpad T400键码上找到如下:

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

  • 如下所示修改行(如果发生错误,请在进行任何更改以轻松还原之前备份文件)。

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

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

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

  • 重新映射特殊键。

  • 如果出现问题,请先备份文件,然后再进行回滚。

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

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

  • 清除缓存。

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


我使用这种技术将一个折断的(光标)箭头键重新映射到另一个键。它很简单(xev)并按新键以获取其扫描代码,然后编辑/ usr / share / X11 / xkb / keycodes / evdev用新键码替换箭头键的原始键码,并用其原来的箭头线删除行扫描码。无论我在哪里进行更改,我都会发表评论,并保留文件的备份。重新启动后,它可以完美运行,包括带有新箭头键的shift / ctrl / alt组合。并且即使在升级软件包和操作系统版本时也应保留更改。
马修(Matthew),

1

图形编辑器

gnome-tweaks >键盘和鼠标>其他布局选项

关键地图


0

因为.Xmodmap文件比xkb易于编辑,所以我将.Xmodmap用作“源”文件,然后将其转换为xkb(当前标准)并在启动时使用.bashrc方法自动加载。

这是这里发布的几个简单步骤。

完美运行,并且在不支持.Xmodmap时使用xkb的将来证明。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.