1

剛更新了桌面,發覺在 Telegram Desktop 上無法輸入中文。當然可以使用耐性去慢慢在其他地方打字剪貼,但速度實在太慢,何況明明簡單的打字問題,正常人又怎會甘心?

思前想後,決定去報告問題。然後在 ilya-fedin 大大的協助下,發現較新版本的 iBus 會參考 $WAYLAND_DISPLAY 參數決定 socket 的名稱,而 Qt 暫時還未適應這個轉變,而引用了錯誤的 iBus socket,導致無法收到任何 iBus 的輸入,而只能顯示英文字母。

同樣的問題應該適用於 .deb / .rpm / tarball 安裝的任何 Qt 軟件。

為甚麼使用 Flatpak 沙盒包裝反而沒有問題?

神奇地,經過測試,發現使用 Flatpak 沙盒包裝)的 Telegram Desktop 反而不受影響。當初明明 Flatpak 對於 iBus 有水土不服,為甚麼現在反而克服了?

原來為了解決 Flatpak 環境的輸入問題,Flatpak 修改了軟件與輸入法溝通的特性,不會透過正常的 org.freedesktop.portal.IBus 介面接受輸入,改用 org.freedesktop.IBus.Portal 介面。

除了使用 Flatpak 打包外,你也可以用環境參數IBUS_USE_PORTAL=1強迫普通 Linux 包裝軟件轉用相同的特性 [參考],Qt 也已經引入相關的特性。這個大概是為了方便除錯測試的功能,意外地能幫上忙。

解決方法

為了一次過解決所有 Qt 軟件的輸入問題,可不能逐個 .desktop 檔案修改加入IBUS_USE_PORTAL=1吧,比較正當的方法是將IBUS_USE_PORTAL=1加入全域參數,所有 Qt 軟件一起受惠。

經過一點閱讀,最穩妥的做法是使用 freedesktop.org標準用戶 session 環境設定檔位置 $HOME/.config/environment.d/*.conf去處理︰

mkdir -p $HOME/.config/environment.d
echo "IBUS_USE_PORTAL=1" > $HOME/.config/environment.d/99-ibus-use-portal.conf

加入之後重啟電腦(不知為甚麼,單純登出登入無用),再進入 Telegram Desktop 或者其他 Qt 軟件,你便能正常輸入中文︰

Image for post

Image for post

中文字能出來了!

希望這個方法也能解決你的問題。


杨坚强
2 声望2 粉丝

热爱技术