xbindkeys..

xbindkeys..

我想更改键盘上某些键的按键绑定。我希望某些键可以运行命令,而另一些键可以激活不同的键。

我可以使用哪些应用程序来做到这一点?


指数:


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

答案1

xbindkeys..

sudo apt-get install xbindkeys

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

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

xbindkeys --defaults

这将打印默认配置文件。因此,如果你想创造包含您将使用的默认值的文件:

xbindkeys --defaults > $HOME/.xbindkeysrc

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

现在实际上改变要了解按键的绑定,首先需要知道这些按键的名称或键符。 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  

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

将按键与命令绑定..

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

现在假设你想使用Ctrl+b打开浏览器。首先你需要知道浏览器的名称或键符+是。如前所述,您可以使用来查找一个或多个键的名称,但还有一种更简单的方法。对于像+这样Ctrl的简单组合,您只需使用:bxbindkeys -kCtrlb

Control+b

简单多了不是吗!

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

  • 对于 Firefox:firefox

  • 对于 Chromium:chromium-browser

  • 对于 Opera: opera

还记得之前的语法吗?xbindkeysCtrl+启动 Firefox(或您喜欢的其他浏览器)的命令b是:

"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  

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

不过,需要注意的是,xbindkeysxte并不总是能很好地协同工作。有时你必须按下按键确切地同时获得输出,其他时候它工作正常。这可能与系统配置和/或硬件有关,也可能无关。我不确定。请参阅maggotbrain 的回答以更可靠的方式将各个键绑定到其他键。

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

您还可以使用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。

答案2

Xev 和 xmodmap

xev使用和更改键绑定xmodmap

这两个命令行应用程序默认可用,因此无需安装额外的软件。

耶夫 “创建一个窗口,然后要求 X 服务器在窗口发生任何事情时向其发送事件(例如移动、调整大小、输入、单击等)。” xev 手册页

修改映射“程序用于编辑和显示客户端应用程序用来将事件键码转换为键符号的键盘修饰符映射和键映射表。” xmodmap 手册页

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

使用 xev

xev从终端窗口启动应用程序Ctrl- Alt- t)。使用 grep 来查看其输出可能会很有用,例如xev | grep -i key

应用程序将初始化,显示多行,并启动一个带有方框的小窗口。保持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)使用名称“逃脱”

  • 按下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)运行以下命令:Altt

  • 此命令修改为Caps Lock使用与Esc

     xmodmap -e "keycode 66 = Escape"
    

你也可以将它重新映射到基本上任何键,这里它被重新映射到p

    xmodmap -e "keycode 66 = p"
  • 此选项将当前键盘映射表作为表达式打印到文件中~/.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>"

资源

答案3

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

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

在此处输入图片描述

然后选择系统设置

在此处输入图片描述

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

在此处输入图片描述

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

在此处输入图片描述

如果您选择键盘选项,你必须点击快捷方式标签

在此处输入图片描述

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

在此处输入图片描述

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

在此处输入图片描述

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

在此处输入图片描述

您最终将在屏幕上看到以下内容,表明由于快捷方式尚未分配键或组合键,因此默认情况下处于禁用状态:

在此处输入图片描述

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

在此处输入图片描述

SHIFT在此部分,我分配了+ CTRL+组合键,S以便当我按下此组合键时,它会打开 Sublime Text App。

在此处输入图片描述

此后,您可以通过按下相应的组合键并查看应用程序打开来测试您的组合:

在此处输入图片描述

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

答案4

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

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

在此处输入图片描述

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

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

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

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

    在此处输入图片描述

  5. 选择“文件”>“保存”

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

在此处输入图片描述

相关内容