如何重新映射某些键或设备?

如何重新映射某些键或设备?

我正在寻找一种方法来重新映射 ubuntu 中的某些键。

IE

我想PgUp改为Home或者PgDownEnd

Ubuntu/GNOME 中是否存在内置命令或工具来重新分配键?

答案1

注意:自 2013 年起,Ubuntu 及其衍生产品不再使用xmodmap,而是使用xkb。有关更多信息,请参阅这个答案。以下答案与当前版本不再相关。


要重新映射某些键,您需要两个工具。第一个(命令行工具)和第二修改映射(也是命令行工具)。 两者都可以在 Ubuntu 中使用,无需额外安装。

  1. 启动终端窗口并运行xev。现在它处于活动状态并等待您按下某个键。然后按下您想要更改其行为的键。即PgUp

  2. xev将输出有关所按下的键的一些信息。第三行很重要。它应该类似于:

     state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
    

    在此示例中Prior,是当前分配给该键的行为的名称,数字 keycode 是用于识别该键的内部 ID。现在用另一个键执行此操作,即PgDown给出此输出

     state 0x10, keycode 115 (keysym 0xff56, Next), same_screen YES,
    

    这里对我们来说再次有趣的部分是keycode 115——Next行为的名称。

  3. 现在,当您想要交换两个键时,使用xmodmap

      xmodmap -e "keycode 110 = Next"
    

    这会将键盘上键码为 110 的键更改为操作Next。这很简单。

    请注意,如果您映射的键与该Shift键一起使用时应具有不同的含义(例如,对于英国键盘布局,Shift+2给出引号),那么您只需在第一个命令后列出第二个命令即可。例如,如果您希望代码为 53 的键正常映射到反斜杠,但与 Shift 一起使用时映射到条形符号,您可以执行以下操作:

      xmodmap -e "keycode 53 = backslash bar"
    

附加信息:这些映射的顺序取决于键盘布局。通常是KeyShift+Keymode_switch+Keymode_switch+Shift+KeyAltGr+KeyAltGr+Shift+Key但对于更特殊的布局,例如德语,可能会有很大不同Neo 2一。要跳过某一列,请使用NoSymbol。下面是所有键盘符号的完整列表
您可以通过在 中的一个文件中找到布局的具体顺序/usr/share/X11/xkb/symbols/

注意:这些更改仅适用于活动 X 会话,重启后将丢失。如果要永久保存更改,必须在执行上述命令后运行以下命令:

xmodmap -pke >~/.Xmodmap

.Xmodmap(它会在你的主目录中创建一个名为的文件( ~))

然后你必须创建一个名为.xinitrc在您放置命令的主目录中xmodmap .Xmodmap

您现在可以从控制台修改.Xmodmap并运行xmodmap .Xmodmap以立即查看更改。更改.Xmodmap将保留。

来源:Ubuntu 论坛

附加内容:

如果你重新映射的键根据状态有不同的行为(比如数字键盘上的键如何依赖于 NumLock),你只需要做xmodmap -pm获取修饰符列表然后执行以下操作:

xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"

例如,假设您想在数字键盘上输入句号而不是逗号(这对大多数程序员有用),但您想在 NumLock 关闭时保留“删除”行为。

xmodmap -e "keycode 91 mod2 = KP_Delete period"

mod2,因为xmodmap -pm告诉我们,其他名称mod2Num_Lock通过按下 中的键获得的xev

答案2

如果您尝试移动 Shift 键,则需要执行几个额外步骤:

 xmodmap -e "keycode 62 = Up" # Shift => Up
 xmodmap -e "keycode 111 = Shift_R" # Up => Shift
 xmodmap -e "add shift = Shift_R" # Make the new Shift key actually do shifting
 xmodmap -e "remove shift = Up" # Prevent the old Shift key from shifting
 xset r 62 # Make the new Up key autorepeat
 xset -r 111 # Prevent the new Shift key from autorepeating

答案3

我刚刚又想到了一个主意..我想你说的“重新映射”可能完全不同..但我会保留我的答案......(我不知道如何重新分配一个键以使其表现为另一个键)

更新:我的“事后想法”已得到证实;(我回答了错误的问题:)...请参阅 NES 的社区 Wiki 答案(已接受上述内容)。

重新映射重新绑定按键的常用方法有两种。

  • 本地特定程序
    (一个键可以在不同的应用程序/窗口中用于不同的目的)
  • 针对特定用户全局使用
    (一个键在所有窗口中具有相同的功能)

对于“本地程序”方法,有时有一种方法可以更改应用程序本身提供的键绑定……例如。

Firefox有一个名为的插件密钥配置... 有关一些信息请参见此处MozillZine 帖子

大多数 Ubuntu 程序都是基于 Gnome 的,并且有一个特定的实用程序可以修改这些 Gnome 应用程序的任何菜单项的键绑定...它被称为Editable Menu Accelerator...它是一个非常“敏感”的工具,但功能非常强大。您可以通过运行gconf-editor(通过终端或 Alt+F2)来启用它...导航到desktop-- gnome--interface并选择can_change_accels...然后,您可以将菜单项更改为您喜欢的虚拟任何东西(每个程序/窗口)...我建议您在完成所需的操作后立即禁用它。

否则,您可以设置全局热键。我使用一个名为绑定键 安装 xbindkeys,并且还有一个通过主菜单可用的选项——首选项,称为Keyboard Shortcuts

如果您使用 xbindkeys,则需要将其添加到“启动应用程序”(主菜单-首选项)...此外(正如 Stefano Palazzo 所建议的)我之前曾在一个关于此问题的答案中对 xbindkeys 进行了更详细的描述askubuntu 页面

答案4

为了独立于 X 进行全局重映射,你可以使用控制台设置(5)反而。

就我而言,我想将Caps Lock键重新映射到D,因为我的D-key 坏了:)

首先我用转储键(1)获取映射的模板,在D-key 的情况下,有趣的是键码 32 的映射(在我的键盘上);请注意,grep 模式中有两个空格!

$ sudo dumpkeys | grep "keycode  32" > tempfile
$ cat tempfile
keycode  32 = +d
    shift   keycode  32 = +D
    altgr   keycode  32 = +eth
    shift   altgr   keycode  32 = +ETH
    control keycode  32 = Control_d
    shift   control keycode  32 = Control_d
    altgr   control keycode  32 = Control_d
    shift   altgr   control keycode  32 = Control_d
(121 lines total...)

为了改变要应用的地图Caps Lock(我的键盘上的键码是 58)

sed 's/32/58/' -i tempfile

现在读起来

keycode  58 = +d
    shift   keycode  58 = +D
    altgr   keycode  58 = +eth
(etc...)

要将此重映射添加到默认映射中,只需将其附加到重映射包含文件中即可控制台设置

sudo sh -c 'cat tempfile >> /etc/console-setup/remap.inc'

控制台设置需要重新配置(跳过低优先级的问题-phigh

sudo dpkg-reconfigure console-setup -phigh

现在重新映射应该已完成,并在启动时自动加载。

相关内容