Hidekichi

Waylandコンポジターでfcitx5のキーが時々効かなくなる場合の設定

長時間スリープから復帰後、主要キーが一時的に効かなくなる場合に

これら設定を行っても完全に直るわけではありません。症状が出にくくなるか、出てもすぐに収まるそう言う類のものです。本当の解決にはfcitx5自体が今後のアップデートで現在よりももっとWaylandに対応される必要があります。それを前置きしておきます。

どんな環境でも必ず起こるものでもないと思いますが

Plasma環境、あるいはGNOME環境が現在のWayland対応になる前までは問題なく、Dank Material Shellがv1.5(The Wolverine)になる前はそう言うことは特に起こりませんでしたが、SUPER(Windowsキー/⌘キー)、←矢印BackSpaceファンクションキーなどが長時間のスリープから復帰した時に一時的に効かなくなるということがありました。

これらは例えばテキストエディターであればカーソルがある位置で←矢印押しっぱにすればその内に動いて、動けばその後は問題なく使用できる感じでした。←矢印が効かないと入力を間違った時に戻ることができず、タッチパッドやマウスでカーソルを動かしてdelキーを使用する必要があったり、同様にBackSpaceも入力間違いの時に戻れないことになりますから、いずれにしても面倒くさい状態でした。

ワークスペースの切り替えもSUPERが効かないことから行えず、ウィンドウの切り替えもできないと全てにおいて面倒くさい状態でした。

案外早い段階でfcitx5を終了すれば機能するというのはわかっていた

しばらくはずっと、テキストエディターのカーソル、あるいはファイルマネージャーで何かしらファイルを選んでおいて←矢印を押しっぱにするとその内にそれらが動いて直るというのは気づいていて、原因としてはfcitx5臭いと思ってはいました。一旦終了させたらどうなるだろう?となってから実際に終了させて、新たにfcitx5を起動すると、比較的早くに改善するのにも気がついてました。しかし、それが本当にfcitx5のせいなのか、もしかしたらPlasma環境のアプリがあって、それらのプロセスが動作しているのでそれらのせいか、DMSも新しくなっているのでそこにも問題があるのかも知れないと切り分けるのにそこそこ時間がかかりました。

fcitx5を終了させて試すと動作する───。ということはHyprland環境には問題なく、コンポジターをNiriやMango WMに変更すると同様の症状が出るがfcitx5を終了するとやはり動く。これはDMSには問題がないと言えると思うわけです。また当初GNOMEでKIMPanelの拡張機能がすぐに対応しておらず、拡張機能の問題対応まで少し時間もかかったので問題の切り分けに時間がかかったりもしました。

まだPlasma環境のアプリ(プロセス)が動作しているというのはあると言えばありますが、2日に渡ってスリープの状態を続け、時折スリープから復帰をしてみて試して現在の状態で問題ないだろうと思ったのでその状態をここに書いておく次第です。

何が起こっていたか

おそらくPlasmaやGNOMEが現状のWayland対応になる前、またDMSが1.5になる前というのはおそらく(想像ですが)、XWaylandを通じて単一のルートで通信していたものが、Waylandへの対応が進んだことによりinput-method-v2などへの対応が進み、fcitx5にはどのディストリビューションでも対応できるようにX11/XWayland/waylandなどのルートがあり、内部的には正しく動作していても設定でX11を使用するものがあれば通信に混乱が起こったのではなかろうかと。←矢印押しっぱで、その内に直るということもこれら通信が、ある時を境に正常に繋がって正しく動作していたと言うことなんだろうと思うわけです。

起動している間はHyprlandで正しく動作していたのに、スリープから復帰という状態を挟むとまた通信に混乱が起こる → fcitx5を終了させ再起動すると直る と言うのがここからもそうであったのではないかという説明が高い確率でできるようになったと思うのです。

どういう対処をすればよいか

X11の設定が邪魔なので、これらが機能しないようにする設定をして、またデフォルトでSUPERを使用するようなfcitx5のキーバインドを空欄か他のものに変えるようにすればキーの奪い合いがなくなり、正しくHyprlandのキーバインドが通るようになる、つまりはfcitx5がキーの横取りをしなくなると言うことになると考えます。fcitx5はキーの横取りをしているのではなく、スリープなどが挟まったことで混乱しているとも言えると思います。それら混乱がなるべく起こらないようにすれば良いということなのです。

おそらく今後、ディストリビューションもDMSもfcitx5もバージョンアップをしていくでしょうから、スリープから復帰後にfcitx5を終了させて再起動させると言うことを別途設定する事で対処はできるにしても、修正された時に元に戻す方法を忘れたりと言う事があったりでそれらはできるだけしたくなかったのです。設定で修正できるのであれば,そちらの方が簡単ですし。

hyprland.luaの設定

hl.env("XMODIFIERS", "@im=fcitx")

hl.on("hyprland.start", function()
  -- default exec_once conf
  hl.exec_cmd("fcitx5 -d")
end)

念のため環境変数にXMODIFIERSは設定しておきます。これは私がファイルマネージャーにThunarを使用しているからで、設定しなくても動作はするはずですがあくまでも念のためにというものです。後はfcitx5をシステム起動時にデーモン起動させるだけと言う設定にしてあります。

グローバルオプション・アドオン設定

fcitx5設定画面

fcitx5の設定自体はこんな感じで、上部タブにある「グローバルオプション」と「アドオン」の設定を変えていきます。

グローバルオプション

グローバルオプション

グローバルオプションでやったことはSUPER + ※と何かしらSUPERが使用されているものを空欄にしたことです。便利な機能もあるでしょうから、できるだけHyprlandなどコンポジターの設定と被らないようなキーの組み合わせを考えて設定するのが良いと思います。

アドオン

モジュール項目

モジュール Wayland

Module(モジュール)と言う項目の「Wayland」にある項目で、「システムXKB設定の上書きを許可する(PlasmaとGNOMEのみサポート)」のチェックを外します。PlasmaとGNOMEのみサポートとあるように、それ以外は関係ないです。そもそもLinuxでは、キーボードレイアウトは XKB(X Keyboard Extension)という仕組みで管理されており、ここが有効になっていると「入力メソッドを英語に切り替えたので、OS全体のキーボードレイアウト(XKB設定)もUS配列のキーマップに変更してください」という割り込み命令をfcitx5がシステムに対して行います。

Waylandの標準プロトコル(共通規格)では、セキュリティと設計の観点から「外部のアプリ(IMEなど)がデスクトップのキーボードレイアウトを勝手に書き換えてはならない」という強い制限があります。しかし、それでは利便性が落ちるため、独自にIME連携機能を拡張しているのが Plasma(KWin)とGNOME(Mutter)です。Hyprland環境下でこの設定がONになっていると、fcitx5は存在しない通信窓口に対して「XKB設定の上書き要請」を送り続けたり、自身の中で「XKB設定を上書き制御しているつもり」の内部状態を保持しようとします。

これら理由からチェックを外します

モジュール xcb

同じくモジュールの項目のXCBの設定ですが、「システムXKBの設定のオーバーライドを許可する」では、XCB(X C Binding)は、fcitx5が X11(およびWayland上で動くXWayland)のディスプレイサーバーと通信するためのモジュールとなっています。つまりX11(XWayland)でキーボードマップの定義自体を直接書き換える命令をしているということです。fcitx5 の XCB 側で「XKBのオーバーライド」が有効になっていると、fcitx5がHyprlandを飛び越えて XWayland側のXKB定義だけを直接書き換えてしまいます。

つまりfcitx5が制御するのではなく、Hyprland等がfcitx5を動作させるという仕組みにしたいため、チェックを外します

クイックフレーズとクリップボード

クイックフレーズクリップボード

クイックフレーズとクリップボードの項目ですが、これらはグローバルオプションであったようにSUPERを使用するキーバインドが使用されていたので空欄に設定しました。

フロントエンド

フロントエンド Waylandインプットメソッド

Waylandインプットメソッドでは、「現在実行中のアプリケーションを検出する」のみにチェックを入れてありますWayland のセキュリティの仕様上、通常アプリ(fcitx5など)は「今どのアプリ(ウィンドウ)がフォーカスされているか」を勝手に取得できません。この設定にチェックを入れてあるとD-Busの情報などを経由して、現在アクティブなアプリの識別子やプロセスを特定しようと動作します。

「キーイベント処理がされない場合はテキストを確定せずにキーイベントを転送する」は、キーボードのキーが押された際、fcitx5側でそのキー操作をハンドリング(IMEの処理として利用)しなかった場合、そのキーイベントをどう扱うかを規定する設定です。つまりここがONになっていると、未確定のテキストがまだあるんで待機している状態になってしまい、Hyprland側のキーイベントが届かないためチェックを外しています

「V2プロトコルの仮想キーボードオブジェクトを維持する(再起動が必要)」は、Wayland のinput-method-v2プロトコルにおいて、fcitx5はシステム上に「仮想キーボード(Virtual Keyboard)」という通信オブジェクトを生成してアプリに文字を送信します。仮想キーボードはスリープやフォーカスが切れてもメモリ上にこれらを維持しようとします。Hyprland側ではスリープとなったのでそれら仮想キーボードは無効と判断しますがfcitx5は維持しようとする。こういう事が起こっていたと考えられるためチェックを外しています

フロントエンド X11

XIM(X Input Method)は、X11時代の非常に古い入力プロトコルです。現在のWaylandやGTK/Qtアプリは新しい通信規格(Wayland共通プロトコルやDBus)を使うので出番はありませんが、一部の古いX11アプリやJavaアプリ(XWayland 経由)などで互換性のために利用されます。On The Spotスタイルは、日本語を入力する際、変換確定前の「あいうえお」という波線付きの文字(プレエディット)をアプリ側の描画エリアに直接埋め込んでリアルタイム描画させる方式のことです。

現代のWayland/XWayland環境において、XIMの「On The Spot」を有効(ON)にすると、

これら問題があるとされるので、これら設定はチェックを外しています

まとめ

これらの設定で2日間、「シャットダウン」や「ログアウト」せずスリープしたままで必要なときにだけスリープから復帰させて試してみました。Thunarなどではダイレクトに文字を入力する機能などがあり、SUPERの反応が遅れるとウィンドウやワークスペースの切り替えができなかった時もありましたが、余裕を持って再度SUPERを押しつつ操作したら機能しており、1秒で、ワークスペース1~3を数回切り替えるような操作でも問題なく応答するようになりました。もちろん長時間のスリープ復帰後にです。少なくともDMS+Hyprlandでは機能しています。

他の環境に変える時、例えばログアウトしてからMango WMや、あるいはPlasma/Gnomeなどをログイン画面で選んで、そのセッションで始めたらどうなるかはわかりませんが、そもそもの話、X11かWaylandかどちらかに絞って使えば正しく機能すると言う結果でもあると思うので、Hyprlandで動作しているなら他のコンポジター(NiriやMango WM)でも機能するはずですし、PlasmaやGNOMEでも動作するだろうと思っています。

ただX11が絡んでくるとわかりません。そう言う時は環境変数を追加すればたいてい解決するだろうと思います。HyprlandやNiri/Mango WMでは、config(lua)などに追加すれば良いですし、PlasmaやGNOMEではXWaylandが通訳をしているわけですからそのままでも問題ないと言えると思います。

今後どのようになるかは予想でしか無いですが、ほとんどのディストリビューション及びアプリがWaylandに対応してきている中で、未来的にはこれら設定をせずともデフォルトでWaylandに完全対応となるだろうと思います。「X11のアプリを使用する時のみ設定する」と言うこれまでと設定が逆転する事になっていくでしょう。そうなってしまえば、これら設定は完全に無意味になりますが、それまでは同じような境遇で困っていた人、あるいは設定の意味を知らずにいた人の一助にはなれたかも知れません。

Waylandへの過渡期にあると、ほぼWaylandとなった今でもどうしてもX11の名残でそれが問題になることもあるわけですから、その道中にいる私たちにとっては、生まれた時にはPS5と言う現代の若者のような便利さはありませんし、むしろ面倒くさいことが多いわけです。しかしこれら経験をして未来に至ったか、何も体験せずいきなり未来かでは意味がぜんぜん違います。

前に何処かでも書きましたが、自動運転はまだかと未来に期待する若者を横目に、タクシーに乗ればいいやんと、何が違うんだと口を紡いで思うだけで、若者に忖度するような大人にはなりたくないなとも思うわけです。未来ばかりを期待する若者に目的と手段を間違わないように伝えられる大人になりたいと思うのです。

Waylandに移っていく過程は面倒くさいことも多く、これら設定も同様の面倒臭さを含んでいますがこれらを体験できることは、それらをすっ飛ばした未来にいる人よりも絶対に意味があるはずです。過渡期の面倒を乗り越える経験は、決して無駄にはならないと思うのです。

blogカテゴリ内のタグ一覧