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

Set*_*eth 151 keyboard-layout shortcut-keys xmodmap xkb xbindkeys

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

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


指数:


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

Set*_*eth 108

xbindkeys..

sudo apt-get install xbindkeys
Run Code Online (Sandbox Code Playgroud)

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

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

xbindkeys --defaults
Run Code Online (Sandbox Code Playgroud)

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

xbindkeys --defaults > $HOME/.xbindkeysrc
Run Code Online (Sandbox Code Playgroud)

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

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

xbindkeys -k
Run Code Online (Sandbox Code Playgroud)

然后按一个键或组合键。输出将看一些类似这样(按下时space):

"NoCommand"
m:0x10 + c:65
Mod2 + space
Run Code Online (Sandbox Code Playgroud)

"No Command"告诉我们当前没有任何命令与Space密钥相关联。

m:0x10 + c:65
Mod2 + space  
Run Code Online (Sandbox Code Playgroud)

是键/键组合的名称。

配置文件..

让我们打开您之前制作的配置文件:

gedit .xbindkeysrc  
Run Code Online (Sandbox Code Playgroud)

这是默认配置文件的摘录:

#
# 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  
Run Code Online (Sandbox Code Playgroud)

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

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

"xbindkeys_show" 
 control+shift + q  
Run Code Online (Sandbox Code Playgroud)

此摘录显示了xbindkeys命令的基本语法:

"Command to run (in quotes)"
key to associate with command (no quotes)  
Run Code Online (Sandbox Code Playgroud)

正如你所看到的:

"xbindkeys_show" 
 control+shift + q  
Run Code Online (Sandbox Code Playgroud)

xbindkeys_showCtrl+ Shift+时运行命令q

将键绑定到命令..

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

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

Control+b
Run Code Online (Sandbox Code Playgroud)

是不是容易多了!

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

  • 对于火狐: firefox

  • 对于铬: chromium-browser

  • 对于歌剧: opera

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

"firefox"
Control+b
Run Code Online (Sandbox Code Playgroud)

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

将键绑定到其他键..

如果您希望键盘上的一个键调用键盘上的另一个键,您将需要一个额外的软件,因为xbindkeys它本身不支持此功能。我知道我们可以使用的两个程序,xdotool以及xte. 我更喜欢xte所以我要使用它。

安装它:

sudo apt-get install xautomation
Run Code Online (Sandbox Code Playgroud)

的语法xte是这样的:

xte 'command key/mousebutton/xyCoordinates'
Run Code Online (Sandbox Code Playgroud)

例子:

  • 要调用单个按键: 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  
Run Code Online (Sandbox Code Playgroud)

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

但是我一点需要注意的是,xbindkeysxte并不总是很好地工作在一起。有时您必须完全同时按下按键才能获得输出,有时它工作得很好。这可能与系统配置和/或硬件有关,也可能无关。我不确定。有关将密钥绑定到其他密钥的更可靠方法,请参阅maggotbrain 的答案

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

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

" [command to run]  "
b:n
Run Code Online (Sandbox Code Playgroud)

[command to run]您要运行的命令在哪里以及n要用于该命令的鼠标按钮的编号。

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

xev | grep button
Run Code Online (Sandbox Code Playgroud)

输出将是这样的:

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
Run Code Online (Sandbox Code Playgroud)

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

例如:

" firefox "
b:2
Run Code Online (Sandbox Code Playgroud)

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


Kev*_*wen 71

Xev 和 xmodmap

使用xev和更改键绑定xmodmap

默认情况下,这两个命令行应用程序都可用,因此无需安装其他软件。

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

xmodmap“用于编辑和显示客户端应用程序用于将事件键代码转换为键符的键盘修饰符映射和键映射表的程序”。 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) ""
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Esckey(keycode 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) ""
Run Code Online (Sandbox Code Playgroud)

使用 xmodmap

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

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

    xmodmap -e "keycode 66 = p"
Run Code Online (Sandbox Code Playgroud)

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

xmodmap ~/.Xmodmap
Run Code Online (Sandbox Code Playgroud)

使更改在重新启动时保持不变:

修改具有不同状态行为的键

(例如Num Lock

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

xmodmap -e "keycode 91 mod2 = KP_Delete comma"
Run Code Online (Sandbox Code Playgroud)

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

xmodmap -e "<KEYCODE> <MODIFIER> = <behaviour> <behaviour_with_modifier>"
Run Code Online (Sandbox Code Playgroud)

资源

  • +1!我有一个没有 alt-gr 键的韩语键盘 atm,我需要它,所以你的回答对让它工作非常有帮助。为了将来参考,并且由于 alt-gr 键不是最容易设置的,这里是命令(我使用了汉字键,其代码为 130): xmodmap -e "keycode 130 = ISO_Level3_Shift Multi_key ISO_Level3_Shift Multi_key" (2认同)

Lui*_*ado 46

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

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

在此处输入图片说明

然后选择系统设置

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

在这一部分,我给你的组合键SHIFT+ CTRL+ S,这样当我按下这个组合将打开崇高文本应用程序。

在此处输入图片说明

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

在此处输入图片说明

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

  • 可悲的是,现在我们在 15.04 这个答案是一团乱码。键盘布局消失了,有了它杀死 X 服务器的能力。屏幕截图混合了 13.04 之前(谁在乎!?!)和以后的屏幕截图,并且有人将它们插入了错误的位置,因此“单击右下角的选项)”与实际的、过时的屏幕截图相去甚远。:-( (2认同)

Rad*_*anu 22

转到System SettingsKeboard,选择Shortcuts选项卡并为您的浏览器添加一个新的自定义快捷方式。如果您的默认浏览器是 Firefox,请firefox在命令字段中使用for;如果您的默认浏览器是 Firefox,请使用chromium-browser,依此类推:

添加自定义快捷方式

  • @VaibhavKaushal:在第 5 步中,您必须单击右侧的“已停用”,然后执行您喜欢的快捷方式,该快捷方式将立即显示在那里 (3认同)
  • 但这在我的情况下不起作用。Ubuntu(出于某种原因)根本不允许我设置快捷键!我一直跟着到第 4 步(如图所示)。我错过了什么吗? (2认同)
  • 与重复问题中可用的答案相比,我更喜欢这个答案。 (2认同)

csc*_*ney 20

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

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

在此处输入图片说明

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

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

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

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

    在此处输入图片说明

  5. 选择文件 > 保存

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

在此处输入图片说明


Mit*_*tch 16

尝试这个:

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

sudo apt-get install xkeycaps
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

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

在此处输入图片说明

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

xmodmap ~/.xmodmap-`uname-n`
Run Code Online (Sandbox Code Playgroud)

资料来源:UFM ytsejam1138


Joe*_*Joe 8

如果您只想重新映射键,其他答案都很棒。

但是,还有另一种方法来处理它。AutoKey是一个键盘宏处理器,它允许您将任何键/修饰符组合与脚本相关联,该脚本几乎可以执行您可以通过键盘执行的任何操作等等。

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

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

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

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

AutoKey 目前有 Gtk 和 Qt 版本。

编辑:

安装指南

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

wiki 中有许多示例脚本。因为它主要是一个有很多选项的 GUI 应用程序,所以示例需要大量的屏幕截图和整篇文章。

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

我编写了一个通过键入触发的脚本Ctrl-P该脚本仅在标题中包含“Mozilla”的窗口中有效。键入Ctrl- 调P出(Firefox 或 Thunderbird)打印对话框,选择打印到文件,然后在我的打印队列中填写下一个可用打印文件的名称(我将它们编号为 01、02...,然后脚本读取队列目录,找到最后一个文件号并将其增加 1)。我将它与我的双面打印仿真软件 ( duplexpr ) 一起使用,以消除大量的按键和鼠标移动。

我见过一些来自游戏玩家的其他脚本,这些脚本让他们可以非常快速地访问有关他们的角色和资源的信息,以便他们可以专注于行动。


cri*_*ron 8

使用 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             ]       };
Run Code Online (Sandbox Code Playgroud)

为了应用新的映射,您需要从以下位置清除xkb的缓存/var/lib/xkb

rm -rf /var/lib/xkb/*
Run Code Online (Sandbox Code Playgroud)

现在,只需重新启动 X 会话即可。

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

编辑:lssymbols目录内 做一个:

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
Run Code Online (Sandbox Code Playgroud)

文件内的映射ru基于俄语标准键盘。该macintosh_vndr文件夹包含 Apple 键盘的映射。简而言之,这种方法非常通用。继续玩吧:)


kru*_*kin 7

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

您可能希望将键盘键映射到鼠标按钮。如果您想使用键盘键单击(如果您的 macbook 或触控板按钮不好,则很有用),那么您可以执行以下操作。

  1. 安装一些实用程序:

    sudo apt-get install x11-utils xkbset x11-xserver-utils
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找到要映射的键的键码:

  3. 使用键码,重新映射键以执行与鼠标左键相同的操作:

    • xkbset m
    • xmodmap -e "keycode 64 = Pointer_Button1"

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