gre*_*man 10 keyboard x11 xmodmap xkb
我想将 Alt 分配给 CapsLock 键,将 Meta 分配给 Alt 键。但是这样一来,Alt 键就不再被识别为 Alt,CapsLock 键也不再被识别为 CapsLock。
openSUSE 11.4
openSUSE 11.1 -- 因为我是我电脑的唯一用户,所以我“简单地”编辑了 /usr/share/X11/xkb/keycodes/xfree86 文件,它没有问题。键在最低级别连接到它们的符号。
xkb
我创建了一个波兰布局 (pl_ext) 的变体,它(用于测试)由以下条目组成:
key <CAPS> { [ Alt_L ] };
modifier_map Mod1 { Alt_L, Alt_R };
Run Code Online (Sandbox Code Playgroud)
然而,这根本没有任何作用,xev 中的 CapsLock 键被识别(符号)为 Alt_L,但是当我按下 CapsLock 键时,它的行为类似于 CapsLock(例如,假设您在菜单中有文件,Alt+F 应该打开此菜单,它不会)。
问题:如何定义布局文件将 CapsLock-key 设置为 Alt,Alt-key 设置为 Meta?
编辑:这里成功了一半!现在我有这样的条目:
key <CAPS> { [ Alt_L ] };
modifier_map Mod1 { <CAPS> }; // this is a difference
Run Code Online (Sandbox Code Playgroud)
这可以按需要工作。这不会:
key <LALT> { [ Meta_L ] } ;
key <RALT> { [ Meta_R ] } ;
modifier_map Mod5 { <LALT>,<RALT> };
Run Code Online (Sandbox Code Playgroud)
xev 将 Alt 键识别为 Meta,但我仍然可以使用 Alt+F 打开菜单、切换窗口,但我不应该这样做。另一方面,我不能输入任何民族性格,我应该。
xfree86
但是现在这不起作用,我想读取的是其他文件表而不是 xfree86。
问题:如何找出系统(X/Gnome)使用的是哪个键码表文件?
编辑:对我来说最好的选择 - 编辑键码表 -由 macias 的回答解决了!
xmodmap
成功的一半在这里。这部分按需要工作:
移除 Lock = Caps_Lock 键符 Caps_Lock = Alt_L
现在,我有真正映射到 Alt 的 CapsLock 键。但是这个:
键符 Alt_L = Meta_L
...做了奇怪的事情。xev 显示 Alt 键映射到 Meta,但是当我按 Alt+F(这应该映射到 Meta+F --> 什么都不做)时,文件菜单被打开。更重要的是,当我按下 Alt+Tab 时,我得到了窗口切换器(我不应该——Alt 现在是 Meta)。
问题:如何“删除”Alt 键的旧行为?
编辑:这部分由Gilles's answer 解决。
回答任何问题都会(希望)解决我的问题,但是我更喜欢完全使用 xkb,因为我可以打包 xkb 的所有文件并在一个地方更改布局。预先感谢您的任何帮助!
我在波兰 Ubuntu 论坛上找到了答案。现在编辑的不是“xfree86”文件而是“evdev”文件。通过这种方式,您可以进行适用于所有布局的永久性更改。
示例(根据 Gilles 请求)——以 root 身份登录,转到
/usr/share/X11/xkb/keycodes
Run Code Online (Sandbox Code Playgroud)
备份“evdev”文件,然后编辑它。根据您的喜好更改代码,例如在我的情况下:
<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)
Run Code Online (Sandbox Code Playgroud)
您可以通过执行命令“xev”找到代码,但您可以简单地查看原始“evdev”文件。
注销,登录,享受你的新键盘:-)。
(这个答案仅是关于 xmodmap 的。我确信可以用 XKB 做到这一点,我只是不知道如何。)
修饰符和键符是独立分配的。但是如果你没有一致地设置它们,你会得到奇怪的效果。我认为您缺少的只是add将修饰符分配给的命令Meta_L,尽管您可能还需要清除并重新分配修饰键。您可以将Mod1and替换Mod2为Mod3, Mod4and Mod5:它们是可以互换的,只要确保不要将一个用于两个不同的目的。
clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
Run Code Online (Sandbox Code Playgroud)