寻找关键代码

寻找关键代码

我正在使用 manjaro i3,并且正在考虑修改我所做的一些按键映射。目前我正在使用 xcape、xmodmap 和 setxkbmap 命令来重新映射以下键:

  1. 按住时可控制,按下时可退出
  2. 交换分号和冒号

我已经使用此设置脚本完成了此操作:

setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"

我想为我想要进行的额外更改寻求一些帮助或建议,因为我已经破坏了我的按键映射,并且在使用下面列出的打印屏幕重新映射时必须重新安装我的操作系统才能回到第一个方向。我希望做出的改变如下:

  1. 打印屏幕 --> 禁用或用作另一个超级键
  2. 左 alt --> 模式切换键
  3. 转义键 --> 波形符和反引号
  4. 原始波浪线和后退勾 --> 退格键
  5. 退格键-->删除
  6. 禁用 home、end、insert、delete 键并将它们映射到运行某些脚本
  7. mode_switch + h, j, k, l --> 附加箭头键
  8. mode_switch + 退格键 --> home
  9. mode_switch + 删除 --> 结束

我应该使用什么工具来完成这些重新映射?另外,如果有人有一些他们过去使用过的类似例子,那也会非常有帮助!预先感谢您的任何帮助。

答案1

我在 GNOME 中运行 Pop!_OS(Ubuntu 18.10 的衍生版本)的 ThinkPad P1 上确认了以下所有内容。

寻找关键代码

xev在终端中运行并开始输入。有很多数据,但您要查找的通常是单词之后的块的第二个第三行keycode

KeyRelease event, serial 37, synthetic NO, window 0x3c00001,
    root 0x1a5, subw 0x0, time 291165043, (404,446), root:(454,634),
    state 0x0, **keycode 107** (keysym 0xff67, Menu), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

有些按键xev不会打印按键代码,例如“打印屏幕”。对于这些,您可以 grep 浏览下一节中创建的文件。

所需工具

xmodmap

转储当前的绑定

您可以通过运行将当前映射打印到标准输出xmodmap -pke。首先将xmodmap布局备份到文件中,可以避免一些潜在的麻烦:

xmodmap -pke ~/.Xmodmap.orig

如果密钥未出现在xev.

cat ~/.Xmodmap | grep Print
keycode 107 = Print Sys_Req Print Sys_Req

快速更改绑定的命令

您已经知道这一点,但只是重申一下:

xmodmap -e "keycode [number] = [keys...]"

这将暂时重新绑定您的会话的密钥。再次运行xmodmap -pke 将反映这些变化。

句法

xmodmap使用空格分隔的列来表示keycode.从左到右它们是:

  • 钥匙本身
  • Shift + 键
  • 模式开关+按键
  • 模式_切换+Shift+按键

例如:

xmodmap -e "44 = j J Down Next"

这会单独设置“J”键“j”,与 Shift 一起按下时设置“J”,与 Mode_switch 一起按下时设置向下箭头,当与 Mode_switch 和 Shift 一起按下时设置 Page Down。

Mode_switch

Mode_switch是一个单独的通用修饰符,类似于 Shift。我认为许多键盘不再配备专用Mode_switch(AltGr) 键,但您可以使用xmodmap.

# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"

使用 GNOME 设置运行脚本或xbindkeys

我不知道如何使用xmodmap.然而,有一些简单的方法。

来自 i3 配置

i3 文档有在文件中使用bindsym/指令的示例。bindcode~/.config/i3/config

bindcode 214 exec /home/you/some_script.sh

我还没有设置 i3,还没有对此进行测试,但它是直接来自用户手册的。我猜这些代码与您在xmodmap&朋友中找到的内容相匹配。

侏儒

查看设置 > 设备 > 键盘 > 键盘快捷键。单击加号并添加脚本/按键组合。请注意,您必须将完整路径(从根目录)放入脚本并确保其可执行。

键盘快捷键的 GNOME 设置窗格的屏幕截图

在我的测试中,GNOME 不允许您使用某些键,例如 Home 和 End。

xbindkeys

xbindkeys可以拦截任何按键并运行脚本。

太看到一些配置文件示例,运行xbindkeys --defaults > $HOME/.xbindkeysrc并查看文件。

请注意,它不会打开终端,只是在进程中执行文件。

你的例子

这是根据您的需要运行的实际命令。请务必确认您自己的密钥代码,这些正是我碰巧拥有的。

第 1 步:重新映射xmodmap

# print screen --> use as another super key, print screen with Mode_switch
# Note: On GNOME, it appears Super_R doesn't work the same as Super_L
xmodmap -e "keycode 107 = Super_L NoSymbol Print Sys_Req"

# left alt --> mode_switch key
xmodmap -e "keycode 64 = Mode_switch NoSymbol"

# escape key --> tilde and backtick
# Note: this can have unexpected consequences if you use `xcape` to map 
# Control/Caps to send Escape when tapped. It will instead send `/~ when you 
# press Caps Lock attempting to get Escape.
# A solution might be to switch the keys around and use a non-op key as a 
# placeholder, like in the xcape README
# https://github.com/alols/xcape/blob/master/README.md#examples
xmodmap -e "keycode 9 = grave asciitilde grave asciitilde"

# original tild and back tick --> backspace
xmodmap -e "keycode 49 = BackSpace"

# backspace --> delete, and
# mode_switch + backspace --> home
xmodmap -e "keycode 22 = Delete NoSymbol Home"

# mode_switch + delete --> end
# Note: This won't work when combined with `xbindkeys`, since `xbindkeys`
# hijacks the entire Delete key from X.
xmodmap -e "keycode 119 = Delete NoSymbol End"

# mode_switch + h, j, k, l --> additional arrow keys
# Bonus: capital J/K are Page Down/Up, H/L are Home/End with Mode_switch + Shift
xmodmap -e "keycode 43 = h H Left Home"
xmodmap -e "keycode 44 = j J Down Next"
xmodmap -e "keycode 45 = k K Up Prior"
xmodmap -e "keycode 46 = l L Right End"

第 2 步:保存更改

# Write current config to a file
xmodmap -pke > ~/.Xmodmap

# Load the config into xmodmap
xmodmap ~/.Xmodmap

将上面的最后一个命令添加到您的~/.profileor中~/.bash_profile,只要您登录,就会加载它(假设您有标准设置)。对我来说这有点慢,您可能只想手动添加所有xmodmap -e命令。

步骤 3:为自定义脚本设置绑定xbindkeys

确保xbindkeys已安装,并将其添加到您的~/.xbindkeysrc文件中:

# disable home, end, insert, delete keys and map them to run some script, and
"some-script-in-PATH"
  Home
"some-script-in-PATH"
  End
"some-script-in-PATH"
  Insert
"some-script-in-PATH"
  Delete

然后重新加载xbindkeys -p

第 4 步:没有第 4 步

进一步阅读

有关重新映射的 Emacs Wiki 页面
xmodmap 上的 Emacs Wiki 页面
关于 Xmodmap 的 Arch Wiki
有关 StackExchange 上的 Mode_switch 的更多信息
更全面、更省力的解决方案是编写您自己的键盘布局

相关内容