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 キー) の置き換え。
割り当てる前に修飾キーを空にする必要があります。!
がコメントです。以下の例では Control
と Mod4
だけ消去しています。それから 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
スクロールを逆向きにする
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