私はUbuntu 10.04のユーザーで、たとえば、押しながらコンピューターに「+」文字を入力する方法を探しています。 Windows キー(私はそれが呼ばれると思う Super Linuxの世界で)を押します K キー。すべてのアプリケーションで動作するためにこれが必要です。 (私はタイピング障害のある人で、Ubuntuを自分のニーズに合わせる必要があります。)ありがとう!
すべてのアプリケーションのキーを再マップしたいので、最良のオプションはxmodmapを使用することです。柔軟で非常に強力ですが、いくつかのコマンドを端末に入力する必要があります。
Xサーバーはキーボードとすべてのキーイベントを管理し、それをすべてのアプリケーションのキーコードに変換します。
アプローチは、修飾キー(スーパーまたは右Altキーなど)を「モード切り替え」キーとしてマップし、モードキーを押しながらキーを押すかどうかに応じて異なるコードを生成するようにXサーバーに指示します。
デフォルトでは、モード切り替えキーは定義されておらず、すべてのキーは、モード切り替えの有無にかかわらず押されたときに同じコードを生成するように構成されています。これは、明示的にオーバーライドするキーを除いて、他のキーが異なる動作をしたり、追加の構成を必要としないことを意味するため、これは優れています。
ただし、Compizプラグインはスーパーキーショートカット(ウィンドウピッカー、シフトスイッチャーなど)をマップするため、Compizも使用している場合は特に、右Altキーをモードスイッチとして使用することを検討してください。あなたがキーボードを介してcompizを制御することに熱心ではない場合、スーパーは大丈夫です。
Xmodmapでは、スーパーキーはSuper_LまたはSuper_Rとして識別されます。モード切り替えキーとして使用するものを選択する必要があります。または、右側のAltキーはAlt_Rです。これらを確認するには、xevを実行し、キーボードの必要なキーを押します。手順については this post をご覧ください。
ターミナル(Applications -> Accesories -> Terminal
)を開き、次のコマンドを実行してcurrentキーバインドでファイルを作成します。これを出発点として使用します。
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つのキーシムを指定します。( 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つのエントリはそのままにして、通常のキー入力動作を維持します。
ファイルを保存し、エディターを終了します。
ターミナルで次のコマンドを実行して、キーマップをインストールします。 1つ目はこのセッション用に設定し、2つ目は将来のセッション用に永続化します。
xmodmap curkeys.map
cp curkeys.map ~/.Xmodmap
変更したキー(たとえば、Super_L + k)を押すことで、これをすぐにテストできます。
変更されたマップをインストールすると、新しいキーを簡単に追加できます。
xev を使用して、キーコードとキーシムを検索します
このコマンドを実行してキーをマッピングすることでテストします:
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の詳細なヘルプが利用可能です here 。