🐧

Wayland環境でChromiumベースのソフトをいい感じに使う

2023/12/27に公開

この記事はKCS AdventCalendar18日目の記事です
←17日目 18日目→

大遅刻してクリスマスを超えてしまいました、Compassです。
本当は別のことで書こうと思っていたのですが、うまく行かなかったので適当な内容で書いてお茶を濁すことにしました。まあうまく行かなかったよ記事でも良かったんですが...

導入

皆さんはWayland使っていますか?個人的にはタッチパッドジェスチャーが使えるのが嬉しいです。しかし、ここで問題があります。Chromium系のソフトウェアの対応が不完全なことです。ここの記事では、ChromiumとElectron系のソフトの代表としてVisual Studio Codeを取り上げ、Wayland Nativeでいい感じに使えるところを目指したいと思います。

環境
$ uname -mr
6.5.13-6-MANJARO x86_64
$ plasmashell -v
plasmashell 5.27.10
$ kf5-config -v
Qt: 5.15.11
KDE Frameworks: 5.113.0
kf5-config: 1.0

修正方法

Chromium

普通に起動してみましょう。特に何も問題なさそうに見えます。しかし、普通に起動しただけではXWaylandで起動しており、タッチパッドジェスチャーで拡大したりすることができません。このまま使うのでも大きな問題はないと思います。が、この記事の本題としてWaylandで動作させてみたいと思います。Waylandで動作させるには、chrome://flagsを開き、Preferred Ozone platformをWaylandにすればWayland Nativeで起動させることができます。トップページでピンチアウトしてみると、拡大されることがわかります。一見これで終わりに見えますが、重大な問題があります。それはインプットメソッドが使えないことです。日本語話者においては死活問題でしょう。これを修正するには、引数に--enable-wayland-imeを入れてあげます。

chromiumを起動する例
$ chromium --enable-wayland-ime

これで起動するとIMEも正常に使えるようになります。さらに、カーソルがなんだか簡素なものになってしまっているでしょう。これについては後ほど修正方法を述べます。

VS Code

こちらについてもIMEが使えない等の問題が生じます。以下のようにフラグをつけて実行します。

VS Codeを起動する例
$ code --ozone-platform-hint=wayland --enable-wayland-ime

これでWayland Nativeに実行することができます。しかし、これでもWayland上ではGlobal Menuが使えないなどの問題が残ります。(これは多分修正を待つしかないです。まあLinux上のGlobal Menuは複雑らしいので仕方ないですね...[1])

もっと簡単に使いたい

デスクトップエントリを修正する方法

しかし、これではGUIソフトなのに毎回コマンドラインから起動する必要があってちょっと面倒ですね。そのためには、デスクトップエントリを編集する必要があります。例としてChromiumを挙げます。

$ cp /usr/share/applications/chromium.desktop ~/.local/share/applications

でデスクトップエントリをコピーしてきます。そして、Exec行を探します。そして、

+Exec=/usr/bin/chromium %U
-Exec=/usr/bin/chromium %U --enable-wayland-ime

としてenable-wayland-imeフラグをつけます。その後、

$ update-desktop-database ~/.local/share/applications

として再読込させます。

このようにした後、GUI環境からChromiumを起動させると、Wayland NativeでIMEが使えるはずです。また、VS Codeも同様に編集すればできると思います。

(Electron限定)設定ファイルをいじる方法

${XDG_CONFIG_HOME}/electron<バージョン番号>-flags.confに、上のコマンドラインフラグを1行ごとに入れていく(空行不可らしい)と、うまく動作するらしい(未検証)。ただし、Arch Wikiによると、

公式リポジトリ内の Electron のパッケージと、それらの設定ファイルを使用するパッケージでのみ機能します。

とのことです(例えばslack-desktopならslack-electrondiscordならdiscord_arch_electronなど)。

Discord等の画面共有について

DiscordもElectronベースのアプリケーションですが、Wayland環境での画面共有は0.0.39現在できません。これはWayland上で使用可能な画面録画の方法xdg-portalScreenCastに対応していないためです。(ちなみにChromium系各種ブラウザは対応しています。テストサイト)
解決策としては、

  • WebCord(カスタムクライアント)を使う
  • OBS等で仮想カメラを作る
  • xwaylandvideobridgeを使う

があります。詳しくはArch Wikiを参照してください。

この中であればxwaylandvideobridgeがいいかなと思ったのですが、何故かGitLabのアーティファクトが消えていたので試せませんでした...試せたら追記しようと思います。

カーソルが簡素になってしまっている場合の対処法

KDE環境での直し方です。まずは自分の使っているテーマを確認しましょう。ここではbreeze-darkを使っていると仮定します。その後、/usr/share/icons/内で自分の使っているテーマのカーソル画像が入っているcursorsディレクトリを探します。今回は/usr/share/icons/breeze_cursor/cursorsにありました。そうしたら、以下のコマンドを実行してください。

$ mkdir -p ~/.icons/default
$ cp -r /usr/share/icons/breeze_cursor/cursors ~/.icons/default

としてください。そうしてChromium(系)ソフトウェアを再起動すればアイコンが通常のものになっていると思います。

脚注
  1. https://stackoverflow.com/questions/75215820/how-to-implement-global-menu-support-in-c-on-linux ↩︎

  2. https://twitter.com/discord_jp/status/1631175554169810945 ↩︎

Discussion