xmodmap(1) X上でキーマップや、ポインタボタンの割り当てを変更するユーティリティ

書式

xmodmap [-options ...] [filename]

説明

xmodmap はクライアントのアプリケーション上で、イベントのキーコードをキー シムへ変換する時に使われるキーボード modifier マップと keymap テーブルを、表示したり編集する時に使われる。通常これはユーザセッション の起動スクリプトから、キーボードをユーザが自分の好みのキー配列にする時 に実行される。

オプション

以下のオプションが xmodmap では使われる。

-display display 使用するホスト名とディスプレイを指定する。
-help 標準エラー出力にコマンド行の簡潔な説明を表示する。 xmodmap が処理できない文字列が渡された場合には常時実行される。
-grammar このオプションはファイルの中、および -e expressions で用いられる表現 の文法のヘルプメッセージを標準エラー出力に表示する.
-verbose このオプションは xmodmap が入力を解析する際のログ情報を出力する。
-quiet 冗長なログの出力をしない(デフォルト)
-n このオプションを指定すると xmodmap は実際にはキーのマッピングを変更しないが、 make(1) の -n オプションのようにどのように変更されるのかを表示する。
-e expression このオプションは実行される表現を指定する。コマンド行から任意の数の 表現を指定する事が出来る。
-pm このオプションは現在の modifier マップの状態を標準出力に表示する。
-pk このオプションは現在のキーマップテーブルを標準出力に表示する。
-pke このオプションは現在のキーマップテーブルを xmodmap にフィードバック出来る形式で標準出力に表示する。
-pp このオプションは現在のポインタボタンのマップの割り当て状況を表示する。
- ダッシュ(-)だけを指定すると入力ファイルに標準入力が使用される。

filename は実行される xmodmap の表現が記述されたファイルを指定する。このファイルは通常はユーザのホー ムディレクトリに .xmodmaprc の名前で保存される。

表現文法

xmodmap プログラムは表現のリストを実行する前にそれらの表現を一旦全て読み込んで 解析を行う。このことにより普通の方法では再定義されてしまうキーシム名を、 名前の衝突についてはそれほど気にかけることなく参照することが可能である。

keycode NUMBER = KEYSYMNAME ... キーシムのリストを指示されたキーコードに割り当てる。(これは10,16,8進 数で指定することができ、 xev プログラムを起動して決める事が出来る。)
keycode any = KEYSYMNAME ... もし、キーがそれ自身を指定するキーシムについての特定のリストを持たない 場合、キーボード上で代わりのキーが選択されて、そのキーシムが指定される。 キーシムのリストは10か16、あるいは8進数で指定される。
keysym KEYSYMNAME = KEYSYMNAME ... 左辺の KEYSYMNAME は、該当する keycode 表現の組合せを実行する際に使われる、それに適合したキーコードへ変換され る。キーシム名のリストはヘッダーファイル <X11/keysymdef.h>(XK_ プレフィックスなし) 中かあるいはキーシムのデータベースファイル <XRoot>/lib/X11/XKeysymDB 、ここで <XRoot> は X11 のインストールツリーのルート、に見出されるであ ろう。複数のキーに同じキーシムが結びつけられている時は、表現はそれぞれ の適合するキーコードに対して実行されることに注意すること。
clear MODIFIERNAME これは modifier マップから与えられた modifier の全てのエント リを消去する。有効な modifier 名は: Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, そして Mod5 である。( 他の名前には大文字小文字の区別があるが、modifier 名にはない) 例えば、clear Lock は shift lock modifier に結合されているあらゆるキーエントリを無効にするであろう。
add MODIFIERNAME = KEYSYMNAME ... 与えられたキーシムを含む全てのキーを指定された modifier マップに加える。 キーの入れ換えの表現の記述を容易にするため、キーシム名は入力された表現 を全て読み込んだ後で評価される(EXAMPLEの節を参照)。
remove MODIFIERNAME = KEYSYMNAME ... 与えられたキーシムを含む全てのキーを指定された modifier マップから消去 する。 add とは異なり、キーシム名は行が読み込まれるたびに評価される。 このことにより、キーがダブって指定されはしないだろうかという不安を抱く ことなく modifier からキーを消去することができる。
pointer = default ポインタボタンのマップをデフォルト値に戻す。(ボタン 1 はコード 1 を生 成、ボタン 2 はコード 2 を生成…等々)
pointer = NUMBER ... 指定されたボタンコードをポインタマップに含ませる。リストは常に物理ボ タンの一番目から指定すること。

エクスクラメーションマーク(!)から始まる行はコメント行として扱われる。

もし、modifer キーのバインディングを変更したい時は、適当な modifer マッ プからその modifier キーの消去もしなければいけない。

多くのポインタは第1ボタンを右手の人差し指を使って押すように設計され ている。左利きの人は時に、良く使うボタンを左手の人差し指で押せるように、 ボタンに割り当てられているボタンコードの順序をひっくり返すとより使い心 地が良くなるということに気づく。このことは 3 ボタンポインタでは次のよ うにすればたぶん出来るだろう。

%  xmodmap -e "pointer = 3 2 1"

多くのアプリケーションはメタキー(コントロールの代わりにメタが押される 場合を除くと、コントロールキーと似ている)の概念をサポートしている。し かしながら幾つかのサーバはデフォルトのキーマップテーブルにメタキーのキー シムを持っていないので、手で追加する必要がある。 以下のコマンドはメタキーに多国語キー(時には組版文字が印字されている) の機能を付加する。メタキーを必要とするアプリケーションはキーコー ドのみを必要とし、キーマップテーブルの第 1 カラムに記述されているキーシ ムは必要としないという事実も利用する。これは Multi_key (デフォルトの modifier マップを含む)を探しているアプリケーションがキーシムのいかなる 置き換えに対しても気が付かないであろうということを意味する。

%  xmodmap -e "keysym Multi_key = Multi_key Meta_L"

同様に、あるキーボードはメタキーを持たないかわりに ALT キーを持っている。 この場合には以下のコマンドが便利である。

%  xmodmap -e "keysym Alt_L = Meta_L Alt_L"

最も単純で、それでいて便利な xmodmap の利用法の一つはキーボードの "抹消" キーをもう一つのキーシムで代替するこ とである。このことはユーザにとってより快適になる、BS キーを DELETE キー と入れ換えるということも含んでいる。さらに、もし xterm での ttyModes リソースが設定されている場合には、全てのターミナルエミュレータのウィン ドウは同じキーを使って文字を消去する。

%  xmodmap -e "keysym BackSpace = Delete"
%  echo "XTerm*ttyModes:  erase ^?" | xrdb -merge

幾つかのキーボードは「コンマ + shift」と「ピリオド + shift」に対して自動 的に「<」と「>」を与えない。これはコンマとピリオドのキーバインディン グを以下のスクリプトによってリセットすることにより xmodmap で矯正することができる。

!
! make shift-, be < and shift-. be >
!
keysym comma = comma less
keysym period = period greater

キーボードの違いで、より苛立たせられることの一つはコントロールキーとシ フトロックキーの位置である。 xmodmap のありふれた使い方はこれら 2 つのキーを以下のコマンドで入れ換えること である。

!
! Caps_Lock と Control_L の入れ換え
!
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L

keycode コマンドは複数のキーコードに同じキーシムを指定する際便利である。 移植性はよくないものの、キーボードを、ある知られた状態にリセットするス クリプトを書くことができる。以下のスクリプトは BS キーに Delete の機能を 持たせ(上記を参照)、今ある caps lock のバインディングを全て消去し、 Capslock キーを Control キーに換え、F5 キーに Escape の機能を持たせ、 Break/Reset を shift lock にする。

!
! HP では以下の keycode は下記に挙げる key cap を持つ:
!
!     101  Backspace
!      55  Caps
!      14  Ctrl
!      15  Break/Reset
!      86  Stop
!      89  F5
!
keycode 101 = Delete
keycode 55 = Control_R
clear Lock
add Control = Control_R
keycode 89 = Escape
keycode 15 = Caps_Lock
add Lock = Caps_Lock

環境変数

DISPLAY
はデフォルトのホスト名とディスプレイ番号を得る。

バグ

keycode 表現が評価されるたびにサーバは各々のクライアントに対して MappingNotify イベントを生成する。このことが幾らかの問題を起こす。全ての変換はまとめ てバッチ処理され、同時に実行されてしまう。キーボード入力を受取り、 MappingNotify イベントを無視するクライアントはキーボードマッピングに対してなされた如 何なる変化にも気が付かない。

ある modifier に規定されているキーコードが変更された場合は何時でも Xmodmap は "add" と "remove" 表現を自動的に生成してしまう。

表現はマッピングを台無しにしてしまった時のために キーシムと同様にキーコードも remove 表現が受け付けられるような方法を用意すべきである。

著者

Jim Fulton, MIT X コンソーシアム。初期のバージョンはサンマイクロシステ ムズ社の David Rosenthal によって書かれた。