bwr*_*bit 3 x11 xmodmap xkb xcape
我正在使用 manjaro i3 并且正在考虑修改我所做的一些键映射。目前我正在使用 xcape、xmodmap 和 setxkbmap 命令来重新映射以下键:
我已经用这个设置脚本完成了这个:
setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape'
xmodmap -e "keycode 47 = colon semicolon"
Run Code Online (Sandbox Code Playgroud)
我想就我希望进行的其他更改寻求一些帮助或建议,因为我已经破坏了我的键映射,并且在使用下面列出的打印屏幕重新映射时必须重新安装我的操作系统才能回到原状态。我希望做出的改变如下:
我应该使用什么工具来完成这些重新映射?另外,如果有人有一些他们过去使用过的类似示例,那也会非常有帮助!在此先感谢您的帮助。
小智 6
我在 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
Run Code Online (Sandbox Code Playgroud)
有些按键xev
不会打印按键代码,例如 Print Screen。对于这些,您可以通过 grep 浏览下一节中创建的文件。
xmodmap
您可以通过运行将当前映射打印到标准输出xmodmap -pke
。通过首先将xmodmap
布局备份到文件,您将省去一些潜在的麻烦:
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
Run Code Online (Sandbox Code Playgroud)
如果密钥没有出现在xev
.
xmodmap -pke ~/.Xmodmap.orig
Run Code Online (Sandbox Code Playgroud)
你已经知道这一点,但只是重申:
xmodmap -e "keycode [number] = [keys...]"
Run Code Online (Sandbox Code Playgroud)
这将暂时为您的会话重新绑定密钥。xmodmap -pke
再次运行将反映这些变化。
xmodmap
使用空格分隔的列来表示 的不同修饰符/模式keycode
。从左到右分别是:
例如:
cat ~/.Xmodmap | grep Print
keycode 107 = Print Sys_Req Print Sys_Req
Run Code Online (Sandbox Code Playgroud)
这将单独设置“J”键“j”,当按下 Shift 时设置为“J”,使用 Mode_switch 按下时设置向下箭头,使用 Mode_switch 和 Shift 按下时设置 Page Down。
Mode_switch
Mode_switch
是一个单独的通用修饰符,类似于 Shift。我认为很多键盘Mode_switch
不再带有专用(AltGr) 键,但您可以使用xmodmap
.
xmodmap -e "keycode [number] = [keys...]"
Run Code Online (Sandbox Code Playgroud)
xbindkeys
我不知道使用xmodmap
. 但是,有一些简单的方法。
该I3文档对使用的例子bindsym
/bindcode
在你的指令~/.config/i3/config
文件。
xmodmap -e "44 = j J Down Next"
Run Code Online (Sandbox Code Playgroud)
我还没有设置 i3,还没有测试过,但它直接来自用户手册。我猜这些代码与您在xmodmap
& 朋友中找到的相符。
查看设置 > 设备 > 键盘 > 键盘快捷键。单击加号并添加脚本/键组合。请注意,您必须将完整路径(从根目录)放入脚本并确保它是可执行的。
在我的测试中,GNOME 不允许您使用某些键,例如 Home 和 End。
xbindkeys
xbindkeys
可以拦截任何按键并运行脚本。
太看一些配置文件示例,运行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"
Run Code Online (Sandbox Code Playgroud)
# Set left Alt as Mode_switch
xmodmap -e "keycode 108 = Mode_switch"
Run Code Online (Sandbox Code Playgroud)
将上面的最后一个命令添加到您的~/.profile
或~/.bash_profile
将在您登录时加载它,假设您有一个标准设置。对我来说这有点慢,您可能只想xmodmap -e
手动添加所有命令。
xbindkeys
确保xbindkeys
已安装,并将其添加到您的~/.xbindkeysrc
文件中:
bindcode 214 exec /home/you/some_script.sh
Run Code Online (Sandbox Code Playgroud)
然后用xbindkeys -p
.
关于重新映射的
Emacs Wiki 页面 关于 xmodmap 的 Emacs Wiki 页面 关于 Xmodmap 的
Arch Wiki
更多关于 StackExchange 上的 Mode_switch
一个更全面和更费力的解决方案是只编写您自己的键盘布局。