systemdで起動しているGentooでfcitxを使う

一応ブログとしてまとめておく


環境

  • Gentoo Linux (Kernel 5.10.22)
  • init: systemd (247.2-r4)
    OpenRCの方は多分関係ない
  • DM: LightDM (1.30.0-r2)
    .xprofileを読むことに関係する(多分それだけ)
  • DE: i3-gaps (4.18.2)
    たぶん結果的にはあんまり関係ない

結論

  • .xprofiledbusを起動するな
  • USEフラグuser-sessionsを有効にしろ

どっちかだけだとダメだったので多分両方

以下は曖昧な記憶を辿って(状況再現をサボりつつ)書いただけなので参考にならんかも 文章としても崩れてるし

経緯

Fcitx使って日本語を入力したいのでとりあえずWikiを見る

https://wiki.gentoo.org/wiki/Fcitx/ja

  1. app-i18n/fcitxをemergeする
    ついでにapp-i18n/fcitx-configtoolとかapp-i18n/fcitx-skk(skkユーザなので)とか入れる
  2. (LightDMなので).xprofileに以下を記載
    USEフラグは特にいじっていない=デフォルトでついてるgtk3ありでビルドしてるのでximではなくfcitx

    export XMODIFIERS="@im=fcitx"
    export QT_IM_MODULE=fcitx
    export GTK_IM_MODULE=fcitx
    
  3. Gentoo wikiにこんなことが書いてある

    Fcitx が起動する前に D-Bus セッションバスを起動することをお勧めします。これらを X のスタートアップファイル (~/.xprofile または ~/.xinitrc) の最初に追加してください: (gentoo wikiより)

    なるほど(脳死 これ多分OpenRCの人だけなんですよね) 追加する

    eval "$(dbus-launch --sh-syntax --exit-with-session)"
    
  4. 動かんやんけ

という感じだった


fcitx-diagnoseすると「正しくfcitxに接続できません。」とか出る

fcitxコマンドを直接入力してみるとdbusがどうのこうの言っている
Connection Error (Failed to connect to socket /tmp/dbus-XXXXXXXXXX: Connection refused) とかも出てた気がする
これでggるとWSLの記事が大量に出てそうじゃねえよとなったり

私自身dbusに全然詳しくなかったしあんまり勉強する気にもなれなかったので適当に調べまくっているとArchのwikiにこんな記述が

プログラムによっては D-Bus ユーザーメッセージバスを必要とすることがあります。D-Bus は伝統的に dbus-launch によってデスクトップ環境の起動時に実行されていましたが、バージョン226から、systemd がユーザーのメッセージバスを管理するようになりました。 https://wiki.archlinux.jp/index.php/Systemd/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC#D-Bus

そこで.xprofileからdbus-launchを消してみる

ついでにGentoo Wikidbusのページ見てるとuser-sessionsとかいうそれっぽい(Connection refusedと関係がありそうな)USEフラグがあることに気付く そこでそいつを加えてリビルドしてみる

→動いた 一気にやったのでどっちが原因かは明確にはわからなかったけど後で片方ずつやってみたところどちらかが欠けるとダメだったので両方必要だったらしい

ちなみにこれでfcitx5もちゃんと動いた

おまけ

fcitx-skkでAlacritty使ってるとBackspace押したときに文字が入力できなくなります。私の環境ではそうなりました。これはEscとかCtrlとかShiftを(単)押すと戻ります。
UXTermとかだと問題ないし、直接入力にすると起きなくなるので、Fcitx-skk+Alacrittyの複合問題っぽい?

原因は不明ですが調査するのが面倒だったのでTilixにしました。ebuildそのうち書くかも