
Caps Lockを設定して使用するX11プログラムがあります。問題は通常のCaps Lockトグルを無効にしたいのですが、そうするとキーが無効になるようです。
そのため、X11がCaps Lockキーストロークを取得するたびにそれを取得する必要がありますが、キーを無効にしたり他のキーに再マップしたりせずに、キーストロークを大文字のトグルに変換する機能はありません(おそらくこの場所にあります)。カーネルレベル?)。
スキャンコードを変更してみましたが、キーが再マップされました。 Caps Lock エントリも削除しましたが、xmodmap
これにより大文字も無効になりました。
カーネルが大文字のキーを無視し(一般的な機能を使用しない)、メッセージをXに転送するように指示するにはどうすればよいですか?
詳細を追加するだけです。
私が運営したい「プログラム」は人間的な「エンソー」だ。キーがないと、「CRITICAL:root:準モードキーが見つかりません」というエラーが発生します。エラーがない場合は、ensoをcapsで使用できますが、ensoがまだ利用可能である間にcaps機能を無効にする方法がまだ見つかりませんでした。
答え1
私はキートグルを無効にする技術がありますが、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
...
したがって、押されたキーイベントは、他のアプリケーションがそれを選択できるように維持されます。
xkbmapの設定
このファイルには、/usr/share/X11/xkb/rules/xorg.lst
提供できるオプションの完全なリストが含まれていますsetxkbmap
。
このファイルで「cap」を見つけて、次の行を見つけました。
caps:none CapsLock is disabled
ファイルには他の値もあるため、これが目的の値でない場合は、代替値の1つがより適している可能性があります。
$ 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
引用する
答え2
Caps Lockキーの一般的な効果を望まない場合は、キーシンボルをLock
維持しながら修飾子をオフにできます。Caps_Lock
xmodmap -e 'clear Lock'
答え3
私が答えた答えと非常に似ています別の問題。このxkbコードはトリックを実行する必要があります。
partial modifier_keys
xkb_symbols "capsoff" {
key <CAPS> {
type[Group1] = "ONE_LEVEL",
symbols[Group1] = [ Caps_Lock ],
actions[Group1] = [ NoAction() ]
};
};
答え4
前に使った@slmが説明する方法しかし、(少なくともKDE Neonを使用するKDEプラズマでは)ある時点では動作が停止します。
ただし、秘密は以下に説明するようにKDE内部設定です。https://askubuntu.com/a/439230/626920