【Ubuntu 24.04】左右AltでIME切替しつつ「Altの誤爆」を根絶する(keydでAlt→変換/無変換、CapsLock→Alt)
TL;DR
- US配列で 右Alt=日本語 / 左Alt=英語 にIME切替したい。
- でも fcitx5 に Alt を直接バインドすると Alt が修飾キーとして生き残り、GTKメニュー移動や
Alt+◯◯が誤爆する。 - xmodmap で Alt を非修飾キーへ付け替えても、GNOME がキーマップをリセットして元通りになる。
-
keyd(evdevレベルの再マップ) で左Alt→無変換 / 右Alt→変換に変換し、fcitx5 はそれを拾う。 - 失う Alt 修飾は CapsLock→Alt で回収する。これで誤爆ゼロ・全キーボード対応・リセットされない。
対象読者・環境
- Ubuntu 24.04.4 LTS / GNOME / X11
- fcitx5 + mozc、US(英語)配列キーボード
- 「左右AltでIME切替」を試したが Alt の誤爆にイライラしている人
何が問題だったか
方式1: fcitx5 に Alt を直接バインドする(誤爆する)
fcitx5-configtool の「グローバルオプション」で
- 入力メソッドを無効化 → 左Alt
- 入力メソッドを有効化 → 右Alt
と設定するのが定番。切替自体はできる。しかし設定ファイルを見るとこうなっている:
[Hotkey/ActivateKeys]
0=Alt+Alt_R
[Hotkey/DeactivateKeys]
0=Alt+Alt_L
Alt+Alt_R という表記が症状そのもの。Alt が修飾キーのままなので、
- GTKアプリでメニューバーにフォーカスが飛ぶ
-
Alt+他キーが意図せず発火する
という誤爆が起きる。VSCode の window.customMenuBarAltFocus: false のように
アプリごとに個別回避している記事が多いが、全アプリを潰すのは非現実的。
方式2: xmodmap で Alt を非修飾キーに付け替える(GNOMEに戻される)
物理Altキーを Henkan_Mode / Muhenkan(=修飾キーではない)に変えれば根本解決…のはず。
ところが GNOME はサスペンド復帰・モニタ変更・入力ソース切替・IME再起動などのたびに
キーマップをリセットする。xmodmap はすぐ元に戻り、切替不能になって詰む。
$ xmodmap ~/.config/xmodmap-ime.conf # 適用しても…
$ # サスペンド復帰やfcitx5再起動で元通り。実用にならない
方式3: keyd(evdevレベル)で解決
keyd はカーネルの input サブシステム(evdev)レベルでキーを書き換える。
X11/Wayland や GNOME/fcitx より“下”で動くので、何をされてもリセットされない。
内蔵キーボードにも外付けにも効く。
ポイントは、US配列でも次の keysym は標準で存在すること(xmodmap -pke で確認できる):
keycode 100 (KEY_HENKAN) = Henkan_Mode
keycode 102 (KEY_MUHENKAN) = Muhenkan
つまり keyd が henkan / muhenkan を送れば、fcitx5 が正しく Henkan / Muhenkan として拾える。
設定手順
完成形
| 物理キー | 役割 |
|---|---|
| 左Alt | 英語(IME OFF / fcitx5 Deactivate) |
| 右Alt | 日本語(IME ON / fcitx5 Activate) |
| CapsLock | Alt モディファイア(Alt+Tab / Alt+F4 など) |
1. keyd をインストール(ソースビルド)
Ubuntu 24.04 のリポジトリには keyd パッケージが まだ無い(24.10以降で追加)。
なのでソースからビルドする。依存はほぼ無く数秒で終わる(git make gcc が必要)。
cd /tmp && rm -rf keyd && git clone --depth 1 https://github.com/rvaiya/keyd
cd keyd && make && sudo make install
2. keyd 設定ファイル
sudo mkdir -p /etc/keyd
sudo tee /etc/keyd/default.conf > /dev/null <<'EOF'
[ids]
*
[main]
# 左Alt -> 無変換 : 英語(fcitx5 Deactivate)
leftalt = muhenkan
# 右Alt -> 変換 : 日本語(fcitx5 Activate)
rightalt = henkan
# CapsLock -> Alt : 失ったAlt修飾の代替(Alt+Tab など)
capslock = leftalt
EOF
サービスを有効化:
sudo systemctl enable --now keyd
[ids] * で全キーボードが対象になる。機種非依存なので使い回せる。
3. fcitx5 のキーバインド
~/.config/fcitx5/config の Hotkey/ActivateKeys を Henkan、
Hotkey/DeactivateKeys を Muhenkan にする。GUI(fcitx5-configtool の
「グローバルオプション」)でもよいが、次のブロックを貼れば他の設定を壊さず一発で書き換わる。
(セクション内の 0= 行だけを差し替え、無ければ追記する)
CONF=~/.config/fcitx5/config
cp "$CONF" "$CONF.bak" # 念のためバックアップ
set_hotkey() { # $1=セクション名 $2=割り当てるキー
if grep -q "^\[$1\]" "$CONF"; then
sed -i "/^\[$1\]/,/^\[/ s/^0=.*/0=$2/" "$CONF"
else
printf '\n[%s]\n0=%s\n' "$1" "$2" >> "$CONF"
fi
}
set_hotkey 'Hotkey/ActivateKeys' Henkan
set_hotkey 'Hotkey/DeactivateKeys' Muhenkan
反映:
fcitx5 -r -d & # または再ログイン
動作確認
sudo keyd monitor # キーを押して期待どおりのコードが出るか確認(Ctrl+Cで終了)
- 右Alt → 日本語入力ON
- 左Alt → 英語入力OFF
- CapsLock(+Tab など)→ Alt として機能
Alt+◯◯ の誤爆やメニュー移動が一切起きなくなっているはず。
別PCへの移植
-
git clone → make → sudo make installで keyd を入れる -
/etc/keyd/default.confを上記内容でコピー sudo systemctl enable --now keyd- fcitx5 の Activate/Deactivate を
Henkan/Muhenkanに設定
これだけ。keyd 設定は機種非依存なのでそのまま持っていける。
注意点
- CapsLock のロック機能(大文字固定)は無効になる。必要なら別キーへ。
- keyd 設定の再読込は
sudo keyd reload。 - keyd は evdev レベルなので Wayland セッションでも同様に動く。
- keyd はキーボードを掴むので、極稀に他のキーリマップツールと競合する。併用時は注意。
まとめ
「左右AltでIME切替」の記事は多いが、その大半は fcitx5/ibus の直接バインドで、
Alt が修飾キーとして残る誤爆をアプリ個別に回避している。
本記事は keyd で Alt を非修飾キー化して誤爆を根本から消し、
CapsLock→Alt で修飾キーを回収するアプローチ。
xmodmap が GNOME に消される問題も keyd なら発生しない。US配列ユーザーにおすすめ。