1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「左右AltでIME切替」なのに Alt が誤爆する問題を keyd で根絶する(Ubuntu 24.04 / fcitx5 + Mozc / USキーボード)

1
Posted at

【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/configHotkey/ActivateKeysHenkan
Hotkey/DeactivateKeysMuhenkan にする。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への移植

  1. git clone → make → sudo make install で keyd を入れる
  2. /etc/keyd/default.conf を上記内容でコピー
  3. sudo systemctl enable --now keyd
  4. 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配列ユーザーにおすすめ。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?