「CrostiniにArch Linuxを導入」で導入したArch LinuxではWaylandでの日本語入力はできない。できないと不便なので、ChromeOS IMEsをcros_im経由でWaylandでも利用できるようにする。ただし、ElectronとGTKのアプリ以外では使えない。
chromiumosの「cros_im」とQiitaの「ChromeOS IME on Crostini」を参考にした。
croetini-imeを有効化
chrome://flags/でcrostini-ime-supportなどをオンにする。ChromeOSのバージョンでキーがやや異なる。Qtサポートもあるみたい。
cros_im をビルド
便利なパッケージなどはないので、自分でソースを弄りながらビルドする。
Crostini上のArch Linuxに入って、コンパイルに必要なパッケージをインストール
$ yay -S clang gtest gtk3 gtkmm3 wayland meson pkgconf xorg-server-xvfb weston base-devel qt5-base qt5-xcb-private-headers $ git clone https://chromium.googlesource.com/chromiumos/platform2 $ cd platform2/vm_tools/cros_im
ソースコードの修正
$ vim test/run_tests.py
run_tests.pyの88行目
# ここを ["dpkg-architecture", "-q", "DEB_BUILD_MULTIARCH"] # こうする(pythonでsubprocessを呼び出しているだけなので同じことができれば方法は何でも良い) ["gcc", "-dumpmachine"]
ビルド&テスト
$ meson build && cd build && ninja $ meson test
また、参考にしているDebianの場合とArch Linuxはディレクトリ構成が違うので、このあとも少し方法が異なる
# Debianでは /usr/lib/*/libgtk-3-0/gtk-query-immodules-3.0 im-cros-gtk3.so > dev-immodules.cache だが、ディレクトリ構成が異なるので以下のようにする。 $ /usr/bin/gtk-query-immodules-3.0 im-cros-gtk3.so > dev-immodules.cache $ export GTK_IM_MODULE_FILE=$(pwd)/dev-immodules.cache
インストール
$ meson configure --prefix /usr && sudo meson install $ sudo /usr/bin/gtk-query-immodules-3.0 --update-cache
以下のコマンドの結果が「GTK_IM_MODULE=cros」とならない場合はFcitx Mozcなどの残骸がある。これがあるとcros_imが動かないので原因を潰す。(例えば、~/.config/environment.d/im.confなど)
$ env | grep -E 'XMOD|_IM'
US配列のキーボードを使っている場合
Redditの投稿を参考にして対処(LinuxとChromeの日本語の切り替えが干渉する問題)
以下の内容の ~/.config/systemd/user/sommelier@.service.d/cros-sommelier-override.confと ~/.config/systemd/user/sommelier-x@.service.d/cros-sommelier-x-override.confを作成
[Service] Environment="SOMMELIER_ACCELERATORS=Super_L,<Alt>bracketleft,<Alt>bracketright,<Control>space,<Control><Shift>space"
$ mkdir -p ~/.config/systemd/user/sommelier@.service.d/ $ vim .config/systemd/user/sommelier@.service.d/cros-sommelier-override.conf $ mkdir -p ~/.config/systemd/user/sommelier@.service.d/ $ vim .config/systemd/user/sommelier-x@.service.d/cros-sommelier-x-override.conf