rcmdnk's blog

PFU Happy Hacking Keyboard Professional JP Type-S 白(日本語配列)

Xmodmapを使ったLubuntuのキーボード配列設定について。

先日インストールしたThinkPad X41 は日本語キーボードなので英語キーボード配列っぽく変更したりもしました。

Sponsored Links

xmodmapで初期設定を調べる

xmodmap はUnixでX上でのキーボード配列を設定するコマンドです。

Lubuntuなんかでデスクトップを立ち上げれば全体がX環境なので 殆ど常に有効になる感じです 1

設定を行う前に、現在の設定を調べるために

$ xmodmap -pke > ~/.xmodmap.orig

として設定を書き出しておきます。

.xmodmap.orig
1
2
3
4
5
6
7
keycode   8 =
keycode   9 = Escape NoSymbol Escape
keycode  10 = 1 exclam 1 exclam
keycode  11 = 2 quotedbl 2 quotedbl
keycode  12 = 3 numbersign 3 numbersign
keycode  13 = 4 dollar 4 dollar
...

こんな感じの内容になっているかと思います。 この設定を書き換えて(もしくは必要な部分だけ書き出して) 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の窓が出てきて、それにフォーカスが当たってる状態で キーを打つとこんな感じでキー情報がどんどん出てきます。

xev

上の絵で

state 0x0, keycode 8 (keysym 0x61, a), same_screen YES,

と言う部分を見ると、aのキーでkeycodeが8(10進法表記)であることが分かります。

xmodmapですでに変更してあるとこのaの部分も変更されますので 変更後の確認にも使えます。

設定ファイルを作って変更する

先ほど作っった.xmodmap.origを変更して設定ファイルを作ります。

設定ファイルはこんな感じ。

.xmodmap
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  11 = 2 quotedbl
keycode  11 = 2 at
!keycode  15 = 6 ampersand
keycode  15 = 6 asciicircum
!keycode  16 = 7 apostrophe
keycode  16 = 7 ampersand
!keycode  17 = 8 parenleft
keycode  17 = 8 asterisk
!keycode  18 = 9 parenright
keycode  18 = 9 parenleft
!keycode  19 = 0 asciitilde
keycode  19 = 0 parenright
!keycode  20 = minus equal
keycode  20 = minus underscore
!keycode  21 = asciicircum asciitilde
keycode  21 = equal plus
!keycode  34 = at grave
keycode  34 = bracketleft braceleft
!keycode  35 = bracketleft braceleft
keycode  35 = bracketright braceright
!keycode  47 = semicolon plus
keycode  47 = semicolon colon
!keycode  48 = colon asterisk
keycode  48 = apostrophe quotedbl
!keycode  49 = Zenkaku_Hankaku Kanji
keycode  49 = grave asciitilde
!keycode  51 = bracketright braceright
keycode  51 = Return NoSymbol
!keycode  66 = Eisu_toggle Caps_Lock
keycode  66 = Alt_L Meta_L
!keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  67 = F1 asciitilde F1 F1 F1 F1 XF86Switch_VT_1
!keycode  97 = backslash underscore
keycode  97 = Shift_R NoSymbol
!keycode 100 = Henkan_Mode NoSymbol
keycode 100 = Control_R NoSymbol
!keycode 101 = Hiragana_Katakana Romaji
keycode 101 = Control_R NoSymbol
!keycode 102 = Muhenkan NoSymbol
keycode 102 = Control_L NoSymbol

clear lock
add Control = Control_L Control_R
add Shift = Shift_L Shift_R
add Mod1 = Alt_L Meta_L Alt_R Meta_R

keycodeについてはそれぞれのデフォルトの値を前の行にコメントして書いてあります。 (通常のキーに関してはキーは分かりやすいようにそれぞれ2つだけにしてます。)

やってることは、

  • 数字の所にある記号をUSと同じくするShift-2"から@にしたり)。
  • その他右の方の記号部分もUSと同じく。(pの右を[]としたり。)
  • 半角/全角`(grave)に。
    • Shift付きの時に~(asciitilde)に設定してますが、 半角/全角にはShiftが普通には効かないらしく Shiftを押しても`が出てしまいます。
    • 仕方が無いのでShift-F1~が出る様にしてあります。
  • ]のところは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して使ってて、 それが良い感じなのでその設定にしています。

Alt(Cmd)とControlの交換

圧倒的に使う回数の多いCtrlを親指に持ってくることで 圧倒的に左小指が楽になります。 (デフォルトの左下のCtrlなんてのは信じられませんが。。。。)

一番下の段位は、さらに外側に元々のCtrlAltがありますが、 これらは使わないので取り敢えずそのままに。 (デフォルトの位置でこれらのキーを使ってる人はどんなに指が柔らかいのだろうか。。。)

キー設定ができたら、

$ xmodmap $HOME/.xmodmap

とすることで設定が有効になります。

次回以降ログイン時から有効にしたい場合は

.xinputrc
1
2
3
if [ -f $HOME/.xmodmap ];then
  xmodmap $HOME/.xmodmap
fi

の様に、.xinputrc.xmodmapを読み込むように設定しておけばOK。

XKBによる変更

X上ではXKB (X KeyBoard extension を使ってキーボードの設定をしています。

Keyboard Configuration in Xorg (日本語) - ArchWiki

より複雑な作業をするにはXKBを使って、というのが推奨されている模様。

また、Lubuntuで採用しているデスクトップ環境の LXDEのものだと思いますが、 lxkeymapというコマンドもあるようです。

Ubuntu日本語フォーラム / Lubuntuでのキーボード設定(Capslock→Ctrl)

[LXDE] Caps LockキーをCtrlキーにする(LXDE) - Life with IT

Sponsored Links
  1. Macにも調べたらxmodmapはインストールされてました。これを用いてX上でのキー設定を しようと思えば出来ます。

    ただ、Macだと通常のアプリ等はXではないですし、 Karabiner(旧KeyRemap4MacBook) のがどこでも使えて断然便利。

Sponsored Links

« Homebrew-fileにレポジトリを作る機能を追加した Lubuntuのキーボードショートカットの設定:openbox »