Gödel Asked: 2010-10-13 15:11:15 +0800 CST2010-10-13 15:11:15 +0800 CST 2010-10-13 15:11:15 +0800 CST 让修饰键充当 X 下的切换 772 有没有办法让Shift,Ctrl和Alt键在 X 下表现为切换?我知道如何在 CLI 下做到这一点(例如,通过这样做),但在 X 下没有找到这样做的参考。 请注意,这不是关于粘滞键的问题,它可以通过辅助功能选项启用。 gnome keyboard gui xorg xkb 3 个回答 Voted scottl 2010-10-19T02:30:21+08:002010-10-19T02:30:21+08:00 这是在 DE 级别 AFAIK 上实现的。KDE 可以选择锁定粘滞键: 启用锁定粘滞键: 如果您按下该Shift键两次然后按下该F键,计算机会将其解释为Shift+ F。现在,如果您键入 P,计算机会将其解释为字母 P ( Shift+ P)。要取消选择 Shift 键,请再次按下它。 http://docs.kde.org/stable/en/kdebase-workspace/kcontrol/kcmaccess/index.html sroecker 2010-10-16T10:49:54+08:002010-10-16T10:49:54+08:00 X11 中的键使用 xmodmap 重新映射,但 /usr/include/X11/keysymdef.h 中没有 Control_Lock 如果您有几个键,则可以将 Control 映射到 ISO_Next_Group_Lock 之类的东西,并使用Control+定义该组中的键Key。 我在这里找到了一些信息: https ://bbs.archlinux.org/viewtopic.php?id=75771 user.dz 2015-02-19T15:30:07+08:002015-02-19T15:30:07+08:00 这可以使用 XKB 兼容组件来实现 检查您正在使用的兼容性变体 $ setxkbmap -v -query Trying to build keymap using the following components: keycodes: evdev+aliases(qwerty) types: complete compat: complete symbols: pc+us(altgr-intl)+us:2+inet(evdev) geometry: pc(pc105) rules: evdev model: pc105 layout: us,us variant: altgr-intl, $ more /usr/share/X11/xkb/compat/complete default xkb_compatibility "complete" { include "basic" augment "iso9995" augment "mousekeys" augment "accessx(full)" augment "misc" augment "xfree86" augment "level5" augment "caps(caps_lock)" }; 修改misc文件,其中包含所需的修饰符解释 sudo nano /usr/share/X11/xkb/compat/misc 我已将Shift_L, Alt_L&Alt_R动作从SetModsto更改为LockMods, 添加了新Shift_R的 , Control_L&Control_R解释LockMods和评论//setMods.clearLocks(不确定是否需要)。这是完整的文件: default partial xkb_compatibility "misc" { virtual_modifiers Alt,Meta,Super,Hyper,ScrollLock; // Interpretations for some other useful keys interpret Terminate_Server { action = Terminate(); }; //setMods.clearLocks= True; // Sets the "Alt" virtual modifier interpret Alt_L+Any { //useModMapMods= level1; virtualModifier= Alt; action = LockMods(modifiers=modMapMods); }; interpret Alt_L { action = LockMods(modifiers=Alt); }; interpret Alt_R+Any { //useModMapMods= level1; virtualModifier= Alt; action = LockMods(modifiers=modMapMods); }; interpret Alt_R { action = LockMods(modifiers=Alt); }; // Sets the "Meta" virtual modifier interpret Meta_L+Any { // useModMapMods= level1; virtualModifier= Meta; action = SetMods(modifiers=modMapMods); }; interpret Meta_L { action = SetMods(modifiers=Meta); }; interpret Meta_R+Any { //useModMapMods= level1; virtualModifier= Meta; action = SetMods(modifiers=modMapMods); }; interpret Meta_R { action = SetMods(modifiers=Meta); }; // Sets the "Super" virtual modifier interpret Super_L+Any { // useModMapMods= level1; virtualModifier= Super; action = SetMods(modifiers=modMapMods); }; interpret Super_L { action = SetMods(modifiers=Super); }; interpret Super_R+Any { //useModMapMods= level1; virtualModifier= Super; action = SetMods(modifiers=modMapMods); }; interpret Super_R { action = SetMods(modifiers=Super); }; // Sets the "Hyper" virtual modifier interpret Hyper_L+Any { // useModMapMods= level1; virtualModifier= Hyper; action = SetMods(modifiers=modMapMods); }; interpret Hyper_L { action = SetMods(modifiers=Hyper); }; interpret Hyper_R+Any { //useModMapMods= level1; virtualModifier= Hyper; action = SetMods(modifiers=modMapMods); }; interpret Hyper_R { action = SetMods(modifiers=Hyper); }; // Sets the "ScrollLock" virtual modifier and // makes it actually lock when pressed. Sets // up a map for the scroll lock indicator. interpret Scroll_Lock+Any { virtualModifier= ScrollLock; action = LockMods(modifiers=modMapMods); }; include "ledscroll" include "misc(assign_shift_left_action)" }; partial xkb_compatibility "assign_shift_left_action" { // Because of the irrevertable modifier mapping in symbols/pc <LFSH> is // getting bound to the Lock modifier when using // symbols/shift(both_capslock), creating unwanted behaviour. // This is a quirk, to circumvent the problem. interpret Shift_L { action = LockMods(modifiers = Shift); }; interpret Shift_R { action = LockMods(modifiers = Shift); }; interpret Control_L { action = LockMods(modifiers = Control); }; interpret Control_R { action = LockMods(modifiers = Control); }; }; 编译更改并更新 initramfs 映像 sudo dpkg-reconfigure xkb-data sudo update-initramfs -u -k all 重启 参考: Archlinux Wiki:X 键盘扩展 XKB 配置的不可靠指南 XKB 配置文件
这是在 DE 级别 AFAIK 上实现的。KDE 可以选择锁定粘滞键:
http://docs.kde.org/stable/en/kdebase-workspace/kcontrol/kcmaccess/index.html
X11 中的键使用 xmodmap 重新映射,但 /usr/include/X11/keysymdef.h 中没有 Control_Lock
如果您有几个键,则可以将 Control 映射到 ISO_Next_Group_Lock 之类的东西,并使用Control+定义该组中的键Key。
我在这里找到了一些信息: https ://bbs.archlinux.org/viewtopic.php?id=75771
这可以使用 XKB 兼容组件来实现
检查您正在使用的兼容性变体
修改
misc
文件,其中包含所需的修饰符解释我已将
Shift_L
,Alt_L
&Alt_R
动作从SetMods
to更改为LockMods
, 添加了新Shift_R
的 ,Control_L
&Control_R
解释LockMods
和评论//setMods.clearLocks
(不确定是否需要)。这是完整的文件:编译更改并更新 initramfs 映像
重启
参考: