Як запобігти ефекту перемикання шапки-блокування, не переставляючи його та не відключаючи?


22

У мене є програма X11, яка захоплює cap-lock і використовує її. Проблема в тому, що я хочу відключити звичайне перемикання шапки-блокування, але це, здається, відключить ключ.

Отже, що б X11 отримував для натискання клавіш cap-lock, він все одно повинен отримати (не відключаючи ключ або переставляючи його на якусь іншу клавішу), але без нічого перекладу натискання клавіші на cap-toggle (що може бути на рівні ядра? ).

Я спробував змінити код сканування, але це просто переробили ключ. Я також видалив запис "caplock" xmodmap, але це також вимкнено.

Як я можу сказати ядро ​​ігнорувати ключ-ключ (wrt його регулярний функціонал), але все-таки передавати повідомлення на X?

Просто для додання трохи детальніше:

"Програма", яку я намагаюся запустити, очолюється "Енсо". Коли немає ключа, я отримую помилку "CRITICAL: root: Не вдалося знайти ключ квазимоди". Коли немає помилок, я можу використовувати Enso з кришками, але sofar не придумав, як відключити функціональність шапок, в той час як Ensen все ще може отримати це.


Вкажіть, будь ласка, детальну інформацію про те, що ви намагалися, тобто точні вирази xmodmap. Без деталей ми не можемо сказати, чи знали ви, що робити та чи зробили це неправильно, чи правильно ви це зробили, але код не вдався з іншої причини. Також дайте нам ОС, яку ви використовуєте, оскільки деякі мають обробку ключа, яка відбувається нижче рівня сервера X.
Кайл Джонс

@Kyle Я спробував "видалити Lock = Caps_Lock", а потім "keycode 66 =" (який було відображено в CapsLock). Я запускаю ubuntu 12.10 на 64-бітній машині.
Chris2048

Інша можливість - перевстановити інший ключ. setxkbmap -option ctrl:nocapsперезавантаження Control_L, наприклад.
Кріс Даун

Ви хочете сказати, що з вами буде все в порядку, якщо ми можемо дати вам можливість перевстановити кепки-замок, щоб сказати керуючий ключ, чи це не те, що ви шукаєте? Оскільки стоїть, це питання є дещо заплутаним, воно дійсно піде на довгий шлях, якщо ви додасте конкретику до питання про те, що ви намагалися поки що.
slm

Так що нам теж зрозуміло, в Ubuntu 12.10 є функція, за допомогою якої можна зробити додаткові клавіші управління. Це те, про що ти думаєш, кажучи "переоформлення"? Ось знімок екрана діалогу: 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.

Переглядаючи цей файл для "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 "".
Немо

Він відображається у xev, але насправді не працює у двигуні Valve Source 2.
Велкан

1

Якщо ви не хочете, щоб Caps Lockключ мав його звичайний ефект, ви можете вимкнути Lockмодифікатор, зберігаючи Caps_Lockклавішу.

xmodmap -e 'clear Lock'

Це, здається, не відключить функцію caplock.
Chris2048

@ Chris2048 працює для мене ™. Це може бути несумісним із деякими налаштуваннями XKB або з деякими програмами (програми виконують власну обробку блокування заглушок, більшість з них використовує ті самі функції бібліотеки, але є винятки).
Жил "ТАК - перестань бути злим"

0

Це дуже схоже на відповідь, яку я дав на інше запитання . Цей фрагмент коду xkb повинен зробити свою справу.

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

куди це має піти? Я дивився на подібні фрагменти 10 хвилин, не розуміючи. Чи повинен він бути частиною більш повного файлу чи він може стояти окремо і застосовуватися до конфігурації за замовчуванням?
Nikana Reklawyks
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.