当前位置: 首页>>技术问答>>正文


我如何更改键盘上的按键? (我如何创建自定义键盘命令/快捷键?)

, , , , ,

问题描述

我想更改键盘上某些按键的按键绑定。我想要一些运行命令和其他命令来激活不同的密钥。

我可以使用哪些应用程序来执行此操作?


指数:


我仍在使用dconf和其他方法寻找答案。

最佳解决思路

xbindkeys ..

sudo apt-get install xbindkeys

Xbindkeys是一个非常通用的程序,可以让您轻松重新映射密钥。它使用一个配置文件,我的默认位于您的主目录中,将键绑定更改为某些命令。

要创建默认配置文件,请使用以下命令:

xbindkeys --defaults

它打印默认配置文件。所以如果你想创建包含默认值的文件,你可以使用:

xbindkeys --defaults > $HOME/.xbindkeysrc

它将默认值打印到位于家中的名为.xbindkeysrc的隐藏文件(~)中。

现在要真正改变键的绑定,我们首先需要知道这些键的名字或keysym是什么。 xbindkeys允许我们使用-k句柄来查找键或组合键的名称。跑:

xbindkeys -k

然后按一个键或组合键。您的输出看起来与此类似(按space时):

"NoCommand"
m:0x10 + c:65
Mod2 + space

"No Command"告诉我们,当前没有命令与Space键相关联。

m:0x10 + c:65
Mod2 + space  

是键/键组合的名称。

配置文件..

让我们打开之前所做的配置文件:

gedit .xbindkeysrc  

以下是默认配置文件的摘录:

#
# A list of keys is in /usr/include/X11/keysym.h and in
# /usr/include/X11/keysymdef.h
# The XK_ is not needed.
#
# List of modifier:
#   Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock),
#   Mod3 (CapsLock), Mod4, Mod5 (Scroll). 
#

# The release modifier is not a standard X modifier, but you can  
# use it if you want to catch release events instead of press events

# By defaults, xbindkeys does not pay attention with the modifiers
# NumLock, CapsLock and ScrollLock.
# Uncomment the lines above if you want to pay attention to them.

#keystate_numlock = enable
#keystate_capslock = enable
#keystate_scrolllock= enable

# Examples of commands:

"xbindkeys_show" 
 control+shift + q  

#开头的每行都是注释,不会被xbindkeys读取或运行。

到目前为止,唯一没有注释掉的是:

"xbindkeys_show" 
 control+shift + q  

本节摘录了xbindkeys命令的基本语法:

"Command to run (in quotes)"
key to associate with command (no quotes)  

所以你可以看到:

"xbindkeys_show" 
 control+shift + q  

当您按下Ctrl + Shift + q时运行命令xbindkeys_show

将键绑定到命令..

现在让我们尝试绑定几个键。我建议清除整个默认文件,使其成为空白。它包含您可能不需要的预设键绑定。

现在让我们说你想使用Ctrl + b打开你的浏览器。首先,您需要知道Ctrl + b的名称或关键字是什么。如前所述,您可以使用xbindkeys -k来查找一个或多个键的名称,但有一种更简单的方法。对于像Ctrl + b这样的简单组合,您可以使用:

Control+b

不是很容易!

现在找到你喜欢的浏览器的命令:

  • 对于Firefox:firefox

  • 对于Chromium:chromium-browser

  • 对于Opera:opera

还记得以前的语法吗?在按Ctrl + b时启动Firefox(或您的其他常用浏览器)的xbindkeys命令是:

"firefox"
Control+b

现在把它放在你的配置文件中并保存。现在你可能注意到你的命令还没有工作,那是因为xbindkeys没有运行。要启动它,只需从终端运行xbindkeys。您的Ctrl + b现在应该启动您的浏览器!

将键绑定到其他键。

如果您想让键盘上的某个键调用键盘上的其他键,则需要使用额外的软件,因为xbindkeys不支持此功能。我知道我们可以使用两个程序,xdotoolxte。我更喜欢xte,所以我打算使用它。

安装它:

sudo apt-get install xautomation

xte的语法如下所示:

xte 'command key/mousebutton/xyCoordinates'

例子:

  • 要调用一个按键:xte 'key keyName'

  • 要调用组合键:xte 'keydown keyName' 'keydown secondKeyName' 'keyup keyName' 'keyup secondKeyName

  • 要调用鼠标按钮,请执行以下操作:xte 'mouseclick buttonNumber'(我们将讨论查找稍后的按钮号)

  • 移动鼠标:xte 'mousemove xCoordinate yCoordinate'

  • 和更多!阅读man xte

现在您已经知道了模拟按键的命令,您可以从xbindkeys脚本中调用它,如下所示:

"xte 'key b'"
Control+b  

您可能会猜到,当我们按Ctrl + b时,会调用xte 'key b'Ctrl会将b输入到您当前正在处理的任何文档中。

但我需要注意的是,xbindkeysxte并不总是很好地协同工作。有时你必须同时按下按键来获得输出,而其他时候它就可以正常工作。这可能与系统配置和/或硬件无关。我不确定。请参阅maggotbrain’s answer以获取将密钥绑定到其他密钥的更可靠方法。

将鼠标按钮绑定到命令..

您还可以使用xbindkeys将鼠标按钮绑定到命令(以及上面的键盘快捷键)。现在您应该熟悉鼠标按钮的基本格式:

" [command to run]  "
b:n

其中[command to run]是要运行的命令,n是要用于该命令的鼠标按钮的编号。

如果你不知道你的鼠标按钮的数量,你可以使用xev来找出它是什么:

xev | grep button

输出结果如下所示:

user@host:~$ xev | grep button
    state 0x10, button 1, same_screen YES
    state 0x110, button 1, same_screen YES
    state 0x10, button 2, same_screen YES
    state 0x210, button 2, same_screen YES
    state 0x10, button 3, same_screen YES
    state 0x410, button 3, same_screen YES

当我按下我的每个鼠标按钮时。

例如:

" firefox "
b:2

当我按下鼠标中键时启动Firefox。

次佳解决思路

Xev和xmodmap

使用xevxmodmap更改键绑定。

这两个命令行应用程序默认都是可用的,所以不需要安装额外的软件。

Xev“创建一个窗口,然后要求X服务器在窗口发生任何事情(例如正在移动,调整大小,键入,单击等)时发送事件。” xev man page

xmodmap是一个“程序,用于编辑和显示键盘修改器映射和键映射表,客户端应用程序用它将事件键码转换为键码。” xmodmap man page

以下示例将重新映射Caps_Lock键为Esc键的行为(许多vi /vim用户认为这是一种有用的键盘映射)。

使用xev

从终端窗口(CtrlAltt)启动xev应用程序。

应用程序将初始化,显示多行,并启动一个空白窗口。保持xev应用程序窗口的焦点,并按下您希望使用的属性/行为的键。

  • 按下ESC

在终端窗口中,您将看到几行输出。记下返回的第三行。这将包含您想要移动到另一个键的属性的名称。

KeyPress event, serial 32, synthetic NO, window 0x3e00001,
    root 0x256, subw 0x0, time 16245388, (616,73), root:(1487,535),
    state 0x10, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) ""

在这种情况下,Esc键(键码9)使用名称”Escape”。

  • 按下Caps Lock

这次我们正在寻找Caps Lock正在使用的键码。

再次注意第三行:

KeyRelease event, serial 32, synthetic NO, window 0x4c00001,
    root 0x256, subw 0x0, time 94702774, (862,151), root:(1733,613),
    state 0x10, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES,
    XKeysymToKeycode returns keycode: 9
    XLookupString gives 1 bytes: (1b) ""

使用xmodmap

现在我们已经获得了我们希望从xev更改的键的信息,我们将使用xmodmap修改键盘映射。从命令终端(Ctrl + Alt + t)运行以下命令:

  • 此命令修改Caps Lock以使用与Esc相同的行为

    xmodmap -e "keycode 66 = Escape"
    
  • 该选项将一个键映射表作为表达式打印到文件~/.Xmodmap

    xmodmap -pke > ~/.Xmodmap
    

使用以下命令激活更改(仅限此登录会话):

    xmodmap ~/.Xmodmap

在重新启动时进行更改:

  • 如果它不存在,请在您的主文件夹中创建一个名为.xinitrc的文件。 touch .xinitrc

    • 在文件中放置以下行并保存该文件:

      xmodmap ~/.Xmodmap
      

用不同的状态行为修改键

(如

Num Lock

  • 获取修改键的键映射表(这里输出缩写)

    xmodmap -pm
    shift       Shift_L (0x32),  Shift_R (0x3e)
    mod2        Num_Lock (0x4d)
    

例如,如果要将数字键盘上Del /Period键上的句点行为更改为逗号,请使用以下命令:

    xmodmap -e "keycode 91 mod2 = KP_Delete comma"

请注意,这是使用mod2键映射来更改按下修改器Num Lock时的键行为。这个语法是:

    xmodmap -e "<KEYCODE> <MODIFIER> = <behaviour> <behaviour_with_modifier>"

Resource

第三种解决思路

默认情况下(这只是为了补充Seth的优秀回答),Ubuntu(在本例中我使用16.04)在系统设置中默认有两个类别:

要进入系统设置,在右上角点击齿轮图标:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

然后选择系统设置:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

在这里您会找到2个选项,可以将您发送到快捷方式创建部分。

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

如果您选择了文本输入,您将不得不选择右下方的键盘设置链接,这会将您直接发送到快捷方式选项。

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

如果您选择键盘选项,则必须单击快捷方式选项卡

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

到达快捷方式标签后,您可以选择左侧列表底部的自定义快捷方式:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

然后点击底部的加号以开始创建您自己的快捷方式:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

从那里开始,只需要添加快捷方式的名称(不要混淆快捷方式的名称,即将执行的实际命令的名称)。在下面的命令字段中,您将放置哪条命令将被执行的快捷方式。在下面的例子中,我将快捷方式“Sublime Text 3”命名为特定的快捷方式。并在命令字段中添加了subl的实际命令。

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

屏幕上将显示以下内容,因为快捷方式尚未分配键或组合键,所以默认情况下它将处于禁用状态:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

然后,我们将点击”Disabled”消息来添加一个组合键:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

在这部分中,我分配了SHIFT + CTRL + S的组合键,这样当我按下该组合键时,它将打开Sublime Text App。

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

之后,您可以通过按下相应的组合键并打开应用程序来简单地测试您的组合:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

注意:对于特殊组合,如杀死X服务器,我建议访问以下链接:How do I enable Ctrl-Alt-Backspace to kill the X server?

第四种思路

进入系统设置→Keboard,选择快捷方式标签,并为浏览器添加一个新的自定义快捷方式。如果您的默认布鲁克是Firefox,请在命令字段中使用firefox;如果您的默认浏览器是Firefox,请使用chromium-browser,依此类推:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

第五种思路

您可以通过从软件中心安装AutoKey来创建复杂的(multi-key)键盘快捷键。与xmodmap不同,AutoKey不会重新键入键盘上的实际键;它在后台运行并拦截您定义的键盘快捷键,然后将模拟按键发送到您的应用程序。

第一次启动AutoKey时,它将在后台启动服务(通知图标尚未更新为统一,因此没有可视指示)。一旦运行,您可以通过再次运行启动器来调出配置界面:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

现在打开编辑>首选项,然后选择“登录时自动启动AutoKey”以确保您的快捷方式在您登录后即可使用。

将键盘快捷键映射到另一个键盘快捷键

  1. 选择文件>新>短语。

  2. 确保”Paste using”设置为”Keyboard”。

  3. 在文本框中键入您想要映射的键。

    • 特殊(non-character)键用代码here代码表示。

    • 如果您输入多个密钥,则它们将按顺序发送,除非您在它们之间放置+(例如,<ctrl>+c将在大多数应用程序中复制; <ctrl>+c<ctrl>+n<ctrl>+v将创建包含选择的新文档; <shift>+ubuntu将键入文本”Ubuntu”)

  4. 按下”Hotkey”旁边的”Set”按钮。这将弹出一个对话框,让您确定您想要映射的组合键:

    shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

  5. 选择文件>保存

已完成配置的示例(在按<ctrl>+m时发送<enter>)如下所示:

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

第六种思路

尝试这个:

安装一个名为XKeyCaps的程序。要安装,只需按下键盘上的Ctrl + Alt + T即可打开终端。打开时,运行下面的命令:

sudo apt-get install xkeycaps

安装完成后,您可以在提示符下执行xkeycaps以运行该程序。运行后,选择正确的键盘布局,然后单击确定

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

然后当你在屏幕上得到键盘时,右键点击你想要的键,在你的情况下它是S,然后选择交换键。

shortcut-keys,keyboard-layout,xmodmap,xkb,xbindkeys,ubuntu

确保将以下行添加到会话中,以便每次启动时自动启动。

xmodmap ~/.xmodmap-`uname-n`

来源:UFM ytsejam1138

第七种思路

如果你只是想重新映射密钥,其他的答案都很好。

但是,还有另一种方法来处理它。 AutoKey是一个键盘宏处理器,它允许您将任何键/修改器组合与一个宏组合在一起,这个宏几乎可以做任何你可以从键盘上做的任何事情,还有更多。

AutoKey有一个宏记录器和一个简单的方法来输入基本的键序列,但它的宏是用Python编写的,几乎可以做任何你可以编码的东西。

使用它最简单的方法是让它发送击键到你的应用程序/桌面。当以这种方式使用时,系统/应用程序无法辨别它是不是打字,所以不需要API或其他接口,只需执行”you”键入的内容即可。

AutoKey也可以处理短语。当你键入一个触发字符串时,它可以替换该字符串的新文本(可以立即或者像键入新行或制表符之类的分隔符之后)。

它还具有窗口过滤器,因此您可以限制某个特定的短语或宏仅在特定类型的窗口中运行(例如标题中包含Mozilla的窗口,以便它们只能在Firefox或Thunderbird中使用)。

AutoKey目前有Gtk和Qt版本。

编辑:

Installation Guide这是非常详细的。我们试图让初学者和专家都能使用它。

User Forum活跃的用户论坛。

有一个供稿脚本的地方,但它似乎已经消失。我会检查一下。因为它主要是一个带有很多选项的GUI应用程序,所以示例需要大量的屏幕截图和整篇文章。

我定义了一个短语,当我输入”Jmail!”时,它会立即用我相当长的电子邮件地址替换它。

我编写了一个宏,它是通过键入CtrlP触发的,该P只在标题中包含”Mozilla”的窗口中处于活动状态。键入CtrlP打开(Firefox或Thunderbird)打印对话框,选择“打印到文件”,然后填写我的打印队列中下一个可用打印文件的名称(我将它们编号为01,02,…并且脚本读取队列目录,找到最后的文件编号并按1)递增。我将它与我的双面打印模拟软件(duplexpr)一起使用,以消除大量的击键和鼠标移动(只是使用键盘的东西,AutoKey尚未开发(本开发中)本地发出鼠标事件)。

我已经看到了一些来自游戏玩家的宏,让他们能够非常快速地获取关于角色和资源的信息,以便他们能够专注于行动。

第八种思路

使用键盘按键作为鼠标按钮

您可能想要将键盘键映射到鼠标键。如果你想用键盘按键点击(如果你有一个macbook或者一个坏的触控板按钮,这很有用),那么你可以执行以下操作。

  1. 安装一些工具:

    sudo apt-get install x11-utils xkbset x11-xserver-utils
    
  2. 找到想要映射的键的键码:

    • 在终端中键入xev | grep keycode

    • 按下感兴趣的键,这样一行就会出现:

      state 0x0, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,  
      
  3. 使用键码,重新映射键与鼠标左键的操作相同:

    • xkbset m

    • xmodmap -e "keycode 64 = Pointer_Button1"

Pointer_Button3是鼠标右键,Pointer_Button2是中间的。

第九种思路

原来它在’keyboard’应用程序下。

如果你把它提出来,你可以根据需要改变快捷方式。

首次使用时变化有点奇怪。您可以点击右边的列(ctrl-alt-T,Disabled等),然后单击实际的键,例如ctrl alt b,您会看到新的键序列现在显示在该空间中。点击即可),新的快捷方式现在可以使用。

第十种思路

使用xkb

xkb是X键盘扩展。它负责将键盘的按键映射到其指定的功能。 xkb符号可以在/usr/share/X11/xkb/symbols/中找到。修改键被映射到/usr/share/X11/xkb/symbols/pc中。

说,我需要切换Caps LockLeft Control键的功能。这些更改对pc文件是必需的:

key <CAPS> {        [ Control_L             ]       };
key <LCTL> {        [ Caps_Lock             ]       };

为了应用新的映射,您需要从/var/lib/xkb中清除xkb的缓存:

rm -rf /var/lib/xkb/*

现在,只需重新启动你的X会话,你就可以走了。

来源:https://radu.cotescu.com/remapping-keys-in-ubuntu-14.04/

编辑:在symbols目录内部做一个ls给出这个:

af        cm            gn       kz              nec_vndr    sk
al        cn            gr       la              ng          sn
altwin    compose       group    latam           nl          sony_vndr
am        ctrl          hp_vndr  latin           no          srvr_ctrl
apl       cz            hr       level3          nokia_vndr  sun_vndr
ara       de            hu       level5          np          sy
at        digital_vndr  ie       lk              olpc        terminate
az        dk            il       lt              pc          th
ba        ee            in       lv              ph          tj
bd        empty         inet     ma              pk          tm
be        epo           iq       macintosh_vndr  pl          tr
bg        es            ir       mao             pt          tw
br        et            is       md              ro          typo
brai      eurosign      it       me              rs          tz
bt        fi            jp       mk              ru          ua
bw        fo            ke       ml              rupeesign   us
by        fr            keypad   mm              se          uz
ca        fujitsu_vndr  kg       mn              sgi_vndr    vn
capslock  gb            kh       mt              sharp_vndr  xfree68_vndr
cd        ge            kpdl     mv              shift       za
ch        gh            kr       nbsp            si

文件ru中的映射基于俄罗斯标准键盘。 macintosh_vndr文件夹包含Apple键盘的映射。简而言之,这种方法非常灵活。来吧,玩它:)

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/542.html,未经允许,请勿转载。