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



我想将PgUp更改为Home或将PgDown更改为End。

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

评论

在这里查看我的答案。不值得复制并粘贴相同的答案。也许会对您有帮助。

这里是否有用于CTRL-P / N的,类似于Emacs的单位步绑定?

由于xmodmap已有一段时间了!要获得系统范围的设置,您必须使用xkb。因此,在/ usr / share / X11 / xkb / symbols /中编辑语言文件,以在其中添加更改。参见askubuntu.com/a/898462/34298

#1 楼

注意:从2013年开始,Ubuntu及其衍生版本不再使用xmodmap,而是使用xkb。有关更多信息,请参见此答案。以下答案与当前版本不再相关。


要重新映射某些键,您需要两个工具。第一个xev(命令行工具)和第二个xmodmap(也是命令行工具)。两者都应在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 115Next-名称行为。


现在,当您想交换两个密钥时,请使用xmodmap

 xmodmap -e "keycode 110 = Next"


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

请注意,如果要映射的键与Shift键一起使用应具有不同的含义(例如,对于英式键盘布局,Shift + 2会带有引号),则您可以在第一个命令之后列出第二个命令。例如,如果要使代码为53的键正常映射为反斜杠,而与shift结合使用时,则映射为条形符号,则可以执行以下操作: >其他信息:这些映射的顺序为Key,Shift + Key,mode_switch + Key,mode_switch + Shift + Key,AltGr + Key,AltGr + Shift + Key。要跳过一列,请使用NoSymbol。此外,这是所有键符号的完整列表。

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

 xmodmap -e "keycode 53 = backslash bar"


(它将在您的主目录(.Xmodmap)中创建一个名为~的文件) in。

现在您可以修改.xinitrc并从控制台运行xmodmap .Xmodmap以立即查看更改。 .Xmodmap中的更改将继续存在。

来源:Ubuntu Foruns

奖励内容:状态(如数字键盘中的键如何依赖NumLock一样),您只需执行xmodmap .Xmodmap以获得修饰符列表,然后执行:

.Xmodmap

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

xmodmap -pke >~/.Xmodmap


xmodmap -pm,因为xmodmap -e "KEYCODE MODIFIER = behaviour behaviour_with_modifier"告诉我们mod2xmodmap -pm,所以其他名称是通过按mod2中的键获得的。

评论


xev无法捕获Fn键的按下

–om-nom-nom
2012年2月15日在15:08

所选答案无法为我在Ubuntu 12.10上重新映射Caps-lock键。通过转到“系统设置”->“键盘”->“布局设置”->“选项”,它具有键和替代行为的列表,从而能够做到这一点。在Unity和终端中完美工作。

–异氰酸烯丙酯
2012年10月10日19:17

如果您连接了多个键盘,这些工具会在另一个键盘上看到相同按键的区别吗?

– stommestack
13年6月27日在17:10

奇怪,我做了所有事情,但是重新启动后我的键盘映射仍然重置。

–科斯塔
2013年12月27日下午3:39

我认为我在Ubuntu 12.04中没有-event标志。它引发错误并且在man xev中没有提及“事件”。

–同构
2014年2月17日下午14:47

#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


评论


+1所有修改器中最统一的答案(我已经这样做了,回到我的iBook 2,当我希望Enter键具有Control_R的功能,但忘记了细节时)。

– rbrito
13年1月6日在8:47

对于在联想笔记本电脑上使用键盘的用户来说,重要的答案

– EinarÓlafsson
17年5月1日15:38

#3 楼

我刚想过。.我想您可能会说“重新映射”是完全不同的意思。

更新:我的“事后想法”已得到确认; (我回答了错误的问题:)...请参阅NES的Community Wiki答案(上面接受)。

有两种重新映射重新绑定键的一般方法。


本地特定程序
(密钥可用于不同应用程序/窗口中的不同事物)
全局特定用户
(键在所有窗口中都具有相同的功能)

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

Firefox有一个名为keyconfig的插件...有关一些信息,请参见MozillZine帖子

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

否则,您可以设置全局热键。我使用了一个名为xbindkeys 的程序,并且还可以通过主菜单-首选项提供一个名为can_change_accels的选项。 (主菜单-首选项)...另外(根据Stefano Palazzo的建议),我之前在此askubuntu页面的答案中已经编写了xbindkeys的更详细描述

评论


+1,非常好!一个建议:您应该将您对另一个问题的好的回答集成到这个问题中,或者也可以稍微解释一下xbindkeys的配置格式。

– Stefano Palazzo
2011年2月5日14:17

xdotool可以解决有关分配其他键的问题,请查看手册页,我已使用它来解决此问题。

– Stefano Palazzo
2011-2-5 14:24

我最近发现了另一种方法,将xmodmap工具与xev工具结合使用。我不知道xmodmap和xbindkeys之间的区别是什么,但这对我来说很好。一些建议使用工具来推荐两个?这是一个非常有用的逐步指南,其中介绍了xmodmap和xev ubuntuforums.org/showpost.php?p=7675138&postcount=2

–NES
2011-2-5 14:28



@NES ..看来我已解决了错误的问题。.您似乎想实际重新映射操作系统解释特定键的方式,即非标准键盘解释,而我一直在指标准键盘解释,并且只需重载默认键分配。 (我认为您所追求的类似于交换鼠标左键和右键)..看来我的回答对错是有帮助的:

– Peter.O
2011-2-5 14:52

是的,但是没有问题。答案也很有趣。我发布上面链接的分步指南是正确的方法。因此,我将为其他用户提供良好指导的解决方案提供简短答案。谢谢弗雷德

–NES
2011-2-5 15:42

#4 楼

这是我尝试将ENTER键到SHIFT键的映射切换的方法
(反之亦然):

$ uname -a


报告:

Linux box 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

$ which xmodmap


报告:

/usr/bin/xmodmap

$ which xev


报告:

/usr/bin/xev

$ xev



(忽略接下来的50行左右)

PRESS THE ENTER KEY (notice the third line):
KeyPress event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441120, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XmbLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263441271, (738,242), root:(771,314),
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    XLookupString gives 1 bytes: (0d)
    XFilterEvent returns: False

PRESS THE SHIFT KEY (notice the third line):
KeyPress event, serial 30, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592202, (464,368), root:(497,440),
    state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x5600001,
    root 0x110, subw 0x0, time 263592298, (464,368), root:(497,440),
    state 0x1, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False


每个按键的第三行是重要的:

FOR:
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
The name "Return" is the name of the behavior of the key pressed.
The number of the key pressed is "36".

state 0x0, keycode 62 (keysym 0xffe2, Shift_R), same_screen YES,
The name "Shift_R" is the name of the behavior of the key pressed.
The number of the key pressed is "62".


逆向映射:

$ xmodmap -e "keycode 62 = Return"
$ xmodmap -e "keycode 36 = Shift_R"


保存结果:

$ xmodmap -pke > ~/.Xmodmap
$ vi ~/.xinitrc


添加
>
 xmodmap ~/.Xmodmap

$ sudo reboot


主要问题是反转不起作用。
ENTER键映射到SHIFT_R键。但是SHIFT_R键未映射到ENTER键。走吧。

#5 楼

为了独立于X进行全局重映射,可以改用console-setup(5)。

在我的情况下,我想将Caps Lock键重新映射为D,因为我的D键是首先,我使用dumpkeys(1)获取映射的模板,对于D键,有趣的是,键码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


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

#6 楼

我花了整整一天的时间尝试为Ctrl+Pageup创建快捷方式。

我首先尝试了xmodmap,但这无法生成修饰符事件。因此,不可能创建一个快捷方式来生成例如Control事件。这种工作方式有效,但是xbindkeys无法捕获系统上的某些组合键,例如xmacro。 />
我现在使用xbindkeys程序代替Alt + ___来生成键盘事件,但这只是个人喜好。 xmacroxvkbd的工作原理几乎相同。另一个提示是在xmacroxvkbd中添加延迟参数,以确保事件不会丢失。

#7 楼

对我而言,Software Center的AutoKey表现最好。它具有直观的GUI,要添加新的绑定,请单击“新建”->“短语”,然后


添加名称,单击“确定”。
在“短语设置”部分,确保将粘贴使用设置为键盘
添加要使用的热键
在文本字段中添加命令,例如,模拟左箭头键-它为<left>(特殊键列表在此处)。


评论


这可以有效地将Super + C和Super + V设置为Ctrl + C和Ctrl + V。在Mac上通过VirtualBox使用Ubuntu时的完美解决方案

–本
19 Mar 20 '19在23:06



但是,这不会禁用其他侦听这些快捷方式的命令。要禁用Super + V以“显示通知列表”,请转到设置->设备->键盘并在此处禁用它

–本
19 Mar 20 '19在23:30

@Ben是的,如果它显示了其他应用程序的绑定,那就太好了,但这真是锦上添花。我的问题是不可能重新映射“ Fn”键。我决定尝试使用uhk键盘-可以独立于os进行编程的东西,它将了解它的运行情况。

–自我
19年3月24日在8:05

#8 楼

如果您只需要重新映射特定程序的键,则我刚刚将此功能添加到hax11。 br />

要使用hax11进行此操作,请在~/.config/hax11/profiles(例如~/.config/hax11/profiles/usr\lib\firefox\firefox)下打开程序的配置文件配置文件,并添加:

Enable=1
MapK112=K110
MapK117=K115


#9 楼

您还可以尝试https://github.com/sezanzeb/key-mapper
它需要在后台运行并主动注入映射的键码,尽管这增加了一些额外的灵活性,但是如果您需要的只是重新映射一个按钮并完成操作,您可以尝试使用xmodmap。看起来已经详细解释了。
或者编写一个xkb“ symbols”文件并使用setxkbmap,但我不建议这样做。 setxkbmap也可以在每个设备上使用。
最近我遇到了这个解决方案:https://www.reddit.com/r/linux_gaming/comments/k3h9qv/remapping_keys_using_hwdb_files/