我正在寻找一种方法来重新映射 ubuntu 中的某些键。
IE
我想PgUp改为Home或者PgDown。End
Ubuntu/GNOME 中是否存在内置命令或工具来重新分配键?
答案1
注意:自 2013 年起,Ubuntu 及其衍生产品不再使用xmodmap
,而是使用xkb
。有关更多信息,请参阅这个答案。以下答案与当前版本不再相关。
要重新映射某些键,您需要两个工具。第一个軍(命令行工具)和第二修改映射(也是命令行工具)。 两者都可以在 Ubuntu 中使用,无需额外安装。
启动终端窗口并运行
xev
。现在它处于活动状态并等待您按下某个键。然后按下您想要更改其行为的键。即PgUp。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
行为的名称。现在,当您想要交换两个键时,使用
xmodmap
。xmodmap -e "keycode 110 = Next"
这会将键盘上键码为 110 的键更改为操作
Next
。这很简单。请注意,如果您映射的键与该Shift键一起使用时应具有不同的含义(例如,对于英国键盘布局,Shift+2给出引号),那么您只需在第一个命令后列出第二个命令即可。例如,如果您希望代码为 53 的键正常映射到反斜杠,但与 Shift 一起使用时映射到条形符号,您可以执行以下操作:
xmodmap -e "keycode 53 = backslash bar"
附加信息:这些映射的顺序取决于键盘布局。通常是Key、Shift+Key、mode_switch+Key、mode_switch+Shift+Key、AltGr+Key,AltGr+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
告诉我们,其他名称mod2
是Num_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
...然后,您可以将菜单项更改为您喜欢的虚拟任何东西(每个程序/窗口)...我建议您在完成所需的操作后立即禁用它。
否则,您可以设置全局热键。我使用一个名为绑定键 ,并且还有一个通过主菜单可用的选项——首选项,称为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
现在重新映射应该已完成,并在启动时自动加载。