Ubuntu Studio(KDE)の日本語入力設定メモ

現行方針

Ubuntu Studio(KDE)環境の日本語入力は、現状 fcitx ではなく ibus + ibus-mozc へ寄せる。

fish から起動するプロセスでは、~/ghq/github.com/tin-machine/fishConfig/config.fish 側で次の方針にする。

set -x XMODIFIERS "@im=ibus"
set -e QT_IM_MODULE
set -e GTK_IM_MODULE
set -e DefaultIMModule

2026-05-15 の確認では、プロセスは ibus-ui-gtk3ibus-daemon --xim --panel disableibus-x11ibus-portalibus-engine-mozcmozc_server が動いており、fcitx は常駐していない。

im-config のログ上も次の形になっている。

GTK_IM_MODULE='' QT_IM_MODULE='' CLUTTER_IM_MODULE='' SDL_IM_MODULE='' XMODIFIERS='@im=ibus'

このため、旧 fcitx 前提の起動直後不調は現行設定の通常確認対象から外す。ただし ibus-ui-gtk3 の warning / coredump はログに残ることがあるため、実際に日本語入力が効かない場合だけ再調査する。

旧事象の要約

  • Ubuntu Studio(KDE)環境で、ログイン直後は日本語入力ができない。
  • pkill fcitx && sleep 1 && fcitx & の再起動を2回行うと使えるようになる。
  • 一度使えるようになると、その後は安定して動作する。
  • この事象は fcitx 前提の古い状態として扱う。

旧 fcitx 状態で確認していた設定/ログ

設定

  • ~/.config/fcitx/config
    • 入力切替キー: CTRL_SPACEZENKAKUHANKAKU
  • ~/.config/fcitx/profile
    • 現在のIM: mozc
    • 有効なIM: fcitx-keyboard-usmozc

ログ

  • ~/.config/fcitx/log/crash.log
    • fcitx: BadWindow (invalid Window parameter) が記録されている。
  • ~/.xsession-errors
    • fcitx が autostart され、各アドオン設定がロードされているログを確認。
    • QXcbConnection: XCB error: 3 (BadWindow) が大量に記録されているが、fcitx由来かは断定できない。
  • ~/.local/share/sddm/xorg-session.log
    • fcitx に関する記録は見当たらなかった。
  • journalctl はこの環境でログが見つからない (No journal files were found.)。

ibusへ寄せる場合のfish設定

ibus を使う場合は、QT_IM_MODULEGTK_IM_MODULE を明示的に設定しない。 ibus 側のエラーで「QT_IM_MODULE と GTK_IM_MODULE の環境変数を未定義にしてください。そして ‘ibus-daemon –panel disable’ は ibus-ui-gtk3 コンポーネントの子プロセスとして起動されるべきです。」と出る場合、シェル設定やデスクトップセッションの環境に古いIM設定が残っていないか確認する。

~/ghq/github.com/tin-machine/fishConfig/config.fish では Linux の入力メソッド設定を以下の方針にした。

set -x XMODIFIERS "@im=ibus"
set -e QT_IM_MODULE
set -e GTK_IM_MODULE
set -e DefaultIMModule

この変更は fish から起動したプロセスには効くが、ログイン済みのデスクトップセッション全体の環境変数を必ず更新するものではない。GUIアプリ側でまだ古い値が見える場合は、ログアウト/ログイン後に再確認する。

再発時の確認事項

以下は「日本語入力が効かない状態」で実行して記録する。

1. 入力メソッド process と環境変数

pgrep -a 'ibus|fcitx|mozc'
env | rg 'IM_MODULE|XMODIFIERS'

現行の期待値は、ibus / ibus-mozc / mozc_server が存在し、fcitx が存在しないこと。

環境変数も確認する。

env | rg '^(QT_IM_MODULE|GTK_IM_MODULE|DefaultIMModule|XMODIFIERS)='
pgrep -a 'ibus|fcitx'

期待値は、QT_IM_MODULE / GTK_IM_MODULE / DefaultIMModule が表示されず、XMODIFIERS=@im=ibus が表示される状態。 fcitx が残っている場合は、autostartやim-config側でfcitxが起動されていないか確認する。

2. ibus / mozc のログ確認

journalctl --user -b --no-pager -o short-iso | rg -i 'ibus|mozc|fcitx'

ibus-ui-gtk3Create input context failedNo global engine が単発で出ても、入力が正常なら経過観察でよい。日本語入力が効かない場合は、直前に ibus-ui-gtk3 の coredump や Broken pipe がないかを見る。

3. xsession-errors末尾の保存

tail -n 300 ~/.xsession-errors > /tmp/xsession-errors-tail.log

4. ibusの起動元確認

ibus-daemon --panel disableibus-ui-gtk3 コンポーネントの子プロセスとして起動されるべき、というエラーが出る場合は、ibus-daemon を直接起動している設定がないか確認する。

pgrep -a 'ibus-daemon|ibus-ui-gtk3'
ps -ef | rg 'ibus-daemon|ibus-ui-gtk3'
rg -n 'ibus-daemon|QT_IM_MODULE|GTK_IM_MODULE|XMODIFIERS' \
  ~/.config ~/.profile ~/.pam_environment ~/.xprofile ~/.xsessionrc 2>/dev/null

ibus-daemon --panel disable を自前の autostart やシェル初期化で直接起動している箇所があれば、KDE/ibus側の起動に任せる方向で整理する。

2026-05-27: WezTerm だけ変換開始時に focus が外れる

症状

  • 英字入力はできる。
  • Konsole では日本語入力できる。
  • WezTerm だけ、日本語変換を開始すると ibus/mozc 側の候補/preedit window が foreground に来るように見える。
  • その状態で WezTerm をクリックして foreground に戻すと、続きの日本語入力はできる。

確認した状態

2026-05-27 23:00 JST 前後の確認では、入力メソッドの常駐状態は現行方針どおりだった。

ibus-ui-gtk3 --enable-wayland-im --exec-daemon --daemon-args --xim --panel disable
ibus-daemon --xim --panel disable
ibus-x11
ibus-portal
ibus-engine-mozc --ibus
mozc_server

fcitx は常駐していない。

WezTerm と Konsole の process environment は、どちらも次の方針に揃っていた。

XDG_SESSION_TYPE=wayland
WAYLAND_DISPLAY=wayland-0
DISPLAY=:0
XMODIFIERS=@im=ibus
GTK_IM_MODULE / QT_IM_MODULE は未設定
LANG=ja_JP.UTF-8

ibus enginemozc-on

journalctl では、WezTerm 起動後の ibus/mozc に coredump、Broken pipe、segfault は見つからなかった。 一方で、変換/候補 window 操作と近い時刻に ibus-ui-gtk3 が次の warning を繰り返していた。

Window ... is a temporary window without parent, application will not be able to position it on screen.

同時刻に KWin 側では次の OpenGL/blur framebuffer warning が多数出ていた。

kwin_scene_opengl: GL_INVALID_VALUE error generated. <levels>, <width> and <height> must be 1 or greater.
kwin_scene_opengl: Invalid framebuffer status: "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
kwin_effect_blur: Failed to create an offscreen framebuffer

ただし、この KWin warning が IME focus 問題の直接原因かは未確定。

判断

ibus/mozc 全体の停止ではなく、WezTerm 固有の window backend / focus 問題と見る。

決定的な差分は、現行 wezterm.luaenable_wayland = false にしていた点。 KDE Plasma Wayland session 上で WezTerm だけ Xwayland/XIM 経路になり、ibus の候補/preedit window が親 window なし temporary window として扱われて focus を奪っている可能性が高い。 Konsole は KDE/Qt の Wayland 側 input method 経路で動くため、同じ ibus/mozc でも症状が出ない説明になる。

未確定の点:

  • ibus-ui-gtk3 の temporary window warning と WezTerm focus loss の 1:1 対応は、active window のリアルタイムサンプリングまではできていない。
  • KWin の blur/framebuffer warning が focus stealing の原因なのか、単に candidate window 表示時の副作用なのかは未確定。
  • stable WezTerm の Wayland backend で長時間運用して crash が再発しないかは未確認。

対応

まず stable WezTerm では Wayland backend に戻す。 現在の WezTerm では enable_wayland の default は true なので、明示的な false を削除すればよい。 古い WezTerm を使う可能性がある設定では true を明示してもよい。

-- 通常は指定不要。Xwaylandへ寄せる必要がある場合だけ false を明示する。
-- enable_wayland = false

この設定は既存 process の backend をその場で切り替えるものではないため、新しい wezterm-gui process で確認する。

再発時の確認:

wezterm --version
pgrep -a 'wezterm|ibus|mozc|fcitx'
tr '\0' '\n' < /proc/<wezterm-gui PID>/environ | rg '^(XMODIFIERS|GTK_IM_MODULE|QT_IM_MODULE|WAYLAND_DISPLAY|DISPLAY|XDG_SESSION_TYPE|LANG)='
journalctl --user -b --since '<再発時刻の少し前>' --no-pager -o short-iso | rg -i 'ibus|mozc|fcitx|wezterm|input context|temporary window|broken pipe|coredump|segfault|panic|error|warn|fail'
xprop -root _NET_ACTIVE_WINDOW _NET_CLIENT_LIST_STACKING
xwininfo -root -tree | rg -i -C 2 'wezterm|ibus|mozc|candidate|input|gtk'

Wayland backend で WezTerm crash が再発する場合は、window_background_opacity = 1.0window_decorations = "TITLE|RESIZE" も分けて試す。 nightly の Wayland crash と stable の Wayland IME 改善は別問題として扱う。

目的

  • 「起動はしているが入力が効かない」状態なのかを確認する。
  • IMモジュールの環境変数の伝播遅延や、XIM/DBus周りの問題を切り分ける。
  • BadWindow 由来のクラッシュの前後情報を取得し、原因を特定する。