2013-12-28

ネットブックの特殊キー配列に苦戦

さっそくLinux mint 13 Xfceをネットブックにインストールしました。
日本語化を整えようとコマンドラインでパッケージを追加しようとしたら、コマンドで使うパイプ(|)記号が入力できません。

ネットブックの特殊なキー配列
キーボードをジーッと眺めていても何処にもパイプ記号がありません・・・
コンソールでコマンド入力出来ないじゃん。
しかたがないので、スクリーンキーボードを使って入力するかと思ったら、スクリーンキーボードが無い。
という事で、onboardというスクリーンキーボードのアプリをインストール。
ウェブサイトhttps://launchpad.net/onboard

まあ、これで入力は出来るようになったのですが、コンソールでコマンド入力時にわざわざスクリーンキーボードからマウスでクリックしたのでは効率が悪く使いづらいので、なにか良い方法は無いかとネットで調べると、現在のキーボードに設定されているキーのキーコードを見ることが出来るコマンドがあることがわかりました。
xevコマンドです。
Xウインドウシステム上でのイベントを調べるコマンドみたいです。
マウスのポインタ位置やキーを押したときに発生するイベントを監視し、コンソール上にイベントのデータを出力してくれます。
xevを起動したところ
コンソールでコマンドを入力すると、小さなウインドウが開きます。
この小さなウインドウにフォーカスを合わせてマウスやキーボードのキーを押すといろいろなイベントが発生したことをコンソール上で教えてくれます。

次にネットブックでパイプ記号が入力出来ない原因となっている怪しげなキーを探します。
怪しげなキーを発見
まあ、怪しげというかキーがダブっている部分を探すだけなんですが。
ネットブックのキーボードでは¥記号がダブっていました。写真の赤丸の部分です。
右上の「ほ」のキーは青い¥記号、右下の「ろ」のキーは白い¥記号です。
「ほ」のキーはノートPCでは大抵ついているFnキーを押しながらこのキーを押すと¥記号が入力できるようになっています。
右下の「ろ」のキーはLinuxでは¥記号はバックスラッシュ(\)になるので今回は無視します。

では「ほ」のキーをxevコマンドを使ってイベントの発生状況を調べてみます。
まずは普通に押してみる。
KeyRelease event, serial 32, synthetic NO, window 0x3e00001,
    root 0xaa, subw 0x3e00002, time 13371028, (24,52), root:(716,280),
    state 0x0, keycode 20 (keysym 0x2d, minus), same_screen YES,
    XLookupString gives 1 bytes: (2d) "-"
    XFilterEvent returns: False
こんな感じでコンソールに出力されました。各項目はカンマ出区切られています。
この中からkeycodeとXLookupStringという項目を探します。
keycodeというのがそのキーに割り当てられたコードナンバーで今回は20ということがわかりました。
今回は直接入力で押したので、「ほ」のキーに割り当てられた「-」を押したことになったため、XLookupStringには「-」が記録されています。

同じようにFnキーを押しながら「ほ」のキーを押してみます。
KeyRelease event, serial 32, synthetic NO, window 0x3e00001,
    root 0xaa, subw 0x3e00002, time 13483297, (30,34), root:(453,243),
    state 0x0, keycode 132 (keysym 0x5c, backslash), same_screen YES,
    XKeysymToKeycode returns keycode: 97
    XLookupString gives 1 bytes: (5c) "¥"
    XFilterEvent returns: False
今度はkeycodeが132に変わりました。
XLookupStringは¥が表示されています。

ちなみに、キーコードはキーボードにや配列によって変わるので、この設定値はこのネットブックとLinuxで設定した限定のものです。

次にこのコードを参考にして、キーコードの一覧を出力させて見てみることにします。
キーコードの一覧を表示させるにはxmodmapというコマンドにオプションを付けてコンソールで実行します。
xmodmap -pke
これで一覧が出力されます。さっき調べたキーコードを探してみます。
まずはkeycodeの20を探します。
keycode  20 = minus equal minus equal
この行にはminusとequalが割り当てられているのがわかります。
一つのキーに4つ文字が割り当てられていますが、1つめはそのキーだけを押した時に出力される文字、2つめはシフトキーを押しながら押すと出力される文字になります。
3つめと4つめは多分ですが、全角入力用の割り当てだと思います。
先ほど調べたイベントデータのkeysymの項目を見ると、「-」を入力した祭にはminusになるので、シフトを押すとequal「=」イコール記号が出力されることになります。

同じようにkeycodeの132を調べます。
keycode 132 = backslash bar backslash bar
単独で押すとバックスラッシュの文字が出力されて、シフトを押すとbarが出力されるように割り当てられています。

・・・あれ?
barって「|」だよ? 登録されてるの?
でも、シフト押しながら「ほ」のキー押すと「=」が出ちゃうよ?
ということは、シフトキーに何か別の特殊キーを押すことで出力できるのでは・・・

もう一度xevコマンドを実行していろいろキーを組合せてbarが出力されるのを調べます。
KeyRelease event, serial 32, synthetic NO, window 0x3e00001,    root 0xaa, subw 0x3e00002, time 13595679, (55,45), root:(478,254),    state 0x1, keycode 132 (keysym 0x7c, bar), same_screen YES,    XLookupString gives 1 bytes: (7c) "|"    XFilterEvent returns: False
出ちゃったよ。
キーコードは変わっていないのですが、barが出力されました。
結果としてShift+Fn+ほで出力されることがわかりました。

んだよ、なら最初からキーダブらせないでFn+ほ¥じゃなくて|を出力されるようにしておけよ。

これがわかるまで、キーのリマップ出来ないかな?
キーボードレイアウトをちゃんと設定すればできるのかな?
ネットで同じ症状出てて解決策あるかな?
とか設定を変更出来そうなアプリとか探して、5時間くらいかかりました。

まあ、こうやって少しずつ賢くなっていくしいいんだけど、せっかく新しくOS入れて楽しんでいたところにこれで時間とられて楽しさ半減。

0 件のコメント:

コメントを投稿