我正在使用manjaro i3,并且正在研究修改我所做的一些关键映射。目前,我正在使用x佛得角、xmodmap和setxkbmap命令重新映射以下键:
我用这个安装脚本完成了这个任务:
setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"我想寻求一些帮助或建议,因为我想要做的额外改变,因为我已经打破了我的关键映射,必须重新安装我的操作系统,以回到原点时,在玩打印屏幕重新映射,列出如下。我希望作出以下改变:
我应该使用什么工具来完成这些重构?此外,如果任何人有一些类似的例子,他们在过去使用过,这将是非常有帮助的!提前感谢您的帮助。
发布于 2019-01-09 05:14:49
我确认了在GNOME中运行Pop!_OS (Ubuntu18.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的不同修饰符/模式。从左到右是:
例如:
xmodmap -e "44 = j J Down Next"这将自动设置"J“键"j”,当按下Shift时设置"J“,用Mode_switch按下向下箭头,用Mode_switch和Shift按下页面向下。
Mode_switchMode_switch是一个单独的泛型修饰符,类似于Shift。我不认为很多键盘都有专用的Mode_switch (AltGr)键,但是你可以用xmodmap设置一个键盘。
# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"xbindkeys运行脚本
我不知道用xmodmap运行任意脚本的方法。然而,有一些简单的方法。
i3文档有关于在~/.config/i3/config文件中使用bindsym/bindcode指令的示例。
bindcode 214 exec /home/you/some_script.sh我还没有设置i3,还没有测试过它,但是它是直接从用户手册中得到的。我猜这些代码与你在xmodmap和朋友中发现的是一致的。
查看设置>设备>键盘>键盘快捷键。单击加号并添加脚本/键组合键。注意,您必须将完整的路径(从根到脚本)放到脚本中,并确保它是可执行的。

在我的测试中,GNOME不允许您使用一些键,比如Home和End。
xbindkeysxbindkeys可以拦截任何按键并运行脚本。
也可以看到一些配置文件示例,运行xbindkeys --defaults > $HOME/.xbindkeysrc并查看该文件。
请注意,它不会打开终端,只需在进程中执行文件。
下面是运行所需的实际命令。一定要确认你自己的密码,这些正是我所拥有的。
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"# Write current config to a file
xmodmap -pke > ~/.Xmodmap
# Load the config into xmodmap
xmodmap ~/.Xmodmap在~/.profile或~/.bash_profile中添加上面的最后一个命令将在您登录时加载它,前提是您已经设置了标准。对我来说,这有点慢,您可能只想手动添加所有的xmodmap -e命令。
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重新加载。
一个更全面、更费力的解决方案就是只使用编写自己的键盘布局。
https://unix.stackexchange.com/questions/429835
复制相似问题