PFU の高級キーボード Happy Hacking Keyboard (略称 HHKB) を買った。昨年に US キーボード配列の Macbook Pro を買ったのでデスクトップと合わせたくなったのと、左 Ctrl キーが初めから A の隣りにあること、◇キーへの憧れがあって選択。この記事では Linux 向けに行った設定を記録する。

1. HHKB Professional HYBRID Type-S

購入したモデルは HHKB Professional HYBRID Type-S 英語配列/墨 (PD-KB800BS)。US キーボード配列で、PC との接続には USB Type-C と Bluetooth を使うことができる。価格は 35,000 円を越えており、これまで使っていたサンワサプライの 3,500 円のキーボード SKB-KG2BK と比べると、その値段、実に10倍である。

何かわかるかもしれないので比較してみる。

項目 旧キーボード 新キーボード
メーカー サンワサプライ PFU
モデル名 SKB-KG2BK PD-KB800BS
キー配列 日本語 英語
キー数 103 60
ストローク 3.8±0.3 mm 3.8 mm
キーピッチ 19 mm 19.05 mm
キースイッチ メンブレン 静電容量無接点方式
押下圧 55±10 g 45 g
本体重量 460g 540g (電池含まず)

キーストロークの深さやキーピッチについてはほとんど変わらない。

キースイッチの静電容量無接点方式は、PFU と Realforce、中国メーカーの Niz のみでしか採用されていない方式。キーが物理的に接地しないので独特のタッチ感と静音性を持つらしい。サンワサプライのキーボードはタイプ音がうるさくてリモート会議中に遠慮していたが、HHKB では気にしなくて済むようになった。まあ HHKB も無音というわけでなく、SHIFT キーを離したときの音はそこそこ気になる。

本体は随分重いなと思ったら 100 g も重くなっていた。持ち運ぶつもりも無いので多少重いくらいの方が安定して良いのではないだろうか。

でもサンワサプライも値段の割にはなかなか悪くないキーボードだったと思う。5年前にヨドバシカメラで適当に叩いて買ったものだ。

2. PC 環境

  • キーボード: PFU (PD-KB800BS) HHKB Professional HYBRID Type-S 英語配列/墨 Happy Hacking Keyboard | HHKB HYBRID Type-S | PFU
  • Bluetooth 接続
  • OS: Fedora 33 Workstation Edition
  • Desktop: X11 + Gnome 3.38.4
  • Text Editor: Emacs 27.1 + Spacemacs + SKK + AZIK
  • Input: iBus 1.5.23 + Mozc 2.23.2815.102-13

3. キーボード DIP スイッチ設定

HHKB では本体背面に DIP という 6 ビット分のスイッチが付いており、これを切り替えることでデフォルト動作を変更できる 1

DIP スイッチは下記の設定にした。

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

SW1, SW2: Mac モード

はじめ HHKB モードで行くつもりだったが、HHKB モードでは◇キーが無変換、変換キーのキーコードを送信するらしく、なんかダサいので Mac モードにした。

HHKB モードでは、左◇キーが無変換として認識された。

KeyPress event, serial 28, synthetic NO, window 0x3000001,
    root 0x6c5, subw 0x0, time 2303537, (163,68), root:(213,155),
    state 0x10, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,

右◇キーは無変換として認識された。

KeyPress event, serial 28, synthetic NO, window 0x2600001,
    root 0x6c5, subw 0x0, time 7555900, (-288,352), root:(576,1348),
    state 0x10, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES,

keycodes/evdev で、キーコード 100、102 がそれぞれ無変換、変換として定義されている。

$ egrep '100|102' /usr/share/X11/xkb/keycodes/evdev
/usr/share/X11/xkb/keycodes/evdev:      <MUHE> = 102;   // Muhenkan
/usr/share/X11/xkb/keycodes/evdev:      <HENK> = 100;   // Henkan

DIP スイッチを切り替えて Mac モードにすると、左右の◇キーはそれぞれ 133、134 になった。

KeyPress event, serial 29, synthetic NO, window 0x2600001,
    root 0x6c5, subw 0x0, time 8672890, (1253,-273), root:(2117,723),
    state 0x14, keycode 133 (keysym 0xffeb, Super_L), same_screen YES,

KeyPress event, serial 28, synthetic NO, window 0x2600001,
    root 0x6c5, subw 0x0, time 9003679, (-170,455), root:(694,1451),
    state 0x10, keycode 134 (keysym 0xffec, Super_R), same_screen YES,

keycodes/evdev でキーコード 133, 134 は LWIN、RWIN であると一旦定義されているが…

$ egrep '133|134' /usr/share/X11/xkb/keycodes/evdev
        <LWIN> = 133;
        <RWIN> = 134;

symbols/pc でそれぞれ Super_L、Super_R に置き換えられている。

$ egrep 'LWIN|RWIN' /usr/share/X11/xkb/symbols/pc
    key <LWIN> {        [ Super_L               ]       };
    key <RWIN> {        [ Super_R               ]       };

SW3: Delete=’BS’

Delete キーが Backspace になるようにした。

SW4: Left ◇=’Fn’

さっき◇キーが Super キーになって喜んだばかりだが、左◇キーは Fn にしてしまうことにした。このあと Vi 風キーバインドで Fn + hjkl でカーソルキーを動かせるようにしたとき、左にも Fn キーが有った方が押し易いからである。

SW5: ◇=’◇’, Alt=’Alt’

SW5 を ON にすると◇キーと Alt キーを逆にできるらしいが、そのままにした。

SW6: Power Saving Enabled

Sw6 だけは他のスイッチと異なり、キーボード配列ではなく省電力設定を切り替える。SW6 が OFF のとき省電力モードは ON で、Bluetooth 接続時に 30 分間無操作だとキーボードがスリープ状態になる。

4. キーマップ変更

Happy Hacking Keyboard キーマップ変更ツールというソフトが公式から出されており、キーを押したときのキーマップを自在に変更できる 2。残念ながら Linux には対応していないので、Windows か Mac の PC と接続して使う必要がある。CUI でもいいから欲しいなあ。

まだ試行錯誤中だが、現時点で以下のように変更している。

操作 キーマップ メモ
Fn + h Left vi 風にカーソル操作
Fn + j Down vi 風にカーソル操作
Fn + k Up vi 風にカーソル操作
Fn + l Right vi 風にカーソル操作
Fn + [ Page Up デフォルトで Up キーになるところを Page Up に
Fn + ; Home デフォルトで Left キーになるところを Home に
Fn + ‘ End デフォルトで Right キーになるところを End に
Fn + / Page Down デフォルトで Down キーになるところを Page Down に
Fn + Backspace Delete  

5. Gnome 設定

アクティビティ画面の表示方法

Gnome のデフォルト設定では、Super キーを押すとアクティビティ画面が表示される。これでは Super キーの組み合わせが使えず、せっかくの Super キーが勿体無いので無効した。

$ gsettings get org.gnome.mutter overlay-key
'Super_R'
$ gsettings set org.gnome.mutter overlay-key ''

キーボードショートカット

正直デスクトップ環境のショートカットにはあまり興味が無いのだが、とりあえず以下を設定してみた。

# ウィンドウが覆われていれば最前面に、そうでなければ最背面に移動する
org.gnome.desktop.wm.keybindings raise-or-lower ['<Super>d']

あと GUI で「アクティビティ画面を表示する」に ‘+Space' を設定した。

キーリピート設定

キーが軽くなってタイピングし易くなったので、キーリピートの遅延を減らすと共にリピート速度を上げた。手が慣れたらもっと高速化できそうな気がする。

$ gsettings set org.gnome.desktop.peripherals.keyboard delay 180
$ gsettings set org.gnome.desktop.peripherals.keyboard repeat-interval 25

6. スリープからの起動

Wake on LAN

Bluetooth 接続になったのでキーボードからスリープ解除できなくなった。本体の電源ボタンを押しても全然構わないのだが、せっかくなので Wake on LAN で起動する方法を模索してみる。

以下のように Wake-on が g になっていれば Wake on LAN が有効らしい。しかしどうも期待通り動かないので調査中。

$ sudo ethtool eno1 | grep Wake-on
        Supports Wake-on: pumbg
        Wake-on: g

USB Bus 設定 (失敗)

HHKB で PC をスリープから起動するため、以下のような設定も試したが思った通り効果は無かった。

$ dmesg
[    8.895303] input: HHKB-Hybrid_1 Keyboard as /devices/virtual/misc/uhid/0005:04FE:0021.0004/input/input
19
[    8.895519] input: HHKB-Hybrid_1 Consumer Control as /devices/virtual/misc/uhid/0005:04FE:0021.0004/inp
ut/input20
[    8.895583] hid-generic 0005:04FE:0021.0004: input,hidraw3: BLUETOOTH HID v0.01 Keyboard [HHKB-Hybrid_1
] on a8:6d:aa:f8:12:71

$ lsusb | grep -i bluetooth
Bus 001 Device 003: ID 8087:0aa7 Intel Corp. Wireless-AC 3168 Bluetooth
$ dmesg | grep -i 8087
[    2.121539] usb 1-5: New USB device found, idVendor=8087, idProduct=0aa7, bcdDevice= 0.01
$ find /sys/devices/pci0000:00 -type d -name usb1
/sys/devices/pci0000:00/0000:00:01.3/0000:01:00.0/usb1
$ cat /sys/devices/pci0000:00/0000:00:01.3/0000:01:00.0/usb1/1-5/power/wakeup
disabled
> echo enabled | sudo tee /sys/devices/pci0000:00/0000:00:01.3/0000:01:00.0/usb1/1-5/power/wakeup
enabled

7. Emacs + Spacemacs + SKK + AZIK

AZIK に us101 モードが用意されており、skk-azik-keyboard-type を変更しただけで期待通りの動きになった。

(defun dotspacemacs/user-config ()
 
 (setq default-input-method "japanese-skk"
       skk-use-azik t
       skk-azik-keyboard-type 'us101)
 (add-hook 'skk-mode-
           '(lambda ()
              (auto-fill-mode -1)
              (setq truncate-lines nil
                    skk-auto-insert-paren nil
                    skk-henkan-strict-okuri-precedence t
                    skk-check-okurigana-on-touroku t
                    skk-dcomp-activate t
                    skk-dcomp-multiple-activate t
                    skk-dcomp-multiple-rows 10
                    )))
 ; Enter SKK mode on isearch-mode C-s
 (add-hook 'isearch-mode-hook 'skk-isearch-mode-setup)
 (add-hook 'isearch-mode-end-hook 'skk-isearch-mode-cleanup)
 (global-set-key (kbd "C-x j") 'skk-mode)
 
)

ただし “「” を入力しようとしても、同キーがカタカナモード切替のキーと衝突して入力できなくなってしまった。これも公式で対策が用意されており、先に “x” を打ち “x「” とすると入力することができる 3

8. その他: キートップステッカー

HHKB は全体的にいい感じだが、キートップがサラサラの質感だったのが誤算だった。PBT という経年劣化に強い素材が使われているらしい。私の指先はやけに渇いているのでキートップがサラサラ素材だと滑って疲れる (特に Emacs 使用中の左手小指)。さらに、爪の接点がなぜか指先からはみ出しているため、キートップに爪が当たって引っ掻き不愉快な感触と音に襲われる。昔買った SAMURAI 正宗というゲーマー向けのキーボード滑り止めステッカー 4 を左 SHIFT 及び A/S/D/X/C/V キーに貼り付けた。個人的には必需品なのだがもう販売していないらしい。需要無いのか?

9. 参考資料