１台のHHKB(US)を色んなOSで切り替えて使う

このエントリーは [TechCommitアドベントカレンダー2020](https://qiita.com/advent-calendar/2020/tech-commit) の14日目の記事です！

#はじめに
最近人生で初の mac (中古の Mac mini) を買ったのですが、普段使いのWindows用の JISキーボードを繋いでみたところ、日本語入力すらままならず辟易してしまう事態になりました。
手持ちの Happy Hacking Keyboard Professional2(US配列、以後HHKB) が mac/windows 両対応で、ディップスイッチにより使い分けられる事は分かりましたが、頻繁に使うOSを切り替えたいのに一々物理スイッチをON/OFFしてられないのでツールを使い対応してみることにしました。


mac 用の日本語配列キーボードの場合スペースキーの左右にそれぞれ「英数」と「かな」キーが配置されていて、現在のモードに関わらず押したキーのモードになるのがとても使いやすい（要するに Windows の様にトグル切り替えではない）という話を聞いたので、今回は mac / Windows そして Linux でこの使い勝手を実現してみようと思います。
自分は デュアルブートな PC で Windows10 と Ubuntu のどちらかを起動した上で、切替器経由で mac と交互に使うような運用の仕方をしています。

#ディップスイッチの設定 

|SW1|SW2|SW3|SW4|SW5|SW6|
|---|---|---|---|---|---|
|OFF|ON |ON |ON |ON |ON |

HHKB のスイッチを上記の設定にすると、キーボード全体のモードは「Macintosh」になり、
最下段のキー押下により

|Fn|Alt|　　　　　　Space　　　　　　|Alt|◇|
|---|---|:-:|---|---|
|||

のレイアウトでキー入力される形になります。
※『Alt』はmac では『Option』キーに、『◇』はWindowsでは『Win』キーに、mac では『コマンド(⌘)』キーになります。

以下、この設定における各OSでの対応の手順を記します。

#macOSでの設定

[Karabiner-Elements](https://karabiner-elements.pqrs.org/) というツールを使いますので、ダウンロードしてインストールします。
起動すると下図のように　Preferences が開きますので、「Complex modification」に「オプションキーを単体で押した時に、英数・かなキーを送信する。（左オプションは英数キー、右オプションはかなキー）」というルールを選択し追加します。
![スクリーンショット 2020-12-14 13.21.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/c1cb897e-e598-55a7-7719-801275312587.png)
以上でOKです。

# Linuxでの設定

Ubuntu20.04での設定例です。

###キーボードレイアウトの変更

1.下記のコマンドを打ちます。

```sh:
~% sudo dpkg-reconfigure keyboard-configuration
```

2.下図の様な画面が端末上に表示されるので、キーボードモデルに「Happy Hacking」を選択します。
![Screenshot from 2020-12-14 21-50-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/19fee0cc-974f-7bb4-9e3c-7c46b3a9fa6b.png)

3.後は順次下記の様に設定して行きます。
 　・「キーボードが由来する国」は「English(US)」
　・「キーボードのレイアウト」は「English(US)」
　・「AltGrとして機能させるキー」は「キーボード配置のデフォルト」
　・「コンポーズキー」は「コンポーズキーなし」
　・「Xサーバを強制終了するのに　Contorol+Alt+Backspaceを使いますか？」は「いいえ」

以上でOKです。

###Mozcの設定

1.タスクバーに表示されている「あ▼」の部分をクリックし、「ツール」⇒「プロパティ」の順に選択し、「一般」タブの「キー設定」の「キー設定の選択」編集ボタンを押すと下図のような「Mozcキー設定」画面が開きます。
![Screenshot from 2020-12-14 22-14-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/2a6b3136-f9a0-6bbd-76f8-f973bf77ec90.png)

2.キー設定をいじる前に、「編集」⇒「エクスポート」で適当なファイル名を付けて現在の設定を保存します。保存したファイルはバックアップとしてコピーを取っておきましょう。

3.保存したファイルは以下のようなフォーマットになっています。

```txt:keymap.txt

status	key	command
Composition	Backspace	Backspace
Composition	Ctrl a	MoveCursorToBeginning
Composition	Ctrl Backspace	Backspace
Composition	Ctrl d	MoveCursorRight
Composition	Ctrl Down	MoveCursorToEnd
Composition	Ctrl e	MoveCursorToBeginning
```
ファイル中の status とモード名との対応は下表です。

|モード名|status|
|---|---|
|変換前入力中|	Composition|
|変換中|	Conversion|
|直接入力|	DirectInput|
|入力文字なし|	Precomposition|
|サジェスト選択中|	Prediction|
|サジェスト表示中|	Suggestion|


4.テキストファイルから「key」の列が「Eisu」「Hiragana」の行を削除します。

5.ファイルの最下部に、下記の行を追記し、保存します。

```
DirectInput	Hiragana	IMEOn
Precomposition	Hiragana	IMEOn
Composition	Eisu	IMEOff
Precomposition	Eisu	IMEOff
```
6.編集したファイルを「インポート」すると、下表のエントリーが追加されます。

|モード|入力キー|コマンド|
|---|---|---|
|直接入力|Hiragana|IMEを有効化|
|変換前入力中|Eisu|IMEを無効化|
|入力文字なし|Eisu|IMEを無効化|
|入力文字なし|Hiragana|IMEを有効化|

7.OKボタンで終了

###左右のAltキーの割当
1.ホームディレクトリに下記のファイルを作成します。

```sh:$HOME/.Xmodmap
keycode 64 = Eisu_toggle
keycode 108 = Hiragana
```

2.下記の２つのスクリプトを作成します。ホームディレクトリの名称はご自分のものに置き換えてください。

```sh:kbd.sh
sleep 2

DISPLAY=":0"
HOME=/home/rattcv/
XAUTHORITY=$HOME/.Xauthority
export DISPLAY HOME XAUTHORITY

setxkbmap
xmodmap $HOME/.Xmodmap
```

```sh:kbd_start_up.sh
#!/bin/sh
nohup /home/rattcv/kbd.sh >/dev/null 2>&1 &
```

3.実行属性を付けます。

```sh:
~% chmod +x kbd.sh
~% chmod +x kbd_start_up.sh
```



4.次に「自動起動するアプリケーションの設定」を開き（タスクバーの一番下の「アプリケーションの表示」の選択窓に `session` と打つと絞り込まれる）、下図の様に　`kbd_start_up.sh` を追加します。
![Screenshot from 2020-12-19 11-00-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/7c4cc1d3-0b76-30c7-a0b9-705dd0914b42.png)

以上で一度ログアウトするか再起動で望みのキーバンドになります。

###macへの切り替え後の再接続時の対処

切替器でOSを切り替えたり、キーボードを抜き差しすると xmodmap の設定が消えてしまう為、対処を行います。
上述のスクリプトの内容も含め、下記の記事を参考にさせていただきました。

- [キーボード再接続時のudev rulesの追加](http://yukirinmk2.hatenablog.com/entry/2013/10/23/210559)

1.下記コマンドでHHKBのデバイス情報を取得してみます。

```sh:
~% udevadm info -a --path=$(udevadm info -q path -n /dev/input/by-id/usb-Topre_Corporation_HHKB_Professional-event-kbd)
```

ずらっと情報が流れますが、今回はHHKBのデバイス情報特定の為に

```
 ATTRS{name}=="Topre Corporation HHKB Professional"
```
の部分を使います。
`/etc/udev/rules.d/` 配下に下記の udev rules を作成します。

```sh:/etc/udev/rules.d/99-sample.rules
ACTION=="add", ATTRS{name}=="Topre*", RUN+="/home/rattcv/kbd_start_up.sh"
```

以上でOKです！


#Windows10での設定

1.スタートメニューから「設定」を選択し、左側のタブから「言語」を選択後「オプション」押すと下記画面が表示されるので、「レイアウトを変更する」ボタンを押します。


![win04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/de7b4866-8cac-1702-20dc-471d9c529549.png)

2.下図のダイアログが表示されるので、「英語キーボード(101/102キー)」を選択し、OKを押します。
![win05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/ed2a6b47-85e7-97a5-cb28-4bd0402e9d7d.png)

3.ありがたい事に [alt-ime-ahk](https://github.com/karakaram/alt-ime-ahk/releases) という今回の目的にぴったりと合うツールが公開されているので、これ使用させていただき左右の Alt キーでの ON/OFF を実現します。
zip を解凍すると `alt-ime-ahk.exe` という実行形式のファイルが展開されますので、これを実行するだけです。ショートカットを作成しスタートアップに登録するのが良いでしょう。

#終わりに
うーん。結構めんどくさいですね笑
見落としてる設定もある気がするのですが、とりあえずこれで運用してみようと思います！