Как предотвратить эффект переключения caps-lock, не переназначая и не отключая его?

22

У меня есть программа X11, которая захватывает caps-lock и использует ее. Проблема в том, что я хочу отключить обычное переключение caps-lock, но, похоже, это отключает ключ.

Таким образом, что бы X11 ни получал за нажатие клавиши caps-lock, он все равно должен получить (без отключения ключа или переназначения его на какой-либо другой ключ), но без каких-либо преобразований нажатия клавиши в переключатель caps (который может быть на уровне ядра? ).

Я попытался изменить код сканирования, но это просто переназначило ключ. Я тоже удалил запись с заглавными буквами xmodmap, но это также отключило заглавные буквы.

Как я могу сказать ядру игнорировать ключ caps (по сравнению с его обычной функциональностью), но все же передать сообщение X?

Просто чтобы добавить немного больше деталей:

«Программа», которую я пытаюсь запустить, является гуманизированной «enso». Когда ключа нет, я получаю сообщение об ошибке «CRITICAL: root: Не удалось найти ключ квазирежима». Когда ошибки нет, я могу использовать enso с заглавными буквами, но Софар не может понять, как отключить заглавные буквы, пока enso все еще может их найти.

Chris2048
источник
Пожалуйста, предоставьте подробную информацию о том, что вы пытались, то есть точные выражения xmodmap. Без подробностей мы не можем сказать, знали ли вы, что делать и сделали ли это неправильно, или правильно ли вы это сделали, но код не удался по какой-то другой причине. Также предоставьте нам используемую ОС, потому что у некоторых есть обработка кода ключа, которая происходит ниже уровня X-сервера.
Кайл Джонс
@Kyle Я попытался «удалить Lock = Caps_Lock», а затем «keycode 66 =» (который был сопоставлен с CapsLock). Я использую Ubuntu 12.10 на 64-битной машине.
Chris2048
Другая возможность - переназначить на другой ключ. setxkbmap -option ctrl:nocapsпереназначает Control_L, например.
Крис Даун
Говорят, что с тобой все будет в порядке, если бы мы могли дать тебе способ переназначить caps-lock, чтобы сказать управляющий ключ, или это не то, что тебе нужно? Поскольку этот вопрос несколько сбивает с толку, он действительно будет иметь большое значение, если вы добавите конкретную информацию в вопрос о том, что вы пробовали до сих пор.
SLM
Для ясности, в Ubuntu 12.10 есть функция, которая позволяет сделать caps-lock дополнительным управляющим ключом. Это то, что вы думаете, когда говорите «переназначение»? Вот скриншот диалогового окна: flickr.com/photos/11708996@N00/3010939023
slm

Ответы:

28

Я думаю, что у меня есть техника для отключения переключения Capslockклавиши, но не для полного отключения клавиши вместе или для переназначения ее на другую клавишу на клавиатуре.

Если вы используете команду:

setxkbmap -option caps:none

Клавиатура больше не будет переключаться. Я подтвердил это на своем ноутбуке с Fedora 14, светодиод больше не горит, и нормальная 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.

Пролистав этот файл для "шапки", я заметил эту строку:

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

Ссылки

SLM
источник
5
Если вы случайно запустили команду с включенным capslock, вы можете сбросить xkbmap, запустив setxkbmap -option "".
Немо
Он отображается в xev, но на самом деле не работает в движке Valve Source 2.
Велкан
1

Если вы не хотите, чтобы Caps Lockключ имел обычный эффект, вы можете отключить Lockмодификатор, сохраняя Caps_Lockkeyym.

xmodmap -e 'clear Lock'
Жиль "ТАК - перестань быть злым"
источник
Кажется, это не отключает capslock.
Chris2048
@ Chris2048 Работает для меня ™. Это может быть несовместимо с некоторыми настройками XKB или с некоторыми приложениями (приложения выполняют свою собственную обработку caps lock, большинство из них используют те же функции библиотеки, но есть исключения).
Жиль "ТАК - перестань быть злым"
0

Это очень похоже на ответ, который я дал на другой вопрос . Этот фрагмент кода xkb должен помочь.

partial modifier_keys
xkb_symbols "capsoff" {
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ Caps_Lock ],
        actions[Group1] = [ NoAction() ]
    };
};
billyjmc
источник
куда это должно идти? Я смотрел на такие фрагменты в течение 10 минут, не понимая этого. Должен ли он быть частью более полного файла или может быть автономным и применяться к конфигурации по умолчанию?
Никана Рекламикс