如何重新映射某些键或设备?
我正在寻找一种方法来重新映射ubuntu中的某些键。
即
我想将PgUp更改为Home或PgDown更改为End 。
是否存在内置命令或工具在Ubuntu / GNOME中重新分配密钥?
注意:截至2013年,Ubuntu和衍生产品不再使用xmodmap
,而是使用xkb
。 有关更多信息,请参阅此答案 。 以下答案不再适用于当前版本。
要重新映射某些键,您需要两个工具。 第一个xev (命令行工具)和第二个xmodmap (也是命令行工具)。 两者都应该在Ubuntu中可用而无需额外安装它们。
-
启动终端窗口并运行
xev
。 现在它处于活动状态并等待您按下一个键。 然后按要更改其行为的键。 即PgUp 。 -
xev
将输出有关按下的键的一些信息。 第三行很重要。 它看起来应该类似于:state 0x10, keycode 110 (keysym 0xff55, Prior), same_screen YES,
在此示例中,
Prior
是此刻分配密钥的行为的名称,数字键代码是用于识别密钥的内部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 。 要跳过列,请使用NoSymbol
。 此外, 这里是所有键盘的综合列表。
注意:这些更改仅适用于活动X会话,并且在重新引导后将丢失。 如果要永久保存更改,则必须在上述命令之后运行以下命令:
xmodmap -pke >~/.Xmodmap
(它在您的主目录( ~
)中创建一个名为.Xmodmap
的文件)
然后你必须在你的主目录中创建一个名为.xinitrc
的文件,你可以在其中放入命令xmodmap .Xmodmap
。
您现在可以修改.Xmodmap
并从控制台运行xmodmap .Xmodmap
以立即查看更改。 .Xmodmap
的更改将保持.Xmodmap
。
来源: Ubuntu Foruns
奖金:
如果您正在重新映射的键具有不同的行为,具体取决于状态(如数字键盘中的键如何依赖于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
的键获得的。
如果您尝试移动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
我刚才有一个事后的想法……我认为你可能意味着“重新映射”完全不同……但我会留下我的答案……(我不知道如何重新分配一个键表现为另一个)
更新 :我的“事后补充”已得到确认; (我回答了错误的问题:)…请参阅NES的社区Wiki答案(上面接受)。
有两种重新映射重新绑定密钥的方法。
- 本地到特定的程序
(一个键可以用于不同的应用程序/窗口中的不同的东西) - 全局为特定用户
(一个键在所有窗口中具有相同的function)
对于“本地到程序”的方法,有时候有办法改变应用程序本身提供的键绑定…例如。
Firefox
有一个名为keyconfig的插件……有些信息请参阅此MozillZinepost
大多数Ubuntu程序都是基于Gnome的,并且有一个特定的实用程序来修改这些Gnome应用程序的任何菜单项的键绑定…它被称为Editable Menu Accelerator
……它是一个非常“敏感”的工具,但非常强大..您可以通过运行gconf-editor
(通过终端或Alt + F2)启用它…导航到desktop
– gnome
– interface
并选择can_change_accels
….然后您可以将菜单项更改为虚拟任何您喜欢的(每个程序) /窗口)…我建议您在完成所需操作后立即将其禁用..
否则,您可以设置全局热键。 我使用一个名为xbindkeys的程序 ,还有一个选项可通过主菜单 – 首选项,称为Keyboard Shortcuts
如果你使用xbindkeys,你需要将它添加到你的“启动应用程序”(主菜单 – 首选项)…另外(正如Stefano Palazzo所建议的)我之前在一个答案中写了一个更详细的xbindkeys描述askubuntu页面
以下是我尝试将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
(忽略下五十行左右)
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键。 去搞清楚。
为了独立于X进行全局重映射,您可以使用console-setup(5)代替。
在我的情况下,我想将Caps Lock键重新映射到D ,因为我的D键被破坏了:)
首先,我使用dumpkeys(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
现在应该完成重映射,并在启动时自动加载。
我花了一整天时间尝试为Ctrl+Pageup
创建一个快捷方式。
我首先尝试了xmodmap
但是无法生成修改器事件。 因此,无法创建生成例如Control
事件的快捷方式。
然后我用xmacro
尝试了xbindkeys
。 这样的工作,但xbindkeys
无法捕获我的系统上的一些键组合,如Alt + ___
。
所以我最终使用Unity自己的键盘快捷键 – >自定义快捷键来设置我的快捷方式。
而不是xmacro
,我现在使用xvkbd
程序来生成键盘事件,但这只是个人偏好。 xmacro
和xvkbd
工作方式几乎相同。 另外一个提示是在xmacro
或xvkbd
添加延迟参数,以确保事件不会丢失。
对我来说,软件中心的AutoKey工作得最好。 它具有直观的GUI,添加新的绑定点击新建 – >短语和
- 添加名称,单击“确定”
- 在“词组设置”部分,确保将粘贴使用设置为键盘
- 添加要使用的热键
- 在文本字段中添加命令,例如模拟左箭头键 – 它是
(特殊键列表在这里 )。
- Ubuntu 11.10 nvidia模块无法加载(没有模块存在)
- Xserver错误“(EE)模块ABI主要版本(6)与服务器版本(8)不匹配”
- 什么是$ DISPLAY环境变量?
- 在14.04 Trusty Tahr中重新映射大写锁定
- 使用vesa驱动程序在Toshiba NB510(GMA 3650)中修复800×600分辨率
- 当与一个或两个其他FHD显示器一起使用时,无法以最大分辨率使用我的4k显示器
- 安装了Nvidia驱动程序,但没有工作!
- 无法使用3台显示器:XPS笔记本电脑上的显示输出和笔记本电脑显示屏。 CRTC 64错误
- 在thinkpad中配置英特尔集成显卡,仅使用xorg.conf通过HDMI驱动外部4k显示器