xmodmapで初期設定を調べる
xmodmap はUnixでX上でのキーボード配列を設定するコマンドです。
Lubuntuなんかでデスクトップを立ち上げれば全体がX環境なので 殆ど常に有効になる感じです 1。
設定を行う前に、現在の設定を調べるために
$ xmodmap -pke > ~/.xmodmap.orig
として設定を書き出しておきます。
1 2 3 4 5 6 7 |
|
こんな感じの内容になっているかと思います。
この設定を書き換えて(もしくは必要な部分だけ書き出して)
xmodmap
で読み込んであげればそれが反映されます。
キー設定の意味
左辺にkeycode "keycode"
でキーを指定して右辺に出力を書く感じです。
keycodeはpke
オプションだと10進法のものが表示されてますが、
16進法を使ってもOK。
keycode 38 = a A
keycode 0x26 = a A
の2つは同じもの。
また、キーのシンボルを使って
keycode a = b B
みたいな設定も出来ます。
右辺にはいくつか項目がありますが、
- 第一項: そのキーだけを押した時の出力
- 第二項: shiftと同時におした時の出力
- 第三項: mod1と同時におした時の出力
- 第四項: shiftとmod1両方と同時におした時の出力
- 第五項: mod2と同時におした時の出力
- 第六項: shiftとmod2両方と同時におした時の出力
- …
となっています。
mod1やmod2は下に書くモディファイヤーキーで、 mod1は通常のPCだとAlt、MacだとOption (Mode_switchと表示される)キーです。
modXキーはmod1からmod5までありますが、 通常使わないので気にしなくて良くて、 最初の2項だけ書いておけば良いことが多いです。
モディファイヤー
Ctrl等のモディファイア−の設定は
$ xmodmap -pm
の様にして-pm
オプションを使うと見れます。
$ xmodmap -pm > ~/.xmodmap.orig
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Eisu_toggle (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod3
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
先ほどのxmodmap -pke
ではキーコードが10進法で書かれてましたが、
ここではキーコードが16進法で表示されてるので
注意してください。
lock
はCapsLockです。
モディファイヤーを一度全部クリアするには
clear lock
の様にclear
を使います。
特定のキーだけ除く場合には
remove lock = Eisu_toggle
の様にremove
を使ってモディファイヤーを指定し、=
の右辺に
除きたいキーを書きます。
新たにキーをモディファイヤーに加えるには
add Control = Control_L
の様にadd
を使います(この左に書くモディファイヤーは大文字小文字区別されない?)。
上のkeycode
でモディファイヤーに当たるキーを割り当てた時には
このadd
を使ってモディファイヤーに加える事になりますが、
もともとControl_L
などが設定されてる場合でも、
新たに他のキーにもControl_L
を割り当てたら
add
をする必要があります。
コメント
設定は行単位で書いていきますが、
!
で始まる行はコメント行になります。
xevでキーコードを調べる
上の一覧で右側の文字を見ればだいたいどのキーに対応してるかわかると思いますが、
わからない時はxev
コマンド等を使って調べます。
$ xev
とコマンドを打つと小さなXの窓が出てきて、それにフォーカスが当たってる状態で キーを打つとこんな感じでキー情報がどんどん出てきます。
上の絵で
state 0x0, keycode 8 (keysym 0x61, a), same_screen YES,
と言う部分を見ると、a
のキーでkeycode
が8(10進法表記)であることが分かります。
xmodmapですでに変更してあるとこのa
の部分も変更されますので
変更後の確認にも使えます。
設定ファイルを作って変更する
先ほど作っった.xmodmap.origを変更して設定ファイルを作ります。
設定ファイルはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
keycode
についてはそれぞれのデフォルトの値を前の行にコメントして書いてあります。
(通常のキーに関してはキーは分かりやすいようにそれぞれ2つだけにしてます。)
やってることは、
- 数字の所にある記号をUSと同じくするShift-2を
"
から@
にしたり)。 - その他右の方の記号部分もUSと同じく。(pの右を[]としたり。)
- 半角/全角を
`
(grave)に。- Shift付きの時に
~
(asciitilde)に設定してますが、 半角/全角にはShiftが普通には効かないらしく Shiftを押しても`
が出てしまいます。 - 仕方が無いのでShift-F1で
~
が出る様にしてあります。
- Shift付きの時に
- ]のところはUSには無い、というかEnterが大きく出てくるのでEnterに。
- 右下にある\もUSだとEnterが横に長くなって縦を短くする分、 Enterの上の一番右に置かれます。 Thinkpad X41の場合、\のキーは別に右上のBackSpaceの左側にもあるので、 右下のキーは潰してUSのShiftが長いのを再現するためにShiftへ。
- CapsLockは潰してAltに。
- スペースキーの左の無変換キーをCtrlに。
- スペースキーの右の変換、ひらがな/かたかなキーもCtrlに。
な感じ。
CapsLockのところをCtrlにして 無変換その隣のキーと一緒にAltにしておくのが一般的かもしれませんが、 今、USキーボードでもAlt(Cmd)のところをCtrlにして、 CapsLockの位置にAltを置く様にSwapして使ってて、 それが良い感じなのでその設定にしています。
圧倒的に使う回数の多いCtrlを親指に持ってくることで 圧倒的に左小指が楽になります。 (デフォルトの左下のCtrlなんてのは信じられませんが。。。。)
一番下の段位は、さらに外側に元々のCtrl、Altがありますが、 これらは使わないので取り敢えずそのままに。 (デフォルトの位置でこれらのキーを使ってる人はどんなに指が柔らかいのだろうか。。。)
キー設定ができたら、
$ xmodmap $HOME/.xmodmap
とすることで設定が有効になります。
次回以降ログイン時から有効にしたい場合は
1 2 3 |
|
の様に、.xinputrc
で.xmodmap
を読み込むように設定しておけばOK。
XKBによる変更
X上ではXKB (X KeyBoard extension を使ってキーボードの設定をしています。
より複雑な作業をするにはXKBを使って、というのが推奨されている模様。
また、Lubuntuで採用しているデスクトップ環境の
LXDEのものだと思いますが、
lxkeymap
というコマンドもあるようです。