xmodmap
xmodmap は Xorg におけるキーマップやマウスボタンのマッピングを変更するためのユーティリティです。
xmodmap は直接 X KeyBoard extension (XKB) と関連するわけではありません。X の中でキーコードが処理される方法については別の (XKB より前の) 概念を使っています。基本的に、xmodmap はシンプルな作業にのみ使用することを推奨されます。レイアウトの高度な設定については X KeyBoard extension を見て下さい。
目次
イントロダクション
Xorg におけるキーボードの値には2種類あります: キーコードとキーシムです。
- キーコード (keycode)
- キーコードはキーやマウスボタンが押された時にカーネルによって生成される番号のことです。
- キーシム (keysym)
- キーシムはキーコードに割り当てられている値です。例えば、
A
を押すとkeycode 73
が生成されますが、このキーコードはkeysym 0×61
にマッピングされており、このキーシムは ASCII 表のA
に対応しています。 - キーシムはキーコード-キーシムの対応関係を示すキーコードの表で Xorg によって管理されており、この表はキーマップテーブルと呼ばれます。キーマップテーブルは
xmodmap
を実行することで確認できます。
インストール
xmodmap は xorg-xmodmap パッケージでインストールすることができます。
任意で、xmodmap のグラフィカルフロントエンドである xkeycaps をインストールしてください。
キーマップテーブル
現在のキーマップテーブルを整形して表示:
$ xmodmap -pke
[...] keycode 57 = n N [...]
各行のキーコードの後に付いているのはマッピングされているキーシムです。上記の例では keycode 57
が小文字の n
にマッピングされていることを示しており、大文字の N
はキーコード 57
+ Shift
にマッピングされています。
テーブルの中のキーシムのカラムは特定の修飾キーの組み合わせに対応しています:
Key
Shift+Key
mode_switch+Key
mode_switch+Shift+Key
AltGr+Key
AltGr+Shift+Key
全てのキーシムを設定する必要は必ずしもありませんが、後ろの方のキーシムだけを設定するときは、NoSymbol
を使います。
どのキーコードがキーに対応しているのか確認するには、特別なキーボードキー#Xorg の xev ユーティリティの使い方を見て下さい。
カスタムテーブル
キーマップを作成するには (~/.Xmodmap
):
$ xmodmap -pke > ~/.Xmodmap
変更をテストするには:
$ xmodmap ~/.Xmodmap
カスタムテーブルを有効化
GDM, XDM, LightDM では ~/.Xmodmap
を読み込む必要はありません。startx を使用する場合、以下を使用して下さい:
~/.xinitrc
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
もしくは、グローバルなスタートアップスクリプト /etc/X11/xinit/xinitrc
を編集してください。
変更のテスト
一時的に変更を行うには:
$ xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" $ xmodmap -e "keysym a = e E"
修飾キー
xmodmap を使って修飾キー を上書きすることもできます。例: Control
と Super
(Windows キー) の置き換え。
現在の修飾子テーブルを詳細に出力します (完全なサンプル):
$ xmodmap -pm
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), Meta_L (0xcd) mod2 Num_Lock (0x94) mod3 mod4 Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c), Mode_switch (0x85), Mode_switch (0xcb)
keysym 列修飾キーの検索
- ISO_Level3_Shift
- US 以外のキーボードの AltGr キーは、修飾子 ISO_Level3_Shift を呼び出します。(US キーボードでは、右 Alt Alt_R は左 Alt Alt_L と同じ機能を持っているため、レイアウトを US インターナショナルに設定することが推奨されます。キーマップテーブル を参照してください。)
- Mode_switch
- Mode_switch 修飾子は、デフォルトでキーボードにないキーにマップされている場合があります。
修飾子をキーボードのキーに再割り当てする
割り当てる前に、修飾キーをクリアする必要があります。これは、割り当てる予定のモディファイアと、使用する予定のキーのモディファイアの両方に当てはまります。たとえば、Caps_Lock
を A キーに割り当て、B
を NumLock キーに割り当てる場合は、まず Caps_Lock
との両方の修飾子をクリアする必要があります。Num_Lock
、次に keysym を割り当て、最後に修飾子を再度追加します。
~/.Xmodmap
[...] clear lock clear mod2 keycode 38 = Caps_Lock keycode 77 = Num_Lock add lock = Caps_Lock add mod2 = Num_Lock
!
はコメントであるため、次の例では修飾子 Control
と Mod4
のみがクリアされます。次に、keysyms Control_L
、Control_R
、Super_L
、および Super_R
が反対側の修飾子に割り当てられます。左と右の両方を同じ修飾子に割り当てることは、両方のキーが同じように扱われることを意味します。
~/.Xmodmap
[...] !clear Shift !clear Lock clear Control !clear Mod1 !clear Mod2 !clear Mod3 clear Mod4 !clear Mod5 !add Shift = Shift_L Shift_R !add Lock = Caps_Lock add Control = Super_L Super_R !add Mod1 = Alt_L Alt_R !add Mod2 = Mode_switch !add Mod3 = add Mod4 = Control_L Control_R !add Mod5 =
次の例では、CapsLock
を Control
に、Shift+CapsLock
を CapsLock
に変更します:
~/.Xmodmap
clear lock clear control add control = Caps_Lock Control_L Control_R keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol
Compose key
compose key は、キーボードから直接アクセスできない特殊な文字や記号を作成するのに役立ちます。これは、英語以外の言語のアクセント付き文字を入力する場合に特に便利です。たとえば、Compose
e
'
を続けて押すと、é が生成されます。一部の文字では、Compose
の後に 2 つ以上のキーを押す必要があります。
通常、選択した修飾キーは Compose
にマッピングされます。設定キーは、ほとんどのデスクトップ環境の GUI 設定で設定できますが、この記事で説明されているようにカスタムキーマップテーブルが使用されている場合、これらのオプションは機能しません。
Xmodmap
を使用して作成キーを設定するには、Multi_key
識別子を使用します。たとえば、右 alt キー (AltGr
) を設定キーにマッピングするには、次のようにします:
~/.Xmodmap
[...] keycode 108 = Multi_key Alt_R Meta_R Alt_R Meta_R
キーコード番号はキーボードのモデルによって異なる場合があります。
スクロールを逆向きにする
xmodmap を使って (スマートフォンやタブレットのようなスクロールを行う) OS X Lion の ナチュラルスクロール 機能を 再現 することが可能です。synaptics ドライバーは上下左右のスクロールにボタン4/5/6/7を使うので、~/.Xmodmap
でボタンの定義の順番を変えるだけです:
~/.Xmodmap
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
それから xmodmap を更新してください:
$ xmodmap ~/.Xmodmap
マウスボタンの入れ替え
マウスの左、中、および右ボタンは、それぞれ Synaptics ドライバーのボタン 1、2、および 3 に対応します。マウスの左ボタンと右ボタンを入れ替えるには、~/.Xmodmap
にリストされている順序を逆にします:
~/.Xmodmap
pointer = 3 2 1
単純なマウスのセットアップにはこれで十分です。もう一度、xmodmap を更新します:
$ xmodmap ~/.Xmodmap
テンプレート
スペイン語
~/.Xmodmap
keycode 24 = a A aacute Aacute ae AE ae keycode 26 = e E eacute Eacute EuroSign cent EuroSign keycode 30 = u U uacute Uacute downarrow uparrow downarrow keycode 31 = i I iacute Iacute rightarrow idotless rightarrow keycode 32 = o O oacute Oacute oslash Oslash oslash keycode 57 = n N ntilde Ntilde n N n keycode 58 = comma question comma questiondown dead_acute dead_doubleacute dead_acute keycode 61 = exclam section exclamdown section dead_belowdot dead_abovedot dead_belowdot !Maps the Mode key to the Alt key keycode 64 = Mode_switch
エスペラント語
~/.Xmodmap
keycode 54 = c C c C ccircumflex Ccircumflex keycode 42 = g G g G gcircumflex Gcircumflex keycode 43 = h H h H hcircumflex Hcircumflex keycode 44 = j J j J jcircumflex Jcircumflex keycode 39 = s S s S scircumflex Scircumflex keycode 30 = u U u U ubreve Ubreve
CapsLock を Control にする
CapsLock
を Control
に変えるシンプルな例:
~/.Xmodmap
clear lock clear control keycode 66 = Control_L add control = Control_L Control_R
CapsLock を Control に、LeftControl を Hyper にする
ノートパソコンを使っている場合 CapsLock
を Control
として使えると便利です。さらに Left Control
キーを Hyper
として使えます (emacs, openbox, i3 などで使われる修飾キー):
~/.Xmodmap
clear lock clear control clear mod1 clear mod2 clear mod3 clear mod4 clear mod5 keycode 37 = Hyper_L keycode 66 = Control_L add control = Control_L Control_R add mod1 = Alt_L Alt_R Meta_L add mod2 = Num_Lock add mod3 = Hyper_L add mod4 = Super_L Super_R add mod5 = Mode_switch ISO_Level3_Shift
Super_R を Hyper_R に変える
フルキーボードレイアウトで Hyper
キーを使用したいユーザーは、右の Super
キーを Hyper
として使用できます。
~/.Xmodmap
remove mod4 = Super_R keycode 134 = Hyper_R add mod3 = Hyper_R
クロアチア語レイアウトで数字キー N を Shift-N あるいはその逆に変える
クロアチア語レイアウトと似たような別のレイアウトでも使えるはずです。
~/.Xmodmap
keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve keycode 14 = percent 5 5 percent degree dead_abovering degree keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek keycode 16 = slash 7 7 slash grave dead_grave grave keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute
参照
- xmodmap(1)
- Multimediakeys with .Xmodmap HOWTO by Christian Weiske
- Mapping unsupported keys with xmodmap by Pascal Bleser
- List of Keysyms Recognised by Xmodmap on LinuxQuestions