Ali*_*yhl 6 x11 xmodmap xkb keyboard-layout
我想将AltGr+绑定W到æ
,以及其他一些组合,我该怎么做?我还需要AltGr+ Shift+W到Æ
。
我通常setxkbmap
用来更改键盘映射。
这很容易做到xmodmap
。您可以使用keysym
指令来更改与键关联的键符。这会影响当前使用任何修饰符组合发送此键符的所有键。对于普通的可打印字符,四个键符分别是裸键、带键Shift、带键AltGr和带AltGr+键Shift。
keysym A = a A aring Aring
keysym O = o O oslash Ooblique
keysym W = w W ae AE
Run Code Online (Sandbox Code Playgroud)
将这些指令放在一个文件中,例如~/.Xmodmap
,并用xmodmap ~/.Xmodmap
. ~/.Xmodmap
在某些环境中登录时会自动加载调用的文件(这取决于您的 unix 变体和桌面环境)。
您可以在/usr/share/X11/locale/en_US.UTF-8/Compose
或/usr/include/X11/keysymdef.h
(Debian 位置,在其他系统上可能有所不同)中找到键符名称。如果您不知道某个符号的键符名称,则可以使用其 Unicode 编号:U
后跟十六进制数字,例如
keysym W = w W U00e6 U00c6
Run Code Online (Sandbox Code Playgroud)
您可以使用自定义 XKB 地图来实现这一点。我建议您使用 转储当前地图xkbcomp $DISPLAY dump.xkb
,编辑它并使用 加载它xkbcomp newmap.xkb $DISPLAY
。转储文件非常大并且有很多多余的信息。
进行编辑的最简单方法是查找 altgr 在当前地图中的使用情况。通常是 ISO_LEVEL3 修饰符。如果您当前的键盘映射不使用 altgr,您可以尝试加载一个使用 altgr 的键盘映射,看看如何完成。例如-layout us -variant altgr-intl
,它非常广泛,并且绑定了大多数(如果不是全部)欧洲钥匙。下面是对正在发生的事情的简短介绍。
xkb 从内核获取键码,为每个键码设置一个标签,并使用该标签和修饰键来决定它应该输出什么键符号。每个键都分配有一个类型,该类型定义了它期望的修饰键以及每个组合的输出内容。查看您得到的转储xkbcomp
:标签在 中定义xkb_keycodes
,类型在 中xkb_types
,标签到键符号在 中xkb_symbols
。其中,xkb_symbols
您要编辑并参考其他两个以了解要更改的内容。您还可以查看xkb_symbols
并了解其当前的完成方式并进行适当的编辑。
xkb_types
部分包含不同的键定义修饰符级别,您需要一个具有 altgr 和 shift 模式的修饰符级别。例子:
type "FOUR_LEVEL_ALPHABETIC" {\n modifiers= Shift+Lock+LevelThree;\n map[Shift]= Level2;\n map[Lock]= Level2;\n map[LevelThree]= Level3;\n map[Shift+LevelThree]= Level4;\n map[Lock+LevelThree]= Level4;\n map[Shift+Lock+LevelThree]= Level3;\n level_name[Level1]= "Base";\n level_name[Level2]= "Shift";\n level_name[Level3]= "Alt Base";\n level_name[Level4]= "Shift Alt";\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n这意味着标记为的键FOUR_LEVEL_ALPHABETIC
有四种模式。Normal、shift/caps、altgr、altgr-shift 听起来像是您正在寻找的。
如果您还不知道 w 的键码,现在您想知道它是什么。\nxev | grep -A2 --line-buffered \'^KeyRelease\' | sed -n \'/keycode /s/^.*keycode \\([0-9]*\\).* (.*, \\(.*\\)).*$/\\1 \\2/p\'
为您提供您按下的按键的键码。grep
是为了使输出更具可读性。
xkb_keycodes
将您获得的键码与之前获得的转储映射部分进行交叉引用。对我来说, w 给出键码 25。less
转储并以<LABEL> = ##;
, example的形式找到正确的键码<AD02> = 25;
。或者cat dump.xkb| grep \' = 25;\'
Label 只是 xkb 在后面部分中用来引用密钥的名称。
现在您已经有了标签,请转到xkb_symbols
实际将标签映射到键符号的位置。格式为
key <AD02> {\n type= "FOUR_LEVEL_ALPHABETIC",\n symbols[Group1]= [ w, W, aring, Aring ]\n };\n
Run Code Online (Sandbox Code Playgroud)\n\ntype=
是您想要从部分中获得的类型xkb_types
,symbols[Group1]=
对于该类型所需的每种模式都有一个键符号。同样,这种类型的正常、shift/caps、altgr、shift-altgr。[Group1]
据我所知,这是一种使用多个键盘映射的方法,您可以使用您设置的锁定键即时更改。我自己不使用组,所以对我来说一切都是组1。
要查找可以在此处使用的所有不同的键盘符号,请检查/usr/include/X11/keysymdef.h
。您要查找的两个符号ae
分别是 \xc3\xa6 和AE
\xc3\x86。
key <AD02> {\n type= "FOUR_LEVEL_ALPHABETIC",\n symbols[Group1]= [ w, W, ae, AE ]\n };\n
Run Code Online (Sandbox Code Playgroud)\n\n我可能有点胡言乱语了。查看XKB 上的Arch Wiki页面,无论您使用什么操作系统或发行版,它都是好东西。
\n 归档时间: |
|
查看次数: |
2178 次 |
最近记录: |