如何防止大写锁定切换效果,而无需重新映射或禁用它?


22

我有一个X11程序,可以抓住大写锁定并使用它。问题是,我想禁用常规的大写锁定切换,但是这样做似乎禁用了键。

因此,无论X11获得大写锁定按键,它还是必须获得(不禁用键,或将其重新映射到其他键),但是没有任何将按键转换为大写转换的功能(可能在内核级别)? )。

我尝试更改扫描码,但这只是重新映射了键。我也删除了capslock条目xmodmap,但这也禁用了capslock。

我该如何告诉内核忽略caps键(将其正常功能改写),但仍将消息传递给X?

只是添加更多细节:

我要运行的“程序”是人性化的“ enso”。当没有密钥时,出现错误“ CRITICAL:root:找不到准模式密钥”。当没有错误时,我可以将enso与caps一起使用,但是sofer还没有弄清楚如何在enso仍然可以使用的情况下禁用caps功能。


请提供有关您尝试过的内容的详细信息,即确切的xmodmap表达式。没有细节,我们无法告诉您您是否知道该做什么和做错了什么,或者您是否做对了,但是代码由于其他原因而失败。另外,请提供给我们您正在使用的操作系统,因为某些操作系统在X服务器级别以下进行键码处理。
凯尔·琼斯

@Kyle我尝试了“删除锁定= Caps_Lock”,然后尝试了“键码66 =“(已映射到CapsLock)。我在64位计算机上运行ubuntu 12.10。
Chris2048

另一种可能性是重新映射到另一个键。setxkbmap -option ctrl:nocaps重新映射到Control_L,例如。
克里斯·

如果我们可以给您一种重新映射大写锁定以说出控制键的方式,或者您不是要这样做,那是在说您会没事的吗?从目前的角度来看,这个问题有点令人困惑,如果您将具体细节添加到到目前为止您已经尝试过的问题中,那确实会走很长一段路。
slm

只是我们也很清楚,Ubuntu 12.10中有一项功能,您可以使大写锁定成为额外的控制键。当您说“重新映射”时,这就是您的想法吗?这是对话框的屏幕截图:flickr.com/photos/11708996@N00/3010939023
slm

Answers:


28

我想我有一种技术可以禁用Capslock按键的切换,但不能完全禁用按键,也不能将其重新映射到键盘上的另一个按键。

如果使用命令:

setxkbmap -option caps:none

键盘将不再切换。我已经在运行Fedora 14的笔记本电脑上确认了这一点,LED不再点亮,并且正常Capslock功能消失了。

但是,使用xev仍显示按键被按下:

$ xev
...
...
KeyPress event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504852, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x6800001,
    root 0xb1, subw 0x0, time 261504971, (167,-15), root:(353,268),
    state 0x10, keycode 66 (keysym 0xffffff, VoidSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
    ...

因此,被按键事件仍然保持不变,以供其他应用程序使用。

setxkbmap

该文件/usr/share/X11/xkb/rules/xorg.lst包含您可以提供的选项的完整列表setxkbmap

在该文件中查找“ cap”,我注意到这一行:

caps:none            CapsLock is disabled

此文件中还有其他值,因此,如果这不是您想要的值,则可能会改用这些替代值之一。

$ grep cap /usr/share/X11/xkb/rules/xorg.lst
  grp:caps_switch      CapsLock (while pressed), Alt+CapsLock does the original capslock action
  grp:caps_toggle      CapsLock
  grp:shift_caps_toggle Shift+CapsLock
  grp:shift_caps_switch CapsLock (to first layout), Shift+CapsLock (to last layout)
  grp:alt_caps_toggle  Alt+CapsLock
  lv3:caps_switch      CapsLock
  lv3:caps_switch_latch CapsLock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)
  ctrl:nocaps          Make CapsLock an additional Ctrl
  ctrl:swapcaps        Swap Ctrl and CapsLock
  grp_led:caps         CapsLock
  caps                 CapsLock key behavior
  caps:internal        CapsLock uses internal capitalization. Shift "pauses" CapsLock
  caps:internal_nocancel CapsLock uses internal capitalization. Shift doesn't affect CapsLock
  caps:shift           CapsLock acts as Shift with locking. Shift "pauses" CapsLock
  caps:shift_nocancel  CapsLock acts as Shift with locking. Shift doesn't affect CapsLock
  caps:capslock        CapsLock toggles normal capitalization of alphabetic characters
  caps:numlock         Make CapsLock an additional NumLock
  caps:swapescape      Swap ESC and CapsLock
  caps:escape          Make CapsLock an additional ESC
  caps:backspace       Make CapsLock an additional Backspace
  caps:super           Make CapsLock an additional Super
  caps:hyper           Make CapsLock an additional Hyper
  caps:shiftlock       CapsLock toggles Shift so all keys are affected
  caps:none            CapsLock is disabled
  compose:caps         CapsLock
  shift:breaks_caps    Shift cancels CapsLock
  shift:both_capslock  Both Shift-Keys together toggle CapsLock
  shift:both_capslock_cancel Both Shift-Keys together activate CapsLock, one Shift-Key deactivates

参考文献


5
如果不小心在打开大写锁定的情况下运行该命令,则可以通过运行重置xkbmap setxkbmap -option ""
Nemo 2014年

它显示在xev中,但在Valve Source 2引擎中实际上不起作用。
Velkan

1

如果您不希望Caps Lock按键具有其通常的效果,则可以Lock在保留按键Caps_Lock符号的同时关闭修饰符。

xmodmap -e 'clear Lock'

那似乎并没有禁用大写锁定。
Chris2048

@ Chris2048为我工作™。它可能与某些XKB设置或某些应用程序不兼容(应用程序执行自己的大写锁定处理,大多数应用程序使用相同的库函数,但有例外)。
吉尔(Gilles)'所以

0

这与我对另一个问题的回答非常相似。xkb代码的这个片段应该可以解决问题。

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};

这应该去哪里?我一直在研究这类摘要达10分钟,但并未弄清楚。它是否必须是更完整文件的一部分,还是可以单独使用并应用于默认配置?
Nikana Reklawyks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.