ubuntu键位修改
2024.7.14 更新:使用.desktop开机启动
在 ~/.config/autostart/ 下建一个 setkeyboard.desktop,写:
1 | [Desktop Entry] |
要点在这两行:
1 | Exec=gnome-terminal -- bash -c 'setxkbmap -option caps:swapescape -option ctrl:swap_lalt_lctl' |
必须新开一个terminal来运行,不然不会执行,为此Terminal必须设置为true
命令运行完后这个终端会自动退出,一般不会被察觉
2024.5.20 更新:改用setxkbmap,封装了各种键映射和交换的命令
setxkbmap 修改键位
1 | setxkbmap -option caps:swapescape -option ctrl:swap_lalt_lctl |
交换capsLock和escape, lAlt和lCtrl。对于第一条,caps是组,swapescape是命令名。第二条同理。
setxkbmap对于不同的映射做了分组管理,各组之间会有重复功能的命令。
/usr/share/X11/xkb/rules
文件夹下的base.lst或evdev.lst文件中写了相应的命令和对应的功能,按需查找。
查看当前规则:
1 | setxkbmap -print |
输出
1 | xkb_keymap { |
可以看出使用的就是evdev规则,由于我的前一条设置,xkb_symbols多了capslock(swapescape)+ctrl(swap_lalt_lctl)这两项
持久化修改
命令行的修改仅对于当前登陆有效,注销或关机后又失效。为了长期有效,将修改键位的命令写到~/.xprofile中,然后chmod +x ~/.xprofile
,命令将会在登入时执行
通过打log实测发现.xprofile确实运行了,但键位修改未生效。改为:
1 | (sleep 5 && setxkbmap -option caps:swapescape -option ctrl:swap_lalt_lctl)& |
休眠的方法生效了,疑似有其他登陆启动项覆盖了我的设置。查看/var/log/Xorg.0.log和/var/log/syslog定位到gdm-x-session启动程序,每次登陆桌面会话都会设置键盘项。怀疑是它,但还没有找到方法在它之后运行~/.xprofile
以下是原博客,使用xmodmap手动修改键位
演示交换大写锁定键caps_lock和esc。
Linux: 使用xmodmap
xmodmap修改keycode到keysyms的映射关系。keycode对应编码物理按键,keysyms是按键翻译成什么功能。参考Linux下的keycode与keysyms
1 | xmodmap -pke # 查看键位 |
创建~/.Xmodmap, “!”表示注释:
1 | clear lock |
使用:
1 | xmodmap ~/.Xmodmap |
一开始调如果键盘不自带大写锁定灯,可能不容易发现问题,可以安装一个键盘回显软件帮助调试,比如screenkey。
修改.bashrc使得每次启动生效,加入:
1 | [[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap &>/dev/null |
但这会导致打开CLI窗口可能两行xmodmap命令,据说要写在~/.xinitrc里,现在还没整出来。
vscode中上述调整不生效
ctrl+,打开设置找到Keyboard Dispatch,将选项从code改为keyCode即可
个人配置
Capslock <-> Escape
Left Ctrl <-> Left Alt
1 | ! swap Escape and Caps_lock |
- Title: ubuntu键位修改
- Author: Endless_daydream
- Created at : 2024-03-02 14:39:52
- Updated at : 2024-07-14 17:28:50
- Link: https://endless_daydream.gitee.io/2024/03/02/linux/ubuntu键位修改/
- License: This work is licensed under CC BY-NC-SA 4.0.