回答:
すべてのアプリケーションのキーを再マップするため、最良のオプションはxmodmapを使用することです。柔軟で非常に強力ですが、いくつかのコマンドを端末に入力する必要があります。
Xサーバーは、キーボードとすべてのキーイベントを管理し、それをすべてのアプリケーションのキーコードに変換します。
アプローチは、修飾キー(スーパーまたは右Altキーなど)を「モード切り替え」キーとしてマップし、モードキーが押されている状態でキーが押されたかどうかに応じて異なるコードを生成するようXサーバーに指示します。
デフォルトでは、モード切り替えキーは定義されておらず、すべてのキーは、モード切り替えの有無にかかわらず押されたときに同じコードを生成するように構成されています。これは、明示的にオーバーライドするキーを除いて、他のキーが異なる動作をしたり、追加の構成が必要になったりすることを意味するため、優れています。
ただし、Compizプラグインはスーパーキーショートカット(ウィンドウピッカー、シフトスイッチャーなど)をマップするため、Compizも使用している場合は特に、右Altキーをモードスイッチとして使用することを検討してください。キーボードを介してcompizを制御することに熱心でない場合は、Superで十分です。
xmodmapでは、スーパーキーはSuper_LまたはSuper_Rとして識別されます。モード切り替えキーとして使用するものを選択する必要があります。または、右側のAltキーはAlt_Rです。これらを確認するには、xevを実行し、キーボードの必要なキーを押します。手順については、この投稿を参照してください。
ターミナル(Applications -> Accesories -> Terminal
)を開き、次のコマンドを実行して、現在のキーバインドでファイルを作成します。これを出発点として使用します。
xmodmap -pke > curkeys.map
xmodmap -pm >> curkeys.map
これをお気に入りのテキストエディターで開きます。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)
「xmodmap:up to 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
物理モード切り替えキーを再マップします。最後にこのような行を追加します(必要に応じて、Super_LをSuper_RまたはAlt_Rに置き換えます)。
keysym Super_L = Mode_switch
修飾子の定義からキー名(Super_L)を削除します。Super_Lの場合、これはmod4行から削除することを意味します。
add mod4 = Super_R Hyper_L
現在、右の「スーパー」キーは通常のスーパーキーとして機能しますが、左のキーには特別なプロパティがあります。
ここで、Super_Lを押しながら押すかどうかに関係なく、キーを再マッピングして異なるコードを生成する必要があります。ファイルの各行は、keycode
Mod1(シフトキー)とモード切り替えキーが押されたかどうかに基づいて生成される各キーに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つのエントリはそのままにして、通常のキー入力動作を維持します。
ファイルを保存し、エディターを終了します。
ターミナルで次のコマンドを実行して、キーマップをインストールします。1つ目はこのセッション用に設定し、2つ目は将来のセッション用に永続化します。
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
変更したキー(たとえば、Super_L + k)を押すと、これをすぐにテストできます。
変更したマップをインストールすると、新しいキーを簡単に追加できます。
このコマンドを実行してキーをマッピングすることでテストします:
xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
山かっこ(<code>
<base>
など)内の項目を適切な値に置き換えます。
curkeys.map
ファイルをバックアップします。
curkeys.map
対応するキーコードの行を編集します。以下のコマンドで再適用します(手順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
、~/.xmodmap
無視されます。
clear
ごとにリセットされているキーunix.stackexchange.com/a/4526/2512