孤不冷cing 发表于 2022-7-29 23:21:04

用xmodmap进行按键映射遇到问题

本帖最后由 孤不冷cing 于 2022-8-14 10:49 编辑

想看我最终配置内容的,置项在第二层了。
存在问题有写,并且这个配置对终端及vim不生效。

可能这些问题只对我的电脑存在,想试的可以试试



[*]目标
我在win上用capslock+习惯了,觉得很好用,所以就上网琢磨linux下的映射,了解到了xmodmap,想自己简单实现几个自己最常用的快捷组合键


[*]现状
xmodmap.config内容如下,是按网上写的。
右边是修改后的keycode和keysym
现状是从右边看确实修改了,但是实际并没有任何效果

xmodmap.config内容
clear lock
clear mod1
clear mod3
clear mod4
clear mod5
add mod1 = Alt_L Alt_R
add mod3 = Hyper_L Hyper_R
add mod4 = Super_L Super_R
add mod5 = ISO_Level3_Shift

keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
! swap backspace and caps+w
keycode 25 = w W BackSpace BackSpace
! swap delete and caps+r
keycode 27 = r R Delete Delete
! swap up and caps+e
keycode 26 = e E Up Up
! swap down and caps+d
keycode 40 = d D Down Down
! swap left and caps+s
keycode 39 = s S Left Left
! swap right and caps+f
keycode 41 = f F Right Right
! swap esc and caps+q
keycode 24 = q Q Escape Escape
! swap home and caps+u
keycode 30 = u U Home Home
! swap end and caps+p
keycode 33 = p P End End
! swap enter and caps+space
!keycode 65 = space space enter enter

输入xmodmap -pke查看的部分内容
keycode23 = Tab ISO_Left_Tab Tab ISO_Left_Tab
keycode24 = q Q Escape Escape
keycode25 = w W BackSpace BackSpace
keycode26 = e E Up Up
keycode27 = r R Delete Delete
keycode28 = t T t T
keycode29 = y Y y Y
keycode30 = u U Home Home
keycode31 = i I i I
keycode32 = o O o O
keycode33 = p P End End
keycode34 = bracketleft braceleft bracketleft braceleft
keycode35 = bracketright braceright bracketright braceright
keycode36 = Return NoSymbol Return
keycode37 = Control_L NoSymbol Control_L
keycode38 = a A a A
keycode39 = s S Left Left
keycode40 = d D Down Down
keycode41 = f F Right Right
keycode42 = g G g G
keycode43 = h H h H
keycode44 = j J j J
keycode45 = k K k K
keycode46 = l L l L

期望
想实现图中注释的几个基本内容,不是交换,只是想让这几个组合按键能能具有相同的效果,原本的按键功能保持不变
例如:按住caps + w可以向上移动光标,并且上箭头还具有向上移动光标的功能


[*]疑问
能解释一下xmodmap怎么用的吗,网上的我越看越糊涂,连keycode和keysym都分不清了。我不知道他们都是啥意思了,也不知道xmodmap在干什么







孤不冷cing 发表于 2022-8-2 15:39:37

本帖最后由 孤不冷cing 于 2022-8-2 15:43 编辑

人造人 发表于 2022-7-30 22:39
参考这两个教程
Xmodmap (简体中文)
https://www.cnblogs.com/yinheyi/p/10146900.html


# cat xmodmap.config
clear lock
remove control = Control_R
clear mod1
clear mod4
clear mod5
add mod1 = Alt_L Alt_R
add mod4 = Super_L Super_R
add mod5 = ISO_Level3_Shift
add mod3 = Mode_switch

keysym Control_R = Caps_Lock
keysym Caps_Lock = Mode_switch
keysym Mode_switch = Control_R
add lock = Caps_Lock

! swap backspace and caps+w
keycode 25 = w W BackSpace W
! swap delete and caps+r
keycode 27 = r R Delete R
! swap up and caps+e
keycode 26 = e E Up E
! swap down and caps+d
keycode 40 = d D Down D
! swap left and caps+s
keycode 39 = s S Left S
! swap right and caps+f
keycode 41 = f F Right F
! swap esc and caps+q
keycode 24 = q Q Escape Q
! swap home and caps+u
keycode 30 = u U Home U
! swap end and caps+p
keycode 33 = p P End P
! swap enter and caps+space
keycode 65 = space NoSymbol Return
我这个不是已经把Caps_Lock、Ctrl_R、Mode_switch顺移了一次吗,为什么CapsLock还是能切换大小写,Ctrl_R也还是Ctrl功能
我整了三个小时也没明白

上面这个能实现我想要的功能了,但是就是每次按Caps+edsf都会切换一次大小写,很烦
所以我想干脆把caps直接换成纯Mode_switch算了,但是他还是能切换大小写
搞得我心力交瘁

人造人 发表于 2022-7-29 23:21:05

参考这两个教程
Xmodmap (简体中文)
https://www.cnblogs.com/yinheyi/p/10146900.html

下面这个我试过了,可以用
$ cat .Xmodmap                                                                        
clear lock
clear control
clear shift

! caps <--> ctrl_l
keycode66 = Control_L NoSymbol Control_L
keycode37 = Caps_Lock NoSymbol Caps_Lock

! esc <--> "`~"
keycode49 = Escape NoSymbol Escape
keycode   9 = grave asciitilde grave asciitilde

! space <--> ctrl_r
keycode65 = Control_R NoSymbol Control_R
keycode 105 = space NoSymbol space

! back_space <--> shift_r
keycode62 = BackSpace BackSpace BackSpace BackSpace
keycode22 = Shift_R NoSymbol Shift_R

add lock = Caps_Lock
add control = Control_L Control_R
add shift = Shift_L Shift_R

人造人 发表于 2022-7-29 23:30:56

图片看不清

孤不冷cing 发表于 2022-7-30 11:41:54

人造人 发表于 2022-7-29 23:30
图片看不清

我重新传了,可以了吗?

人造人 发表于 2022-7-30 12:43:44

再以文本的形式发一下

孤不冷cing 发表于 2022-7-30 20:51:46

本帖最后由 孤不冷cing 于 2022-7-30 21:23 编辑

人造人 发表于 2022-7-30 12:43
再以文本的形式发一下
我反应过来了,我改得这个是只能在终端以外的地方用是吗?我犯糊涂了,对不起。
我现在在网页上打字,可以使用我设置的这几个组合键了,但是存在几个问题

问题1:
每次按组合键之后,大小写都被转换了

问题2:
回车的keysym name是什么,我试了Enter和enter都不对,老是说我的name是有问题的

问题3:
每次重启之后都要在终端进root账户
输入
xmodmap xmodmap.config

我照着网上写了脚本文件,内容如下

1
2 Description=run xmodmap.config
3 Documentation=man:xmodmap
4 After=graphical.target
5 Wants=graphical.target
6
7
8 Type=oneshot
9 ExecStart=/usr/bin/bash -c 'export DISPLAY=":0"; /usr/bin/xmodmap -quiet /et    c/xmodmap.config'
10
11
12
13 WantedBy=graphical.target
14
15 After=graphical.target
16 Wants=graphical.target
17
18 export DISPLAY=":0";


但是并没有效果
脚本文件我可以在普通用户下编辑
但是xmodmap.config需要root用户
是不是因为这个原因呢?

另外,我想配置,或者应该先学习一下终端中的快捷键
我起初以为这样配置之后在终端里也是可以实现上下左右的
有什么办法可以在终端里也实现caps+edsf == 上下左右 吗?

人造人 发表于 2022-8-3 23:36:14

孤不冷cing 发表于 2022-8-2 15:39
我这个不是已经把Caps_Lock、Ctrl_R、Mode_switch顺移了一次吗,为什么CapsLock还是能切换大小写,Ct ...

你的这个配置在我这边一切正常
你重启一下linux试试

孤不冷cing 发表于 2022-8-14 10:43:57

人造人 发表于 2022-8-3 23:36
你的这个配置在我这边一切正常
你重启一下linux试试

还是不行,xmodmap -pke也显示的跟我想的一样,xmodmap看keysym code也确实互换了
我整不会了,就这样用吧{:9_218:}
学C去了,不整这玩意了
谢谢你连着这么多天帮我试
页: [1]
查看完整版本: 用xmodmap进行按键映射遇到问题