xmodmap

提供: ArchWiki
2023年12月30日 (土) 00:26時点におけるKgx (トーク | 投稿記録)による版 (Compose keyを作成するを翻訳して追加)
ナビゲーションに移動 検索に移動

関連記事

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

xmodmap は直接 X KeyBoard extension (XKB) と関連するわけではありません。X の中でキーコードが処理される方法については別の (XKB より前の) 概念を使っています。基本的に、xmodmap はシンプルな作業にのみ使用することを推奨されます。レイアウトの高度な設定については X KeyBoard extension を見て下さい。

ノート: xmodmap の設定は setxkbmap でリセットされます。英数キーをマップで指定した値に変えるだけでなく、他の全てのキーを起動時のデフォルトにリセットします [1]

イントロダクション

Xorg におけるキーボードの値には2種類あります: キーコードキーシムです。

キーコード (keycode)
キーコードはキーやマウスボタンが押された時にカーネルによって生成される番号のことです。
キーシム (keysym)
キーシムキーコードに割り当てられている値です。例えば、A を押すと keycode 73 が生成されますが、このキーコードは keysym 0×61 にマッピングされており、このキーシムは ASCII 表A に対応しています。
キーシムキーコード-キーシムの対応関係を示すキーコードの表で Xorg によって管理されており、この表はキーマップテーブルと呼ばれます。キーマップテーブルは xmodmap を実行することで確認できます。

インストール

xmodmapxorg-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 ユーティリティの使い方を見て下さい。

ヒント: マルチメディアキーにはわかりやすいキーシムが事前定義されています (例: XF86AudioMuteXF86Mail)。これらのキーシム/usr/include/X11/XF86keysym.h で確認できます。マルチメディアプログラムの多くは特に設定をしなくてもこれらのキーシムが使えるように作られています。

カスタムテーブル

キーマップを作成するには (~/.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 を使って修飾キー を上書きすることもできます。例: ControlSuper (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 修飾子は、デフォルトでキーボードにないキーにマップされている場合があります。
ノート: 修飾子名 ISO_Level3_ShiftMode_switch の使用法は、xmodmap と X キーボード拡張機能 では異なります。[2] も参照してください。

修飾子をキーボードのキーに再割り当てする

ノート: xmodmap は 大文字と小文字を区別 します。正しい 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

! はコメントであるため、次の例では修飾子 ControlMod4 のみがクリアされます。次に、keysyms Control_LControl_RSuper_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    =
ノート: この例では、Control_L および Control_R keysym が Control 修飾子、および Super_L および Super_R に割り当てられていることを前提としています。keysym を Mod4 修飾子に追加します。次のエラーメッセージ X Error of failed request: BadValue (integer parameter out of range for operation) が表示された場合は、それに応じて調整する必要があります。xmodmap を実行すると、修飾子とそれらに割り当てられたキーのリストが生成されます。

次の例では、CapsLockControl に、Shift+CapsLockCapsLock に変更します:

~/.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 にする

CapsLockControl に変えるシンプルな例:

~/.Xmodmap
clear lock
clear control
keycode 66 = Control_L
add control = Control_L Control_R

CapsLock を Control に、LeftControl を Hyper にする

ノートパソコンを使っている場合 CapsLockControl として使えると便利です。さらに 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

参照