読者です 読者をやめる 読者になる 読者になる

よかろうもん!

アプリからインフラまで幅広くこなすいまどきのクラウドエンジニアが記す技術ブログ

英字キーボードを日本語キーボードとして利用する時のキーマップの変更方法〜lenovo x200sの場合〜

Linux

lenovo x200sが届いたのですが、その筐体のキーボードがUSキーボードであり、日頃から日本語キーボードしか使い慣れていない私にとっては多少しんどかったりします。#購入時に確認しなかった私が悪いのですが…。
日頃は、ノートPCとディスプレイを接続し、デュアルディスプレイで作業しており、そのノートPCにキーボード&マウスをUSB接続させて、それらをInputデバイスとしています。
そのため現状は、ノートPCのキーボードがUSで、それに接続しているキーボードが日本語キーボードです。なので、デスクでUSBキーボードを利用する時とデスクから離れてノートPCのみを利用する時とではキーボードの型式を変更しないといけません。そこで何とかしてUSキーボードでも日本語キーボードのように使えないものかと思い調べてみました。
結局、これがベストだ!という方法は見つからず、キーバインディングを変更することとしましたので、その方法を残しておきます。
ちなみにOSはUbuntu 8.10の場合ですが、他ディストリビューションでも同じような方法でキーマップを変更することは可能だと思います。

キーコードの調査

USキーボードにて入力をするときに困るのは、「パイプ( | )、エンマーク(¥)」と「アンダースコア( _ )」が入力できないことではないでしょうか。そこで今回は、これら2つのキーを日頃使わないキーに割り当てたいと思います。幸いにもx200sにはフォワード/バックキー(※)がついており、私はこれらをりようしていないため、このキーに付け替えてみます。
thinkpad x61を三ヶ月間使ってみて 

まずは、フォワード/バックキーのキーコードをxevコマンドを利用して調べてみます。

$ xev

するとEvent Testerウィンドウが開きますので、そのウィンドウ上にカーソルを移動してみてください。すると、コマンドを発行したコンソールが更新されると思います。そのEvent Testerウィンドウをクリックしてフロントにして、何らかのキーを押してみてください。キー入力を受け付けるとコンソールに、KeyPress event(キーが押された)や、KeyRelease event(キーが離された)が表示されてます。

f:id:interu:20090322141542p:image

以下はバックキーを離して、フォワードキーを押したときの表示です。

KeyRelease event, serial 34, synthetic NO, window 0x3a00001,
root 0x7d, subw 0x0, time 2402469, (4,177), root:(848,228),
state 0x0, keycode 166 (keysym 0x1008ff26, XF86Back), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 34, synthetic NO, window 0x3a00001,
root 0x7d, subw 0x0, time 2402659, (4,177), root:(848,228),
state 0x0, keycode 167 (keysym 0x1008ff27, XF86Forward), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

この表示のkeycodeより、バックキーのキーコードは166フォワードキーは167であることが確認できます。

キーの割り当て変更

キーの割り当てをする場合は、xmodmapコマンドを利用します。まずは、どのキーコードにどのようなキーを割り当てるかを設定ファイルに記述しておきます。今回は、ホームディレクトリにcustom.xmodmapというファイルに以下の内容を記録しておきます。

keycode 166 = backslash underscore
keycode 167 = backslash bar

これは、キーコード166に、通常入力時はバックスラッシュキ( \ )、Shiftを押しながら入力された場合にアンダースコアキー( _ )が入力されるような設定です。キーコード167については、Shiftを押しながらキーが押された場合はパイプ( | )が入力されます。あとは、この設定を読み込めばOKですので、以下のコマンドを発行してみてください。

$ /usr/bin/xmodmap /home/[アカウント名]/change.xmodmap

以上でキーマップを変更することができました。ログイン時に自動的に割り当てたい場合は、ログインシェルの設定ファイル(.bashrcや.zshrcなど)に登録しておくとよいでしょう。