xmodmap

提供: ArchWiki
2023年12月30日 (土) 00:07時点におけるKgx (トーク | 投稿記録)による版 (→‎テンプレート: Super_R を Hyper_R に変えるを翻訳して追加)
ナビゲーションに移動 検索に移動

関連記事

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 キー) の置き換え。

割り当てる前に修飾キーを空にする必要があります。! がコメントです。以下の例では ControlMod4 だけ消去しています。それから 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    =
ノート: 上記の例は Control_LControl_R キーシムを Control 修飾キーに、Super_LSuper_R キーシムを 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

スクロールを逆向きにする

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

参照