CORY's twilight zone > Android 設定備忘録[an error occurred while processing this directive] > HID外付けキーボードを使う

Android 設定備忘録 HID外付けキーボードを使う

[an error occurred while processing this directive]
REUDO RBK-3000BT

Android 4.0 以降(正確には USBホスト に対応した 3.1 以降?)より USB/Bluetooth HID に対応し、キーボード配列の設定ファイルもテキストファイルになり、書き換えが幾分容易になった。 さらに Android 4.1 "Jelly Bean" からは「User-installable keymaps」に対応しここを開いてから Android 4.1 を選ぶと見られる)、キーボード配列の設定を後から追加できるようになった(apkパッケージにする必要があるが)

筆者のように物書きや端末操作などの用途では、いわゆる物理キーボードの有無(やその良し悪し)が作業効率に直結する。しかし最近はキーボードを搭載した携帯端末がほとんど市場から姿を消してしまい、おのずと USB や Bluetooth 接続の外付けキーボードを使う必要に迫られる。

筆者も Windows Mobile(W-ZERO3シリーズ)を使っていた頃から、内蔵キーボードと外付けキーボードを使い分けていたが、いま主流の Android ではキーボードからの日本語入力に癖があり、正直あまり使っていなかった。 しかし、Android 以外の選択肢が消えつつある中、重い腰を上げて Android で外付けキーボードを使えるようにしたので、本稿はその備忘録。

なお、本稿では基本的に Android 4.1 以降USB/Bluetooth HID 対応のパソコン用(パソコンでも使える)フルキーボードを対象とし、Android 4.0.x 向けの補足情報を追加する。 (Android 2.x に対応する Bluetooth SPP キーボードは対象外。)

また、筆者は本稿の内容について何らの保証や推奨をするものではなく、もしこの資料を参照したことに起因する損害等が発生したとしても一切の責を負わない。

【備考】 KK = KitKat = Android 4.4.x, JB = Jelly Bean = Android 4.1/4.2/4.3, ICS = Android 4.0, root = Superuser = 管理者権限

参考

Nexus 7/5 など Android 4.1 以降の機種に、一般的な外付けキーボードを接続して刻印通りに使いたいだけなら、下記の面倒な作業をしなくても、「KCM for 日本語106/109キーボード」を Google Play からインストールしてキーボードレイアウトを選べば、大抵の場合は動作するものと思われます。

また、Android 2.x はHIDキーボードに対応しないので本稿の対象外ですが、BlueKeyboard JP で使えるようになる場合があるようです。

目次

Android のキーマップ キーコードを調べて設定ファイルを書く Android 4.0 (ICS) 補足情報 キー配列とキーコード RBK-2100BTJ TK-FBP017 (HID) JISカナ入力 Android key code (AKC) とキーの対応

[an error occurred while processing this directive]

Android のキーマップ

(19KB)
nicoWnnGJota+で動作確認
(20KB)
▲alt+tabでタスク切り替え
(22KB)
▲ハードキーに対応
 したIMEが必要
(17KB)
nicoWnnGキーコードテスト
(17KB)
▲Bluetooth設定画面
(20KB)
▲「デバイスの検索」中
(20KB)
▲ペアリング開始
(24KB)
▲パスキー入力指示
(20KB)
▲ペアリング終了
(21KB)
Terminalから操作
外付キーボードも使える

書き換え対象ファイル

関係する設定ファイルは下記3種類。

  1. Input Device Configuration File (*.idc)(省略可)
    場所:
    /system/usr/idc/*.idc
    /data/system/devices/idc/*.idc
  2. Key Layout File (*.kl)
    場所:
    /system/usr/keylayout/*.kl
    /data/system/devices/keylayout/*.kl
  3. Key Character Map File (*.kcm)
    場所:
    /system/usr/keychars/*.kcm
    /data/system/devices/keychars/*.kcm

キーボードに適した設定ファイルがインストールされていない場合や、設定ファイルに不具合がある場合は、/system/usr/keylayout/Generic.kl, /system/usr/keychars/Generic.kcm が使われる。いわゆる US配列キーボードに最適化されたもので、日本語配列キーボードを接続すると一部キーがおかしくなる。

日本語配列キーボード用の設定ファイルはOS標準では提供されていない。 Android 4.1 以降では .apk で設定ファイルを追加できるようになり、その仕組みを使って追加するための設定ファイルを配布されている方がいる。 → KCM for 日本語106/109キーボード (Google Play)

【注意】Generic.kl, Generic.kcm ファイル自体を書き換えないこと。このファイルが無い/壊れていると、最悪、キー入力が全くできない状態になる。

基本的な流れ

  1. ハードウェアキーボードに対応している日本語IMEを入れておく
  2. キーボードを接続する(USB接続の場合はバスパワーで動作し、Bluetooth はペアリングして、とりあえず入力できる所まで)
  3. 特殊キーや日本語関連キーなど、うまく動作しないキーとその挙動を確認する
    (当然ながら、全てのキーがうまく動いているのであれば、以降の操作は不要)
  4. 3. でうまく動作しなかったキーのコードを調べる
    (筆者は nicoWnnG:「設定」→「言語と入力」→「nicoWnnG IME(の設定)」→「キーコードテスト」を使用)
  5. キーボードの Vendor ID, Product ID を調べる
  6. .kl, .kcm ファイルを書く
  7. 6. のファイルを端末に書き込む(要root権限)
  8. 端末を再起動
  9. 日本語IMEの設定を調整する

ハードウェアキーボード対応の日本語IME

物理キーボードに対応している物なら何でもいいが、意外と対応していない物が多く、対応していてもそれぞれに癖がある上、情報も少ないので、試行錯誤することになる。まずは1つ入れて、うまく使えなければ他を検討する。

とりあえず実績があるのは、nicoWnnGOpenWnn QWERTYOpenWnnOyaWnn(親指シフト)Google日本語入力ATOK

USBキーボードを接続する

Android端末の場合、Bluetoothよりかえって面倒かもしれないけど…とりあえず主な確認点を。

Bluetoothキーボードを接続する

Reudo RBK-2100BTJ の例。ELECOM TK-FBP017 のHIDモードでも同様。他のキーボードでもあまり変わらないと思うけど。)

  1. キーボードをペアリングモードにする([Fn] + [Bluetooth]キーを押すとLEDが点滅し始める)
  2. Android 端末の「設定」→「Bluetooth」の右端で、Bluetooth を有効にする。
  3. 「設定」→「Bluetooth」をタップすると、「Bluetooth Keyboard」(または型番など)が検出されているはず(検出されていなければ「デバイスの検索」をタップ。それでも検出されなければ、キーボードの電源を一旦落とし、再度入れてペアリングモードにしてから再検索)
  4. 「Bluetooth Keyboard」をタップするとペアリングが始まるので、キーボードで「0000[Enter]」(Android側に数字4桁のパスコードが表示されている場合はその数字)を入力。

キーボードの Vendor ID, Product ID を調べる

キーボードを接続し、とりあえず文字が入力される状態にしてから、USBデバッグ(推奨)または(USB AB 共用端子にキーボードをつないでいる場合などは)端末エミュレータ等を開き、Android 4.1 以降では

$ su
# dumpsys input

Android 4.0 の場合は

$ su
# dumpsys window input

を実行する(要root権限)と、接続中の入力装置の設定を見ることができる。 ただし大量のメッセージが流れるので、端末で操作している場合は

# dumpsys input > /mnt/sdcard/dumpsys_input.txt

などとして一旦ファイルに落としてからテキストエディタ等で見る方が良いかも。 内容はこんな感じRBK-2100BTJの例)

INPUT MANAGER (dumpsys input)

Event Hub State:
  BuiltInKeyboardId: 1
  Devices:
    -1: Virtual
(略)
    11: Bluetooth Keyboard
      Classes: 0x80000003
      Path: /dev/input/event10
      Descriptor: 5d35333aa6c164e4132deba4ece232e9078993e2
      Location: 
      ControllerNumber: 0
      UniqueId: 
      Identifier: bus=0x0005, vendor=0x0d62, product=0x9511, version=0x0014
      KeyLayoutFile: /system/usr/keylayout/Generic.kl
      KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
      ConfigurationFile: 
      HaveKeyboardLayoutOverlay: false
(略)

太字にした部分の値を、後で使うので控えておく。

root権限がない場合は dumpsys input は使えないので、下記のようにする。

$ cat /proc/bus/input/devices > /mnt/sdcard/input_devices.txt
(略)
I: Bus=0005 Vendor=0d62 Product=9511 Version=0114
N: Name="Bluetooth Keyboard"
P: Phys=90:C1:15:**:**:**
S: Sysfs=/devices/virtual/bluetooth/hci0/hci0:1/input11
U: Uniq=00:0F:F6:**:**:**
H: Handlers=kbd event11 
B: EV=12001b
B: KEY=10000 2008007 …
B: ABS=f00 0
B: MSC=10
B: LED=1f
▲目次に戻る▲

キーコードを調べて設定ファイルを書く

前述の3種類のファイルのうち、*.idc はキーボードの特性などを定義するもの(一般的なHIDキーボードでは省略可)*.kl はキーボードから取得したキーコードを Android 専用キーコード(AKC)に対応させるもの(省略すると Generic.kl が使われる)*.kcm は AKC と文字の対応を定義するもの(省略すると Generic.kcm が使われる)。 各々英語の解説記事を参照しつつ、端末に含まれている /system/usr/keylayout/Generic.kl, /system/usr/keychars/Generic.kcm をもとに書き換えるのが良い。

(リンク先は Open Embedded Software Foundation が提供している Android 4.0.3 ソースコード閲覧サービス。 参考:OHA版Androidのソース一式をGitHub上で公開Androidソースコード検索サービス

Key Layout File (.kl)

キーボードが出力するキーコードと、Android内部キーコード(AKC)との対応を定義するもの。中身はこんな感じ。行頭 # はコメント行。

key 1     ESCAPE        WAKE_DROPPED
key 2     1             WAKE_DROPPED
key 3     2             WAKE_DROPPED
...

Android 4.1 以降の場合は、.kcm ファイルでキーの入れ替えができるので、.kl ファイルではキーボードの刻印に合わせて割り当てを行えばよい。

Android 4.0 では、.kcm ファイルでのキー入れ替えができないので、たとえば CTRL と CAPS を入れ替えるといったことも含めて、.kl に書く必要がある。

Android 4.1 以降では行中にもコメントを書くことができるが、Android 4.0 ではエラーになる(行頭#から始まるコメント行しか認められない)

IMEの挙動に合わせたAKCを割り当てる

さらに日本語入力で難しいのは、IMEにより実装がばらばらで(歴史的経緯なのでしょう)、刻印通りにキーコードを割り当てるとかえってうまく動かない場合がある。 欧米圏(キーと1:1に対応する程度しか文字が存在しない)では .kcm ファイルで一通りのカスタマイズができるが、日本語入力ではIMEがAKCを直接認識・処理するので、IMEごとにAKCの割り当てを変えてやらないといけない。

例えばGoogle日本語入力では、@, [, ] 各キーに対し、LEFT_BRACKET, RIGHT_BRACKET, BACKSLASH を割り当ててやらないと、期待した文字を入力することができない。 一方、JIS配列に対応したIMEであれば、AT, LEFT_BRACKET, RIGHT_BRACKET を割り当てる。 「ろ」キーも、RO を割り当てる場合と、BACKSLASH を割り当てる場合がある。

このようにIMEにより割り当てを変えないといけないので、nicoWnnG でJISかな入力をしたいとか、どうしてもATOKでなきゃ嫌だといった場合は、IMEの挙動をひとつひとつ調べて、それに合わせたAKCを割り当てていく作業が必要になる。

Android 4.0 (ICS) までは日本語キーボードの利用に制限がある

Key Character Map File (.kcm)

Android内部キーコード(AKC)と、文字の対応を定義するもの。中身はこんな感じ。行頭 # はコメント行。

# CAPS -> CTRL
map key 58 CTRL_LEFT
# MUHENKAN -> PICTSYMBOLS
map key 94 PICTSYMBOLS

key A {
	label:			'A'
	base:			'a'
	shift, capslock:	'A'
}

key B {
	label:			'B'
	base:			'b'
	shift, capslock:	'B'
}

key C {
	label:			'C'
	base:			'c'
	shift, capslock:	'C'
	alt:			'\u00e7'
	shift+alt:		'\u00c7'
}
...

※map key (キーコード) (AKC) の指定は、Android 4.1 以降でのみ有効(Android 4.0 で map を書くと、そのkcmファイル自体が無効とされてしまう)

無効な設定や間違いがあると .kcm 自体が無効になるので、書き換え前の正常に動いているファイルをいつでも書き戻せるよう保管するとともに、慣れるまでは少しずつ書き換えていくのが良い。

.kcm ファイルの細かい書き方は、下記参考記事が詳しい。

【参考】塩田紳二のアンドロイドなう (25) キーボードをカスタマイズする

作成したファイルを書き込む

上記で作成したファイルを端末の所定の場所に書き込む。 root権限がある場合は、素直に /system/usr 以下に書き込む方が良いと思う。

root権限がない場合は /data 以下に書き込むしかないが、その場合は apk を作りパッケージインストーラ経由で書き込む必要がある(方法は未稿。そのうち書くかも?)

書き込むファイルは下記3つ。

※ファイル名は、OSに認識された名称でも可。ただし上記RBK-2100BTJの例では Bluetooth_Keyboard(空白は_に置き換える)になるが、他の機種との混用があり得るので、ID指定の方が確実。

各ファイル名の XXXX 部分には、キーボードの Vendor ID, Product ID, Version 各値を16進で入れる。ただし _Version_XXXX 部分は特に必要でなければ省略する(同じ機種でもファームウェアバージョンによりキーコードが異なるような特殊な場合に使う)

上記 RBK-2100BTJ の例では、Vendor_0d62_Product_9511_Version_0014 となる。ただし通常は Version は省略する。

これらのファイルを端末に書き込んで再起動する(通常はキーボードを切り離して再接続するだけでもOK)

下記は USBデバッグ(予め Android SDK Platform-tools と Google USB Driver を入れておく必要がある)を使う例。 または、root対応ファイルマネージャESファイルエクスプローラなど)を使ってSDカード経由でコピーしても良い。 各ファイルのパーミッションを 644 にするのを忘れずに。

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\hoge> set path=C:\Android\ADT\sdk\platform-tools;%PATH% (※)
(または、コマンドプロンプトを「管理者として実行」して)
C:\Windows\system32> copy con adb.bat (※)
@C:\Android\ADT\sdk\platform-tools\adb.exe %*
^Z
        1 個のファイルをコピーしました。

C:\Users\hoge> adb push D:\Vendor_0d62_Product_9511.idc /mnt/sdcard/
C:\Users\hoge> adb push D:\Vendor_0d62_Product_9511.kl /mnt/sdcard/
C:\Users\hoge> adb push D:\Vendor_0d62_Product_9511.kcm /mnt/sdcard/
C:\Users\hoge> adb shell
$ su
# grep system /proc/mounts
/dev/block/mtdblock0 /system yaffs2 ro,seclabel,relatime 0 0
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock0 /system
# cp /mnt/sdcard/Vendor_0d62_Product_9511.kl /system/usr/keylayout/
# cp /mnt/sdcard/Vendor_0d62_Product_9511.kcm /system/usr/keychars/
# chmod 644 /system/usr/keylayout/Vendor_0d62_Product_9511.kl
# chmod 644 /system/usr/keychars/Vendor_0d62_Product_9511.kcm
# sync
# reboot

※adb.exe があるディレクトリにパスを通す、または呼び出し用バッチファイルを生成する例。後者は要管理者権限。

.kl, .kcm を入れたら外付けキーボードを接続し、Android 4.1 以降の場合は下記 dumpsys input を実行し、各ファイルが認識されているか見てみる。(うまく認識されない場合はAndroidを再起動して再度試してみる。)

# dumpsys input | more
INPUT MANAGER (dumpsys input)

Event Hub State:
(略)
    11: Bluetooth Keyboard
      Classes: 0x80000003
      Path: /dev/input/event10
      Descriptor: 5d35333aa6c164e4132deba4ece232e9078993e2
      Location: 
      ControllerNumber: 0
      UniqueId: 
      Identifier: bus=0x0005, vendor=0x0d62, product=0x9511, version=0x0014
      KeyLayoutFile: /system/usr/keylayout/Vendor_0d62_Product_9511.kl
      KeyCharacterMapFile: /system/usr/keychars/Vendor_0d62_Product_9511.kcm
      ConfigurationFile: /system/usr/idc/Vendor_0d62_Product_9511.idc
      HaveKeyboardLayoutOverlay: false
(略)

太字部分が Generic や Virtual などになっている場合は、入れたファイルにエラーがある等が考えられるので、文法を確認する。

▲目次に戻る▲
ウィルコムストア

Android 4.0 (ICS) 補足情報

Android 4.0 (ICS) での注意点

Android 4.0 (ICS) では、本稿でまとめた内容の一部(筆者が見つけた範囲では下記)が利用できない。 (もっとも、Android はメーカー・端末によって実装状況が異なる場合もあるので、参考程度に。)

日本語キーボードの利用に制限がある

Android 4.0 (ICS) までは日本語キーボード用のキーに対応する AKC が定義されておらず、.kl に割り当てることができない。 (未定義のキーを定義した .kl ファイルはOSに認識されない。)

Android 4.1 (JB) 以降でのみ割り当てることができるAKC

「半角/全角」(ZENKAKU_HANKAKU), 「英数」(EISU), 「無変換」「NFER」(MUHENKAN), 「変換」「XFER」(HENKAN), 「ひらがな/カタカナ」(KATAKANA_HIRAGANA), 「¥/|/ー」(YEN), 「_/ろ」(RO), カナ(KANA) など

※メーカー等で特定の機器向けに独自のAKCを追加している場合がある。

【参考】ICS の KeycodeLabels.hJB の KeycodeLabels.h

dumpsys window input

OSに認識されているキーボードや、割り当てられた .kl, .kcm を確認するときに使う dumpsys コマンドの仕様が変わっている。Android 4.0 では dumpsys window input を使う(要root権限)と、必要な情報を得られる。

# dumpsys window input
WINDOW MANAGER INPUT (dumpsys window input)
Event Hub State:
  BuiltInKeyboardId: 1
  Devices:
    1: pm8058-keypad (aka device 0 - built-in keyboard)
(略)
    11: ELECOM TK-FBP017
      Classes: 0x80000003
      Path: /dev/input/event10
      Location: 5C:B5:**:**:**:**
      UniqueId: 00:0F:**:**:**:**
      Identifier: bus=0x0005, vendor=0x0a12, product=0x1006, version=0x1001
      KeyLayoutFile: /system/usr/keylayout/Vendor_0a12_Product_1006.kl
      KeyCharacterMapFile: /system/usr/keychars/Vendor_0a12_Product_1006.kcm
      ConfigurationFile: 

Input Reader State:
  Device 0: pm8058-keypad
(略)
  Device 11: ELECOM TK-FBP017
    IsExternal: true
    Sources: 0x00000101
    KeyboardType: 2
    Keyboard Input Mapper:
      Parameters:
        AssociatedDisplayId: -1
        OrientationAware: false
      KeyboardType: 2
      Orientation: 0
      KeyDowns: 1 keys currently down
      MetaState: 0x0
      DownTime: 1232071312000
(略)

JISカナ入力したいときは…

Windows と違い Android OS の Key character map ではカナシフト(カナロック)に対応していないので、カナ入力の可否やその仕様はIMEによる実装依存となる(ローマ字入力も同様だが)(ちなみにOS側がカナロックに対応している場合、例えば Windows Mobile ではカナロックキーを割り当てることでIMEによらずカナ入力できた。)

しかも前述のように、Android 4.0 (ICS) までは日本語キーボード特有のキーに対応する AKC (Android Key Code) が割り当てられていなかったため、主に「ー」(長音記号)や「ろ」の入力が課題になる。

ハードウェアキーボードからのJISカナ入力に対応している nicoWnnG IME は「キーマップの変換」機能を持っており、「JISキーボードを使用」に設定しておくと、JIS配列キーボードの「ろ」「ー」「変換」なども認識されて入力できる(「変換しない」にしておくと、Android 4.1 以降では対応できるが、Android 4.0 までは上記キーに対応しようがない)ので、この機能を使うことにする。

【書き換え内容】
 [Caps] → CTRL_LEFT
 [Ctrl] → META_LEFT
 [Win]  → META_LEFT
 [半全] → SYM(IME切替)
 [変換] → LANGUAGE_SWITCH
(.kcmにて全角空白を割当)
[無変換]→ PICTSYMBOLS
(記号入力。nicoWnnGでは無効)
[ひらがな] → SWITCH_CHARSET
  [¥]  → AT
  [_]  → GRAVE
(.kcmにて対応するキーを割当)

参考に、筆者が使っている Android 4.0.x + ELECOM TK-FBP017 用の .kl, .kcm ファイルを置いておくSony Ericsson mini S51SE 改で動作確認)。筆者仕様なのでCAPS(Aの左)にはCTRLを割り当て、左下のCTRLにはMETA(ALT)を割り当てているREUDO RBK-2100BTJ には Windows キーが無いがMETA入力ができる。ELECOM TK-FBP017 では WindowsキーもMETAとして動作する)

対応するAKCが存在しない「¥」キーには AT を、「ろ」キーには GRAVE を割り当てて、.kcm にて正しい文字を入力できるようにしているため、IMEなどAKCを直接処理する一部アプリでは予期しない動作をするかもしれない。

その他は右枠内の通り。

ある程度の端末作業と、nicoWnnG IME との組み合わせでJISかな入力ができる(かな刻印は無いので、配列を記憶している人向けだが)

※同じファイルで、名前を Vendor_0d62_Product_9511(.kl, .kcm) に変えて設置すると REUDO RBK-2100BTJ で動作する。

▲目次に戻る▲
ソフマップ・ドットコム

キー配列とキーコード

REUDO RBK-2100BTJ

今回の件でキーコードを調べたので、今後のために整理しておいた。

マウスカーソルを重ねるとキーコードが表示される。見られない場合はこちら。正確な刻印はキーレイアウト拡大図を参照。

※fnキー併用の網掛け部分は、fnキーを押さない場合と同じコードが出る。

※キーコード66の [home] は、Android の MOVE_HOME に相当。

表中の数値は16進なので、Androidの設定ファイルを書く時は10進に読み替えること(Windows の電卓、Mac OS X の計算機を「プログラマ」に切り替える、またはスクリプトを書く、暗算などお好きな方法で)

参考に、筆者が使っている .kl, .kcm ファイルを置いておく(Android 4.1 以降用。4.4 で動作確認)。CTRLはAの左(詳しくは.kcmを参照)。ある程度の端末作業と、nicoWnnG IME との組み合わせでJISかな入力ができる(かな刻印は無いので、配列を記憶している人向け)

▲目次に戻る▲

ELECOM TK-FBP017 (HID)

Reudo のODM製品らしく、概ね Reudo RBK-2100BTJ と同じだが、一部キー配置が変わっている(筆者はJISかな入力を多用しているが、こちらの方が使いやすくなっていると思う)

マウスカーソルを重ねるとキーコードが表示される。見られない場合はこちら。実際の刻印はTK-FBP017BK 公式ホームページを参照。

※Fnキー併用の網掛け部分は、Fnキーを押さない場合と同じコードが出る。

※キーコード66の [Home] は、Android の MOVE_HOME に相当。

※キーコード7Fの [Menu] は、Android の MENU に相当。

.kl, .kcm ファイルは Reudo と共通、ファイル名だけ変えれば使える。 下記ファイルは、前掲の Vendor_0d62_Product_9511.* と中身は同じで、ファイル名を変えたもの。つまり筆者が nicoWnnG IME と組み合わせてJISかな入力をするのに最適化している(ローマ字入力にも差し支えないとは思うが)

エレコムでは Android 4.1 以上向けに ELECOM Keyboard layout パッケージを提供している(こちらはHID用。Android 1.6/2.1/2.2用はSPPプロファイルを使う別物)

この他、筆者は使っていないものの親指シフトもあるらしい。

▲目次に戻る▲

ELECOM TK-FBP017 (HID) でJISカナ入力

このキーボードにはカナの刻印は無いが、JIS配列で必要なキーは一通り備えているので、カナ刻印のある一般的なキーボードと同様に、nicoWnnG IME と組み合わせてJISカナ入力ができる(配列を覚えていない場合は刻印のあるキーボードを選ぶ必要があるが)

nicoWnnG では、「設定」→「nicoWnnG IME(の設定)」→「詳細なキーボード設定」→「QWERTY配列の設定」→「QWERTYキー入力方式」→「JISかな」を選択。この時の配列は下図のようになる。

[an error occurred while processing this directive]
ELECOM TK-FBP018

TK-FBP017 では「へ」「む」「ろ」などの配列が変わり少々違和感は残るものの、RBK-2100BTJ よりも入力しやすい配列に改善されている。何よりも、筆者のようにカナ入力を習得している者にとっては、早くて確実なカナ入力を利用できる利点は大きい。

なお、エレコムでは TK-FBP017 はすでに廃番になっており、後継の TK-FBP018 も生産終了・在庫処分となっている(2014年4月現在、右図)。こちらもおそらくREUDOのOEMで、配列やデザインは変わっていない様子。

また、この配列はREUDOの現行機種 RBK-3000BT でも採用されているヨドバシで8020円ポイント10%Amazonで7290円。こちらはUS配列専用のIMEでもそのまま使える機能が搭載されている。

(ここから余談) ローマ字入力の普及とともに残念ながらカナ入力を使う人が減ってしまっているようだが、安易にローマ字入力を強制する学校等と、カナ入力に対応しない処理系(Androidなど)の増加がその主因になっている。しかし、日本語入力の機会が多い人にとり、1字入力する度におよそ倍のキーを叩く必要があるローマ字入力と効率の差は大きい。またプログラマや英文入力が多い人などにとっても、たとえば「プリント」と入力する時に purinnto と入力するのが煩わしく感じたり、無意識に print と打ってやり直した経験は少なくないだろう。

Androidでは残念ながら大半のIMEでカナ入力に対応していない状況だが、OSのHID対応など状況が大きく改善している中で、ぜひ他のIMEにも対応していただきたい。

▲目次に戻る▲
ソフマップ・ドットコム

Android key code (AKC) とキーの対応

日本語入力でありがちな問題として、US配列とJIS配列の違いに加え、Android では IME によっても挙動が異なるので、現状では、使うキーボードとIME、使いたい入力方法により .kcm を書き換えて対応するしかない。

US配列にもIBM互換機とMacで違いがあるなど一概に言えないが、以下は要注意キーの例。

AKCUS配列JIS配列備考
01ESCAPEESCESCAndroidでは「戻る」
アプリがEscと認識しない場合は '\u001b' を割り当て
29GRAVE`/~IMEにより、IME ON/OFF、あA切替として動作する
29ZENKAKU_HANKAKU *半/全
漢字
同上。IMEにより使えたり使えなかったり
Android 4.0 までは SYM または LANGUAGE_SWITCH を割り当てる
0322/@2/"/ふ
0766/^6/&/お
0877/&7/'/や
0988/*8/(/ゆ
0A99/(9/)/よ
0B00/)0//わ/を
0CMINUS-/_-/=/ほ
0DEQUALS=/+^/~/へ
1AAT@/`/゛IME によっては LEFT_BRACKET を割り当てる
1ALEFT_BRACKET[/{
1BLEFT_BRACKET[/{/゜IME によっては RIGHT_BRACKET を割り当てる
1BRIGHT_BRACKET]/}
2BRIGHT_BRACKET]/}/むIME によっては BACKSLASH を割り当てる
2BBACKSLASH\/|
7DYEN *¥/|/ーIME によっては BACKSLASH を割り当てる
Android 4.0 では仮に AT などを割り当てる
27SEMICOLON;/:;/+/れ
28APOSTROPHE'/":/*/け
73RO *\/_/ろAndroid 4.0 までは GRAVE を割り当てる
79HENKAN *変換AndroidではSPACEまたは候補一覧
Android 4.0 までは SPACE を割り当てる
7BMUHENKAN *無変換
70KATAKANA_HIRAGANA *カタカナ
ひらがな

-LANGUAGE_SWITCHあA切替
IME により CTRL+SPACE, SHIFT+SPACE が使われる
-SWITCH_CHARSET
-PICTSYMBOLS記号
E05B
E05C
META_LEFT
META_RIGHT
WinWinMac用キーボードではCommandキー
昔の106日本語キーボードには無し
-BACK戻る
-HOMEホーム
E05DMENUApp
Menu
App
Menu
メニュー
昔の106日本語キーボードには無し

* Android 4.1 以降で追加されたAKC。(Android 4.0 までは対応するAKCが無い。)
【参考】KeyEvent | Android Developers(各AKCのAPIレベルが明記されている)

※PC/AT互換機(OADG)の日本語PS/2キーボード用 scan code、またはUS配列キーボードの scan code。16進表記。Androidの.klで使われるLinuxのキーコードとは(一部は同じだが)異なる。

表中 scan code は PS/2 キーボードの物を例示しているが、USB HIDクラスのキーコード(下記参考資料の HID Usage Tables を参照)は全く異なる。Linux の内部スキャンコードは PS/2 キーボードの Scan code を一部修正したものが使われているので、上記では PS/2 の Scan code を掲載している。

【参考】

▲目次に戻る▲

謝辞、おことわり

キーコードの確認には nicoWnnG を使わせていただきました。 Google 日本語入力の仕様については、KCM for 日本語106/109キーボードのコメントを参考にさせていただきました。 この場を借りて感謝申し上げます。

なお、本稿は、筆者が個人的に調べ試した結果を整理してまとめた備忘録です。それ以上の意味はありません。中には間違いや過不足等あるかもしれませんし、端末の設定ファイルの書き換え等を推奨するものでもありませんので、予めご承知おきください。

参考記事

▲目次に戻る▲

改版履歴

2014.06.29
Android 4.0 (ICS) 補足情報、ICS用の .kl, .kcm 例を追加、Android key code (AKC) とキーの対応表でJIS/USの差を明確にした
2014.05.11
注記追加(BlueKeyboard JP など)
2014.05.03
画像追加
Vendor_0a12_Product_1006.kl, Vendor_0a12_Product_1006.kcm を追加
ELECOM TK-FBP017 (HID) でJISカナ入力 を追加
2014.05.01
記事名変更
ELECOM TK-FBP017 のキーコード表を追加、Reudo RBK-2100BTJ のキーコード表を修正(網掛け)
Android KeyCode (AKC) とキーの対応についてを仮掲載
2014.04.28
これまでの調査結果を整理してとりあえず掲載

更新日 : 2014年06月30日 (4430)

CORY's twilight zone > Android 設定備忘録[an error occurred while processing this directive] > HID外付けキーボードを使う


« 短絡線 »
[ CORY's twilight zone | PC-98, FreeBSD(98), Mac OS X, Android | 鉄道・街 | 自然 | flickr | twitter (log) | YouTube | Contact ]

Copyright © 1996-2020 CORY / Kimagurenote. Some rights reserved:
Creative Commons Attribution-Noncommercial-Share alike 2.1 Japan.