Linux PC用にJIS配列Apple KeyboardのUSB版(フルサイズのApple Keyboard)を購入しました。
MacBookと同じ配列のワイヤレス版の場合、長時間の入力には向かない、とAppleサイトの製品レビューにはあったのでUSB版を購入しました。バッテリーも気にしなくて良いのはメリットです。
BootCamp Windows 10の「漢字」キー
昔のBootCampは「CapsLock」を「漢字」キーとして使う必要がありましたが、今は問題ありません。
MacBook ProのBootcampにインストールしたWindows 10の場合、ドライバを入れた状態だとMacOSと同じ「かな」と「英数」キーが普通に使えます。
Linuxでも同じように使いたいので、キーマップの設定変更で対応しました。(後述)
VMware 14上のWindows 10の「漢字」キー
VMware上のWindows 10の場合、CapsLockキーで日本語入力モードに切り替わります。結構使いづらいです。
MacBook ProのBootcampのWindows 10だとドライバのお陰(?)で普通のWindowsキーボードと同じように操作できますが、VMware上の場合はマッピングを変更しないと同じにならないと思います。
VMwareはxmodmapでリマップしたコードは取得してくれません。この辺りの情報でキーマッピングを変更できることは分かりますが、肝心のApple Keyboardの「かな」「英数」キーのV-Scanコードが分かりません。
Desktop PCに接続したApple KeyboardがCapsLockキーで送信するキーコード
Apple Keyboardが「CapsLock」キーで、どのキーコードを送っているかLinux上のxevコマンドで確認しました。
Linuxの環境はFedora 27 x86_64 Gnome Desktopです。
「CapsLock」キー
KeyPress event, serial 33, synthetic NO, window 0x5400001,
root 0x1ae, subw 0x0, time 79424903, (-126,548), root:(2567,594),
state 0x10, keycode 66 (keysym 0xff30, Eisu_toggle), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
英数キー(Eisu_toggle)が押された事になっている事がわかります。
通常のJIS配列キーボードで「漢字(全角半角)」キーを押した場合、
「漢字(全角半角)」キー
KeyRelease event, serial 33, synthetic NO, window 0x5400001,
root 0x1ae, subw 0x0, time 77693326, (-126,549), root:(2567,595),
state 0x10, keycode 49 (keysym 0xff2a, Zenkaku_Hankaku), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
当然ですが「漢字(全角半角)」キー(Zenkaku_Hankaku)が押された事になります。
Linux上で「漢字」キー
X Windowsは~/.xmodmaprcファイルでキーボードのバインティングを自由に変更できるので以下のようにカスタマイズしました。(システムによっては~/.xmodmaprcではなく~/.Xmodmap, ~/.xmodmapの場合もあります)
設定を試すにはxmodmapコマンドで設定ファイルを読み込みます。
xmodmap ~/.xmodmaprc
Fedora 27の場合、ログイン時に自動読み込みされないのでログイン時にマッピングを変更するには初期化スクリプトの何れか(.bash_profileなど)で初期化します。Fedora 27の場合、Xをディスプレイサーバーにしていても.xinitrcは読み込まないので、どれでも良いのでログインで実行される初期化スクリプトで実行させます。
!で始まる行はコメントです。古い設定で、通常のJIS配列キーボードを利用していた時の設定です。全角半角のESCに、ESCを漢字キーに、CapsLockをCTRLにする設定です。
太字は「かな」を「カタカナ ひらがな」キーに、「英数」を「半角/全角(漢字キー)」キーに、する設定です。
[yohgaki@dev ~]$ cat .xmodmaprc
!remove Lock = Caps_Lock
!keysym Caps_Lock = Control_L
!add Control = Control_L
!keycode 9 = Zenkaku_Hankaku
!keycode 49 = Escapekeycode 130 = Zenkaku_Hankaku
keycode 131 = Zenkaku_Hankaku
恐らく多くのLinux環境でApple Keyboardを使うには最後の2行を足すだけで十分でしょう。Apple Keyboardの「かな」「英数」キーを押した時と同じような動作になります。
実際には「漢字(全角/半角)」キーと同じになるので、どちらのキーでも入力モードを切り替えれるようになります。
日本語Apple Keyboardが送るキーコード
参考までに私のJIS配列キーボードに設定しているLinuxではApple Keyboardがどのようなキーコードを送っていたか列挙しておきます。記載していないキーは期待するキーコードでした。
Fedora 27 Gnome Desktop
- CapsLock: keycode 66 (keysym 0xff30, Eisu_toggle)
- 英数: keycode 131 (keysym 0xff34, Hangul_Hanja)
- かな: keycode 130 (keysym 0xff31, Hangul)
- Control: keycode 37 (keysym 0xffe3, Control_L)
- 左Command: xevでキャプチャできない。
古いLinuxでは keycode 133 (keysym 0xffeb, Super_L) - 右Command: xevでキャプチャできない。
古いLinuxでは keycode 134 (keysym 0xffec, Super_R) - F13: xevでキャプチャできないが PrintScreen になる。
- F14: keycode 192 (keysym 0xff14, Scroll_Lock)
- F15: keycode 193 (keysym 0xff13, Pause)
- F16: keycode 194 (keysym 0x1008ff47, XF86Launch7)
- F17: keycode 195 (keysym 0x1008ff48, XF86Launch8)
- F18: keycode 196 (keysym 0x1008ff49, XF86Launch9)
- F19: keycode 197 (keysym 0x0, NoSymbol)
- Clear: keycode 77 (keysym 0xff7f, Num_Lock)
- Fn: なし。xevでキャプチャできない。
Apple日本語キーボードは、実は日本語ではなく韓国語キーボードです。何故このような製品になったのか疑問ですが、共用した方が部品もソフトウェアもコストダウンになるのでしょう。本物の日本語キーボードの方が便利なのですが。。。
MacOSと同じ「かな」「英数」キーを使えるようにIM(iBus)の設定を変更する
入力モードを「かな」と「英数」キーで切り替えるだけなら入力メソッドの設定で変更できます。
iBusをGnome(”日本語(かな漢字)”と表示されるもの)で使っている場合:
- メニューバー右の入力モードアイコンをクリックし「Preferenece」の設定メニューを開く。
- 「ショートカット」タブをクリックして選択する。
- 「ひらがな」を選択中に「+」(ショートカット追加)アイコンをクリックする。
- 追加するコマンドに「直接入力モードに変更」を選択する。
- 新たに追加した「直接入力モードに変更」ショートカットをダブルクリックする。
- 「英数」キーを押す。
これで”ひらがな”モード中に「英数」キーを押すと、直接入力モード(つまり英数がそのまま直接入力できる)になります。
同じ要領で”カタカナ”、”英数”、”直接入力”に「かな」(Hangul_Hanja)、「英数」(Hangul)を適切に登録すると、「かな」「英数」をMacOSと同じように使えるようになります。
まとめ
キーマップを変える方法の方が手間はかからないと思います。IMの設定でも何とかなるので、GUIで変更したい場合はIM設定を使うと良いと思います。
ただし、Mozcの設定UIだと「かな」(Hangul_Hanja)、「英数」(Hangul)は登録できませんでした。登録しようとしてもキーコードが受け付けられません。
AppleにはControlキーは何時ものAppleキーボードの位置で「普通の日本語キーボード」を作って欲しいです。
VMware上のWindowsも使うのですが、設定を調べるのが面倒なのでCapsLock(Eisu_toggle)今でも使っています。慣れてしまいましたが、最初はかなり使いづらかったです。