web-dev-qa-db-ja.com

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

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

12
Amanda Jones

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

ステップ0-アプローチ

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

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

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

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

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

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

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

    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_switchmod5行から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を押しながら押すかどうかにかかわらず、キーを再マッピングして異なるコードを生成する必要があります。ファイルのkeycodeで始まる各行は、Mod1(シフトキー)とモード切り替えキーが押されているかどうかに基づいて生成される各キーに4つのキーシムを指定します。( link

    !...........................................................................
    !        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の詳細なヘルプが利用可能です here

15
koushik