リマップまたは無効化せずに、Caps-Lockトグル効果を防ぐ方法は?


22

caps-lockを取得して使用するX11プログラムがあります。問題は、通常のcaps-lockトグルを無効にしたいのですが、そうするとキーが無効になるようです。

そのため、X11がcaps-lockキーを押すと、キーを無効にしたり、他のキーに再マッピングしたりする必要はありませんが、キープレスをcaps-toggleに変換する必要はありません(カーネルレベルですか?) )。

スキャンコードを変更してみましたが、これはキーを再マップしただけです。capslockエントリxmodmapも削除しましたが、これによりcapslock も無効になりました。

caps-keyを無視するようカーネルに指示する方法はありますか(通常の機能はありません)、それでもXにメッセージを渡すことができますか?

もう少し詳細を追加します。

私が実行しようとしている「プログラム」は、人間化された「enso」です。キーがない場合、「CRITICAL:root:Could n't find quasimode key」というエラーが表示されます。エラーがない場合は、ensoをcapで使用できますが、sosoは、ensoを使用してcaps機能を無効にする方法を理解していません。


試したものの詳細、つまり正確なxmodmap式を入力してください。詳細がなければ、何をすべきかを知っていて間違ったことをしたのか、それとも正しく行ったがコードが他の理由で失敗したのかを判断できません。また、Xサーバーレベルより下でキーコード処理が行われるものがあるため、使用しているOSもお​​知らせください。
カイルジョーンズ

@Kyle「Remove Lock = Caps_Lock」を試し、次に「keycode 66 = "(CapsLockにマッピングされました)」を試しました。64ビットマシンでubuntu 12.10を実行しています。
Chris2048

別の可能性は、別のキーに再マッピングすることです。たとえば、にsetxkbmap -option ctrl:nocaps再マップしControl_Lます。
クリスダウン

Caps-Lockを再マップしてコントロールキーを表示する方法を提供できれば、それで問題ないということですか?現状ではこの質問はやや紛らわしいので、これまでに試したことの質問に詳細を追加すれば、本当に長い道のりになります。
slm

はっきりしているように、Ubuntu 12.10にはcaps-lockを追加のコントロールキーにできる機能があります。これは、「再マッピング」と言うときに考えていることですか?ダイアログのスクリーンショットは次のとおり
slm

回答:


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
capslockをオンにして誤ってコマンドを実行した場合は、を実行してxkbmapをリセットできますsetxkbmap -option ""
ニモ14

xevに表示されますが、Valve Source 2エンジンでは実際には機能しません。
ヴェルカン

1

Caps Lockキーに通常の効果を与えたくない場合はLockCaps_Lockkeysym を保持したまま修飾子をオフにすることができます。

xmodmap -e 'clear Lock'

それはcapslockを無効にしないようです。
Chris2048

@ Chris2048 Works For Me™。一部のXKB設定または一部のアプリケーションと互換性がない可能性があります(アプリケーションは独自のCaps Lock処理を行い、それらのほとんどは同じライブラリ関数を使用しますが、例外があります)。
ジル 'SO-悪であるのをやめる'

0

これは私が別の質問に与えた答えに非常に似ています。このxkbコードのスニペットがトリックを行うはずです。

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

これはどこに行くべきですか?私は10分間、この種のスニペットを考えずに見てきました。より完全なファイルの一部である必要がありますか、それともスタンドアロンでデフォルトの構成に適用できますか?
ニカナレクラビクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.