xmodmap

提供: ArchWiki
2015年3月17日 (火) 20:26時点におけるKusakata (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

関連記事

xmodmapXorg におけるキーマップやマウスボタンのマッピングを変更するためのユーティリティです。

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 にマッピングされています。

テーブルの中のキーシムのカラムは特定の修飾キーの組み合わせに対応しています:

  1. Key
  2. Shift+Key
  3. mode_switch+Key
  4. mode_switch+Shift+Key
  5. AltGr+Key
  6. AltGr+Shift+Key

全てのキーシムを設定する必要は必ずしもありませんが、後ろの方のキーシムだけを設定するときは、NoSymbol を使います。

どのキーコードがキーに対応しているのか確認するには、特別なキーボードキー#Xorgxev ユーティリティの使い方を見て下さい。

ヒント: There are predefined descriptive keysyms for multimedia keys, e.g. XF86AudioMute or XF86Mail. These keysyms can be found in /usr/include/X11/XF86keysym.h. Many multimedia programs are designed to work with these keysyms out-of-the-box, without the need to configure any third-party application.

カスタムテーブル

キーマップを作成するには (~/.Xmodmap):

$ xmodmap -pke > ~/.Xmodmap

変更をテストするには:

$ xmodmap ~/.Xmodmap

カスタムテーブルを有効化

GDM, XDM, KDM, LightDM では ~/.Xmodmap を読み込む必要はありません。startx を使用する場合、以下を使用して下さい:

~/.xinitrc
if [ -s ~/.Xmodmap ]; then
    xmodmap ~/.Xmodmap
fi

もしくは、グローバルなスタートアップスクリプト /etc/X11/xinit/xinitrc を編集してください。

変更のテスト

一時的に変更を行うには:

$ xmodmap -e "keycode  46 = l L l L lstroke Lstroke lstroke"
$ xmodmap -e "keysym a = e E"

修飾キー

xmodmap を使って修飾キーを上書きすることもできます。例: ControlSuper (Windows キー) の置き換え。

Before assignment the modifier keys need to be empty. ! is a comment, so only the modifiers Control and Mod4 get cleared in the following example. Then the keysyms Control_L, Control_R, Super_L and Super_R are assigned to the opposite modifier. Assigning both left and right to the same modifier means that both keys are treated the same way.

~/.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    =
ノート: The example assumes that the Control_L and Control_R keysyms were assigned to the Control modifier, and Super_L and Super_R keysyms to the Mod4 modifier. If you get the following error message X Error of failed request: BadValue (integer parameter out of range for operation), you will need to adapt accordingly. Running xmodmap produces a list of modifiers and keys that are assigned to them.

以下の例では CapsLockControl に、Shift+CapsLockCapsLock に変更しています:

~/.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

テンプレート

スペイン語

~/.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

Turn CapsLock into Control, and LeftControl into Hyper

Laptop users may prefer having CapsLock as Control. The Left Hyper key can be used as a modifier.

~/.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

Switch every number key N with Shift-N and vice-versa, for Croatian layout

Should work fine for layouts similar to Croatian as well.

~/.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

参照