Wayland環境に移行してHyprlandを使ってみて3日程度経ったので感想を書く

ふと思い立って(テスト前に掃除したくなるやつ)、一度試して挫折したwayland環境移行を試してみようと再度やってみたら、割と使えそうな感じだったので常用目指して真面目に設定してみた。

今回はi3ベースのswayじゃなくてHyprlandというどっちかというとAwesomeに近いcompositorを使ってみた。ちなみにディストリはGentoo Linuxだ。

Hyprlandは割とビジュアルにこだわっていて、ウインドウを開いたり移動したりするとウニョウニョ動いて楽しい。 Hyprlandの大きな利点は、独自のxdg-desktop-portalが準備されていて、wayland環境でもウインドウ単位のスクリーンシェアがちゃんと動作すること。 swayだとxdg-desktop-portal-wlrを使うことになるんだが、これはモニタ単位のスクリーンシェアしか出来ない。これが不便だったので常用するのが辛かった。 一方でHyprlandは、xdg-desktop-portal-hyprlandが利用できて、このおかげでウインドウシェアが動く。(まあ、ハマりどころは多々あるが)

youtu.be

スクリーンシェアについて

現状、Hyprlandでスクリーンシェアをやるには以下のものが要る。

どうも起動の順番で上手く動かない時があるが、基本的にはpipewireのサービスとwireplumberのサービスを動かして、xdg-desktop-portal-hyprlandとxdg-desktop-portalの両方を動かす必要がある。xdg-desktop-portal-gtkはなんか勝手に起動した。

加えて、Hyprland起動時に環境変数を設定しておく。

env = QT_QPA_PLATFORM,wayland
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,"1"
env = GTK_THEME,Adwaita:dark
env = MOZ_ENABLE_WAYLAND,1
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland
env = XDG_CURRENT_DESKTOP,Hyprland
env = _JAVA_AWT_WM_NONREPARENTING,1

exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=hyprland XDG_SESSION_TYPE=wayland
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP

XDG_ほげほげの部分がスクリーンシェアに必要らしい。多分xdg-desktop-portalが詳細実装を探す時に使ってる。 後、_JAVA_AWT_WM_NONREPARENTINGが無いとIDEAの画面に何も出なくなる。これは辛い。 後はQT系アプリの調整とか、GTKのテーマ設定とか、Firefoxでwayland nativeの動作を有効にするとか、その辺のための設定。

最後のexec-onceはdbusとsystemdのuser設定に環境変数の内容を通知しておく。これでsystemdとかdbus回りで起動しているプロセスに環境変数が適用されるはず。

また注意点として、ディスプレイのcolor depthで10bit colorを利用しているとキャプチャが上手くいかないらしい点と、Xwayland経由のアプリケーションからだとウインドウが見えない点があるが、まあよく使う範囲では許容できる。

参考:

日本語入力(IME)

元々ibusibus-skkを使っていたのだが、これはwayland nativeなウインドウで日本語入力が効かないことがよくあった。 wayland compositor側のprotocol実装の不足かibus側のprotocol実装の不足のどちらかのせいだったと思う。

で、今回はfcitx5に乗り換えてみたところ、割とちゃんと日本語入力できる様になった。しばしば複数回変換した時の候補ウインドウがちゃんと出ないアプリがあるが、そこまで困らなくなった。一応、そういう時のためにホットキーでneovimを起動して書いた文字列をclipboardに即コピーできる様にしてあるが。 (Gentooは基本のリポジトリにfcitx5が無いので、サードパーティのoverlayを使う必要があるのが面倒だった)

Steam

自分はSteamのゲームも基本的にLinuxを使ってるが、昔Swayで試そうとした時はエラーになって駄目だった。 最近はSwayでもHyprlandでもちゃんと動作する様だ。 Steam自体はwayland nativeではなくXwayland経由で動く。

少なくともONIとADOFAIとサイバーパンク2077は動作確認できた。

動作感と現状の問題点

三大懸念だったスクリーンシェア、日本語入力、Steamが割と何とかなったので、数日使ってみて、動作感や安定性などを確認してみた。

全体的な動きとしてはwaylandの方が軽いというか、X上でpicom使うよりスムーズに動いている様に思う。 mpvでの動画再生とかもwaylandの方が安定していて、高画質動画に更にshaderかけたりした時でもdropが発生しにくくなった。

Firefoxはwayland対応が割とちゃんとしているのかXより動作が軽いしメモリ消費が少なくなった様に思う。

一方で、やはり全体的に微妙な不安定さがある。 しばしば特定のウインドウに対してキーボード入力が効かなくなることがある。ウインドウを閉じるホットキーも効かなくなるので、そうなると外からkillするしかない。

また、スクリーンロック中によく落ちたり固まったりする。特に長時間放置してdpms offが走ってディスプレイが切れた時に上手く復帰できないことが多い。変な固まり方をするとsshで入って再起動するしかなくなることがあった。swayidleとswaylockを使ってるが、これは別にswayに依存している訳ではないはずなので、多分Hyprland側がこなれていないんだろうと思う。

後は、スクリーンシェアの画質が良くないところも問題と言える。もうちょっと綺麗に取る方法無いのだろうか。pipewireとかwireplumber側の設定で調整できんのかな。この辺りが良く分からん。

総じてまだハマるところは色々あるが使えなくはないな、という感じ。

見た目自体は良いしキビキビ動くのでもうちょっと使ってみようと思う。何とかなりそうならメインPCはwaylandのまま頑張ってみたい。