HHKB HybridをLinuxで使う

HHKBをLinuxにつなげて使えるように設定した。

Dell latitude 7280, Intel i5-7300U, 16GB RAMにFedora workstation 42。

普通にペアリングでき普通に使えるが、HHKBはUS配列でDellのビルトインはJIS配列なので、配列を切り替える必要あり。

BluetoothでHHKBを接続している間はUS配列とMozc、接続していない場合はJPとMozcに切り替える。Bluetoothのデバイス名を調べてChatGPTに切り替え用のスクリプトを書いてもらう。


~/.local/bin/switch-layout.sh

#!/bin/bash

BT_NAME="HHKB-Hybrid_3"
MOZC="('ibus', 'mozc-on')"

# HHKB が Connected 状態かチェック(全デバイス対象)
connected=$(bluetoothctl devices Connected | grep "$BT_NAME")

# 現在の入力ソース設定を取得
default_sources=$(gsettings get org.gnome.desktop.input-sources sources)

if [ -n "$connected" ]; then
echo "HHKB接続 → US配列に切り替え(Mozc維持)"
desired_sources="[(\"xkb\", \"us\"), $MOZC]"
else
echo "HHKB未接続 → JIS配列に切り替え(Mozc維持)"
desired_sources="[(\"xkb\", \"jp\"), $MOZC]"
fi

# 現在と異なる場合のみ設定変更
if [ "$default_sources" != "$desired_sources" ]; then
echo "入力ソースを変更します"
gsettings set org.gnome.desktop.input-sources sources "$desired_sources"
else
echo "変更不要"
fi


これをsystemd timerで定期的に実行してHHKBの接続と解除を検出して切り替える。


サービス

~/.config/systemd/user/hhkb-layout.service

[Unit]
Description=Switch keyboard layout based on HHKB Bluetooth connection

[Service]
Type=oneshot
ExecStart=%h/.local/bin/switch-layout.sh


タイマー

~/.config/systemd/user/hhkb-layout.timer

[Unit]
Description=Run layout switch every 5 seconds

[Timer]
OnBootSec=5
OnUnitActiveSec=10
Unit=hhkb-layout.service

[Install]
WantedBy=default.target


そして有効化と起動

systemctl --user daemon-reload
systemctl --user enable --now hhkb-layout.timer


無事にキーボード配列の切り替えができるようになった。

5秒ごとにチェックするようにしているけど、かなりラグがある。30秒以上待たないと切り替わらないように思う。


よく見る絵


HHKB はノートPCのビルトインキーボードの上にそのまま置いてみたけど、意外と干渉せずに普通に使えた。

自分の MacBookでは、ほんの少し位置がズレただけでビルトインキーが反応してしまうから、Karabiner-Elements というアプリで Bluetooth 接続時にビルトインキーボードを無効化してる。でも Latitude 7280 ではそういう処理は特に必要なさそう。


もともとビルトインキーボードのサイズが微妙に小さくて打ちにくいと感じていたけど、HHKB に切り替えたことで一気に快適になった。

キーボードがいつもの物になった途端、PC全体が使いやすい。副産物的に、HHKB を置くことで手のひらとタッチパッドの間にちょうどいいスペースができたから、手のひらがタッチパッドに触れてカーソルが勝手に動くこともなくなった。