web-dev-qa-db-ja.com

xmodmapキーを再マップし、元のキーを無効にする方法は?

私は60%のキーボードを入手することを検討しており、実際のキーボードを購入する前にそのレイアウトを試してみたいと思います。

矢印キーをCapsLock + ijklにマップし、実際の矢印キーを無効にしようとしています。再マッピングの方法はわかりましたが、実際の矢印キーを無効にしようとすると、再マッピングされたキーが壊れます。作業マップは次のとおりです。

keycode 66 = Mode_switch
keycode 31 = i I Up
keycode 44 = j J Left
keycode 45 = k K Down
keycode 46 = l L Right

上向き矢印を無効にするには、

keycode 111 =

そして、それを行うとすぐに、ijklは文字として機能しなくなりますが、修飾キー(Caps Lock)を押さなくても矢印として機能します。以前のマッピングを壊さずに矢印キーを無効にするにはどうすればよいですか?

6
Tomas

読んで周りの情報を得た後。問題は、実際に再マッピングを行う前に修飾子を削除する必要があることのようです。

答えへ:

設定を変更すると、私のxmodmapは次のようになります。

xmodmap:修飾子ごとに最大4つのキー(括弧内のキーコード):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock      
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Alt_L (0xcc),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Mode_switch (0x42),  Mode_switch (0xcb)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce)
mod5      

Mode_switchを調査すると、Caps_Lockが正常にマッピングされたという結論に達します。

[Smalltalk@localhost ~]$ xmodmap -pke | egrep -e '(Mode_switch)'
keycode  66 = Mode_switch NoSymbol Mode_switch
keycode 203 = Mode_switch NoSymbol Mode_switch

次に、manページからの抜粋をxmodmapします。

       keycode NUMBER = KEYSYMNAME ...
               The list of keysyms is assigned to the indicated keycode (which
               may be specified in decimal, hex or octal and can be determined
               by running the xev  program).   Up  to  eight  keysyms  may  be
               attached  to  a  key, however the last four are not used in any
               major X server implementation.  The first keysym is  used  when
               no  modifier  key  is pressed in conjunction with this key, the
               second with Shift, the third when the Mode_switch key  is  used
               with  this  key  and  the  fourth when both the Mode_switch and
               Shift keys are used.

次の構成は機能しますが、i、j、k、lを使用している間はCaps_Lockを保持する必要があります(manページに記載されているとおり)。

vim ~/.Xmodmapを編集:

! make Capslock the "Mode_switch" key
clear Lock

! All Mod must be cleared
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5

! clearning current Caps_Lock assigment and assigning it new one
keycode 66 =
keycode 66 = Mode_switch

! setting all the modification keys
add Mod1 = Alt_L Alt_R Meta_L
add Mod2 = Num_Lock
add Mod3 = Mode_switch
add Mod4 = Super_L Super_R Hyper_R

! Clear must be done before configuring it
keycode 31 =
keycode 44 =
keycode 45 =
keycode 46 =

! Configuration (first column normal type, second with shift and second with Mod_switch)
keycode 31 = i I Up
keycode 44 = j J Left
keycode 45 = k K Down
keycode 46 = l L Right

! Clearing the arrow keys and some functional keys like home
keycode 111 =
keycode 113 =
keycode 114 =
keycode 116 =
keycode 112 =
keycode 117 =

さて、大きな問題になります。

Caps_Lockがオンのときにi、j、k、lキーを機能させる方法は?おそらくxkbに変更を加える必要があります。

編集

はい、できます。私はそれを理解しました。

注:これはすべてのキーボード、すべてのレイアウトに適用されるため、テストに適しています。 xkbを介して適切に実行する場合は、独自のレイアウトを作成し、group1とgroup2 +にマッピングを実行させる必要があります。

以下は、キーボードのテストに最適なハックです(../basicファイルのバックアップを忘れずに!):

警告これはすべてのキーボード、すべてのバリアントに適用されます。

ファイルの編集:Sudo vim/usr/share/X11/xkb/compat/basic

# Add  Caps_Lock to virtual modifiers
    virtual_modifiers  NumLock,AltGr,Caps_Lock;

# change FROM:
    interpret Mode_switch {
        useModMapMods= level1;
        virtualModifier= AltGr;
        action= SetGroup(group=+1);
    };

# TO:
    interpret Mode_switch {
        useModMapMods= level1;
        virtualModifier= Caps_Lock;
        action= LockGroup(group=+1);
    };

# change from
    group 2 = AltGr;
TO:
    group 2 = Caps_Lock;

注:複数のレイアウトがある場合、それらに干渉する可能性があります。

3
tukan

コメントする代わりに答えを書いて申し訳ありませんが、それでも十分な評判がありません。これはあなたの質問に答えないことを私は知っていますが、それはあなたの問題を解決することができます。

OSでキーを再マッピングする代わりに、キー自体の再マッピングをサポートするキーボードを購入することができます。特に QMKファームウェア でサポートされているキーボード。互換性のあるすべてのキーボードのリストを見つけることができます ここ

このファームウェアを使用すると、すべてのキーが異なることを実行できる多くのレイヤーを追加するなど、任意のキーを任意のアクションにマップできます。完全にカスタマイズ可能であることを除いて、ラップトップでfnキーを押すのと同じだと想像してください。どのキーがどのレイヤーをどのようにアクティブにするかを選択できます。たとえば、レイヤーのオン/オフを切り替えたり、キーを押しながらアクティブのままにしたりすることができます。このようにすると、Caps Lock be Caps Lockをタップすると、別のレイヤー(ijklキーは矢印キー)に切り替えます。

唯一の欠点は、再マッピングではCコードで配列を編集する必要があることですが、実際には非常に簡単で、事前のプログラミング知識は必要ありません。 documentation は非常に広範で、始めるために必要なすべてを説明しています。

60%のキーボードオプションはたくさんありますが、ほとんどは自分で組み立てる必要のあるキットです。問題がない場合は、GH60、Satan、またはXD60ボードを確認してください。それらすべてを自分で組み立てたくない場合は、 Whitefox キーボードをチェックするか、 KBDFansストア で何かを見つけることができるかどうかを確認できます。ほとんどのキットの組み立てサービスを提供しているためです。

0