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

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

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


指数:

  • Xbindkeys

  • 默认键盘和快捷方式设置 (在“系统设置”中)

  • Xmodmap中

  • Xkeycaps

  • 自动键

  • XKB

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

xbindkeys ..

 sudo apt-get install xbindkeys 

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

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

 xbindkeys --defaults 

其中打印默认配置文件。 因此,如果要创建包含默认值的文件,请使用:

 xbindkeys --defaults > $HOME/.xbindkeysrc 

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

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

 xbindkeys -k 

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

 "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

还记得前面的语法吗? 当您按Ctrl + b时,用于启动Firefox(或您喜欢的其他浏览器)的xbindkeys命令是:

 "firefox" Control+b 

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

将密钥绑定到其他密钥..

如果你想要键盘上的一个键来调用键盘上的另一个键,你将需要一个额外的软件,因为xbindkeys不支持它自己。 我知道我们可以使用的两个程序, xdotoolxdotool 。 我更喜欢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' ,这会将b输入到您当前正在处理的任何文档中。

但值得注意的是, xbindkeysxte并不总能很好地协同工作。 有时您必须同时按下键才能获得输出,有时它可以正常工作。 这可能与系统配置和/或硬件有关,也可能没有。我不确定。 请参阅maggotbrain的答案 ,了解将密钥绑定到其他密钥的更可靠方法。

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

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

 " [command to run] " b:n 

其中[command to run][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服务器在窗口发生任何事情时发送事件(例如它被移动,resize,输入,点击等)。” xev手册页

xmodmap是一个“程序,用于编辑和显示客户端应用程序用来将事件密钥代码转换为密钥的键盘修改器映射和键映射表。” xmodmap手册页

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

使用xev

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

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

  • ESC

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

 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正在使用的密钥代码。

再次注意第3行:

 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 "  =  " 

资源

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

要转到系统设置,请在右上角单击齿轮图标:

在此处输入图像描述

然后选择系统设置

在此处输入图像描述

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

在此处输入图像描述

如果选择文本输入 ,则必须选择右下角的键盘设置链接,该链接将直接发送到快捷方式选项。

在此处输入图像描述

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

在此处输入图像描述

到达快捷方式选项卡后,您将选择左侧列表底部的自定义快捷方式

在此处输入图像描述

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

在此处输入图像描述

从那以后,只需要添加快捷方式的名称(不要混淆快捷方式的名称,对于您将要执行的实际命令的名称)。 在下面的命令字段中,您将放置将为此快捷方式执行的命令。 在下面的示例中,我将快捷方式命名为“Sublime Text 3”以了解该特定快捷方式的相关内容。 在命令字段中,我添加了实际的命令subl

在此处输入图像描述

您将在屏幕上显示以下内容,表明由于快捷方式尚未指定密钥或密钥组合,因此默认情况下为“已禁用”:

在此处输入图像描述

然后,我们将点击“已禁用”消息,以便为其添加组合键:

在此处输入图像描述

在这一部分中,我指定了SHIFT + CTRL + S的组合键,这样当我按下这个组合时,它会打开Sublime Text App。

在此处输入图像描述

之后,您只需按相应的组合键并打开应用程序即可测试您的组合:

在此处输入图像描述

注意:对于像杀死X服务器的特殊组合,我建议访问以下链接: 如何启用Ctrl-Alt-Backspace来终止X服务器?

转到系统设置Keboard ,选择快捷方式选项卡,然后为浏览器添加新的自定义快捷方式。 如果您的默认brouser是Firefox,请在命令字段中使用firefox ; 如果您的默认brouser是Firefox,请使用chromium-browser ,以此类推:

添加自订快捷方式

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

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

在此处输入图像描述

现在打开编辑>首选项并选择“在登录时自动启动AutoKey”以确保您的快捷方式在您登录时都能正常工作。

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

  1. 选择文件>新建>短语。
  2. 确保“粘贴使用”设置为“键盘”。
  3. 在文本框中键入要映射的键。

    • 特殊(非字符)键用此处记录的代码表示。
    • 如果您键入多个键,它们将按顺序发送,除非您在它们之间放置一个+ (例如+c将在大多数应用程序中复制; +c+n+v将创建包含选择的新文档; +ubuntu将键入文本“Ubuntu”)
  4. 按“热键”旁边的“设置”按钮。 这将打开一个对话框,允许您确定要映射的组合键:

    在此处输入图像描述

  5. 选择文件>保存

完成配置(按+m时发送的示例如下所示:

在此处输入图像描述

试试这个:

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

 sudo apt-get install xkeycaps 

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

在此处输入图像描述

然后,当您在屏幕上获得键盘时,右键单击所需的键,在您的情况下为S ,然后选择交换键。

在此处输入图像描述

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

 xmodmap ~/.xmodmap-`uname-n` 

资料来源: UFM ytsejam1138

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

但是,还有另一种方法可以解决它。 AutoKey是一个键盘宏处理器,允许您将任何键/修改器组合与宏相关联,该宏几乎可以通过键盘执行任何操作,还可以执行更多操作。

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

使用它的最简单方法是让它向您的应用程序/桌面发送击键。 当以这种方式使用时,系统/应用程序无法判断它不是您键入的,因此不需要API或其他接口,它们只是执行“您”键入的操作。

AutoKey还可以处理短语。 键入触发字符串时,它可以替换该字符串的新文本(立即或在键入分隔符(如换行符或制表符)后)。

它还具有窗口filter,以便您可以限制特定短语或宏仅在特定类型的窗口中运行(例如在标题中具有Mozilla的窗口,因此它们仅适用于Firefox或Thunderbird等)。

AutoKey目前有Gtk和Qt版本。

编辑:

安装指南这是非常详细的。 我们试图让初学者和专家都能访问它。

用户论坛活跃的用户论坛。

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

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

我写了一个通过键入CtrlP触发的宏,它只在标题中有“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 终端中的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是中间的。

原来它是在’键盘’应用程序下。

如果你提出这个问题,你可以根据需要更改快捷方式……

第一次使用时改变有点奇怪。 单击右侧(具有ctrl-alt-T,禁用等的列),然后单击实际的键,例如ctrl alt b 。您将看到新的键序列现在出现在该空间中。窗口(或单击离开),现在可以使用新的快捷方式。

使用xkb

xkb是X Keyboard扩展。 它负责将键盘的键映射到其指定的function。 xkb符号可以在/usr/share/X11/xkb/symbols/ 。 修饰符键映射在/usr/share/X11/xkb/symbols/pc

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

 key  { [ Control_L ] }; key  { [ Caps_Lock ] }; 

为了应用新映射,您需要清除/var/lib/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键盘的映射。 简而言之,这种方法非常通用。 继续玩吧:)

该快捷方式已作为WWW存在,只需将其更改为Ctrl + Alt + b即可 。 无需创建新的。

在此处输入图像描述

CompizConfig设置管理器(CCSM)

CCSM允许您更改某些系统键盘快捷方式。

要安装它,请使用软件中心或此命令:

 sudo apt-get install compizconfig-settings-manager 

例如

我使用它将“Window spread”快捷方式从默认的Super + W更改为Super + Tab ,就像在Windows 10上一样。从另一个线程的答案 :

  1. 从Dash运行CCSM。
  2. 转到窗口管理 – > 缩放 – > 绑定选项卡 – > 启动窗口选择器
  3. 单击键盘快捷键(PC上的w ,但此屏幕截图中为Tab )。

    CCSM  - 窗口管理 - 规模

  4. 单击“ 抓取组合键” ,按所需的键,然后单击“确定”。

    编辑启动窗口选择器

我想按下Print Screen来使用gnome-screenshot应用程序保存屏幕gnome-screenshot ,就像在Mint中一样

但是我想使用终端而不是GUI来实现它,因为我想在使用squashfs工具创建自定义ISO时将其设置为默认值。

首先我使用命令安装了gnome-screenshot

 sudo apt-get install gnome-screenshot 

然后我使用设置 – >键盘 – >自定义快捷方式 – >添加(+)按钮 – >分配了自定义快捷方式

在对话框中:

  • 名称:截屏
  • 命令:gnome-screentshot

按添加按钮

然后按“ 打印”屏幕键。

键已绑定,我可以根据需要保存屏幕截图。
但不使用终端,这是GUI的方式

然后我使用安装了dconf-editor

 sudo apt-get install dconf-editor 

并搜索gnome-screenshot
我在这条路径上找到了自定义键绑定

 /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ 

键的值是:

  • 绑定’打印’
  • 命令’gnome-screenshot’
  • 名称’打印屏幕’

现在我复制这些并删除GUI自定义快捷键

我打开终端并输入这些命令

 dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/command "'gnome-screenshot'" dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/binding "'Print'" dconf write /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/name "'print screen'" 

现在我只使用dconf和终端就可以在没有任何GUI的情况下保存屏幕截图。 我不再需要dconf-editor ,只是为了获取值而安装它。