キーの組み合わせを使用して入力しますか?


12

私は、Ubuntu 10.04ユーザーで、たとえば、Windowsキー(SuperLinuxの世界ではそう呼ばれていると思います)を押しながらKキーを押すと、コンピューターに「+」文字を入力する方法を探しています。これはすべてのアプリケーションで機能するために必要です。(私はタイピング障害のある人で、Ubuntuを自分のニーズに合わせる必要があります。)ありがとう!

回答:


15

すべてのアプリケーションのキーを再マップするため、最良のオプションはxmodmapを使用することです。柔軟で非常に強力ですが、いくつかのコマンドを端末に入力する必要があります。

ステップ0-アプローチ

Xサーバーは、キーボードとすべてのキーイベントを管理し、それをすべてのアプリケーションのキーコードに変換します。

アプローチは、修飾キー(スーパーまたは右Altキーなど)を「モード切り替え」キーとしてマップし、モードキーが押されている状態でキーが押されたかどうかに応じて異なるコードを生成するようXサーバーに指示します。

デフォルトでは、モード切り替えキーは定義されておらず、すべてのキーは、モード切り替えの有無にかかわらず押されたときに同じコードを生成するように構成されています。これは、明示的にオーバーライドするキーを除いて、他のキーが異なる動作をしたり、追加の構成が必要になったりすることを意味するため、優れています。

ただし、Compizプラグインはスーパーキーショートカット(ウィンドウピッカー、シフトスイッチャーなど)をマップするため、Compizも使用している場合は特に、右Altキーをモードスイッチとして使用することを検討してください。キーボードを介してcompizを制御することに熱心でない場合は、Superで十分です。

xmodmapでは、スーパーキーはSuper_LまたはSuper_Rとして識別されます。モード切り替えキーとして使用するものを選択する必要があります。または、右側のAltキーはAlt_Rです。これらを確認するには、xevを実行し、キーボードの必要なキーを押します。手順については、この投稿を参照してください。

ステップ1-修飾子マップのセットアップ

  1. ターミナル(Applications -> Accesories -> Terminal)を開き、次のコマンドを実行して、現在のキーバインドでファイルを作成します。これを出発点として使用します。

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. これをお気に入りのテキストエディターで開きます。gedit curkeys.map &geditで開きます。ファイルの終わりに向かって、次のような行が表示されます。

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. 「xmodmap:up to 4 ...」で始まる行を削除します

  4. 修飾子マップを編集して、次のようにします。各行の先頭に「add」という単語を入力し、修飾子名の後に「=」を挿入します。次に、括弧とコンマでコードを削除します。またMode_switch、空だったのでmod5行からmod3行に移動したことに注意してください。変更されたテーブルは次のようになります-実際の内容は、あなたのケースでは以下のものとわずかに異なります(キーボードのレイアウトによって異なります)。

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. 物理モード切り替えキーを再マップします。最後にこのような行を追加します(必要に応じて、Super_LをSuper_RまたはAlt_Rに置き換えます)。

    keysym Super_L = Mode_switch
    
  6. 修飾子の定義からキー名(Super_L)を削除します。Super_Lの場合、これはmod4行から削除することを意味します。

    add mod4    =    Super_R Hyper_L 
    

    現在、右の「スーパー」キーは通常のスーパーキーとして機能しますが、左のキーには特別なプロパティがあります。

  7. ここで、Super_Lを押しながら押すかどうかに関係なく、キーを再マッピングして異なるコードを生成する必要があります。ファイルの各行は、keycodeMod1(シフトキー)とモード切り替えキーが押されたかどうかに基づいて生成される各キーに4つのキーシムを指定します。(リンク

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Super_L + kキーを押して「+」キーを生成する場合は、それを読み取るように変更する必要があります

    keycode  45 = k K plus plus
    

    最後のプラスもShift + Super_L + kをプラスにマッピングしますが、これは他の何かにマッピングできます。キーごとに、変更する行が1行だけあります。行を編集してより多くのキーを再マッピングします。最初の2つのエントリはそのままにして、通常のキー入力動作を維持します。

  8. ファイルを保存し、エディターを終了します。

  9. ターミナルで次のコマンドを実行して、キーマップをインストールします。1つ目はこのセッション用に設定し、2つ目は将来のセッション用に永続化します。

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. 変更したキー(たとえば、Super_L + k)を押すと、これをすぐにテストできます。

ステップ3-マップの追加/修正

変更したマップをインストールすると、新しいキーを簡単に追加できます。

  1. xevを使用してキーコードとキーシムを見つけます

  2. このコマンドを実行してキーをマッピングすることでテストします:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    山かっこ(<code> <base>など)内の項目を適切な値に置き換えます。

  3. curkeys.mapファイルをバックアップします。

  4. を開き、curkeys.map対応するキーコードの行を編集します。
  5. 以下のコマンドで再適用します(手順2を実行した場合、最初のコマンドは必要ありません)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

注1:キーボードショートカットで(たとえば、System -> Preferences -> Keyboard Shortcuts)行われた変更は、修飾子マップに影響し、通常は次回のログイン時に失われます。それを避けてください。

注:2:この方法を使用しているときに、このようなエラーメッセージが表示されることがあります。これが何を意味するのかわかりませんが、これらは一般に無害です。

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

xmodmapの詳細なヘルプはこちらから入手できます


これで運がいい?これが役に立たない場合、または何らかの方法でplsのコメントが不明確な場合は、修正してより有用なものにします。
コウシク

1
Linuxのミント17 Xfceの(またはそこに少なくとも)で、それがなければならないことに注意しては、してください~/.Xmodmap~/.xmodmap無視されます。
zbr 14

2
することを忘れないでくださいclearごとにリセットされているキーunix.stackexchange.com/a/4526/2512
アンディ・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.