manjaro-swayに移行したときに詰まったことまとめ

最近i3wmからswaywmに移行した。 swaywmとは、ざっくり言うと「i3wmのwayland版」といったところ。i3wmはX.orgという昔ながらのウィンドウシステムの上で動くので、実装が煩瑣で、そのため反応が遅かったりする。waylandはそれを整理してイケイケな感じにしたもの。ただ、まだまだ開発が途中なので、うまく設定してやらないとあまりうまく動かないアプリも多い。

swayはそんなwaylandを使って動くi3wmみたいなもの。イチから開発されているらしいが、i3wmの設定ファイルと互換性をもつことを目標としているので、i3wmからの移行がとても楽なのが特長。

どんなものか体験したいひとは、まずはyay -S swayとかで入れてみよう。で、manjaro-i3だとログイン時にlightDMが開いているはずなので、そこでswayを選択すればOK。

アプリによってはうまく動かないこともあったりするので、自分の使っているアプリが行けそうかどうか試してみよう。xwaylandなどを使えば大体はうまく行くと思うが。 まあ、これは個々人の環境次第だろう。

なお、この段階で色々いじってみたい人は、Linuxのデスクトップ環境をi3からswayへ移行してみたがおおいに参考になる。 ただし、自分のようなライトユーザならmanjaro-swayにとっとと移行してしまったほうが楽な気はする。

さて、自分は上の記事を参考にして色々設定し、ある程度なれてきた。 致命的な不具合等もなかったので、移行することに決めた。

というわけで、コミュニティによって整理されているmanjaro-swayクリーンインストールしてこれに移行した。 イケイケな設定を標準でやってくれていて、ライトユーザとしてはとてもありがたい。

しかし、ユーザが設定をすでにしている場合、それとコンフリクトして問題が発生する場合もある。

それらの問題を含め、自分がsway/wayland移行時にぶつかった問題と、とその解決策を残しておく。

zshが~/.zshrcを読み込んでくれない問題

manjaro-swayでは、~/.zshenv

export ZDOTDIR=~/.config/zsh

という設定がなされている。これにより、ホームディレクトリではなく~/.config/zshにあるファイルが読み込まれるようになっている。

このファイルを読めばわかるように、ユーザごとのzshの設定は~/.config/zsh/config.d/以下に書けばよい。ワイルドカードでこのディレクトリの中身をロードしてくれるようになっているためである。00_zshrcなどの名前のファイルをつくり、そこに書き込めばOK。

なお、このように設定ファイルの名前の前に数字を入れることがあるが、これはロード順を制御するためで特に意味はない。

あと、隠しファイルにするとワイルドカードの検索から外れて読まれなくなるので注意。.zshrcをそのままコピーした場合は、名前を変えて通常のファイルに戻そう。

swayの設定が勝手にされてしまうよ問題

これも上と似たようなものである。~/.config/sway/configにイケイケ設定が書き込まれているので、これを自分なりに修正すればよい。

ファイルの構造としては、/etc/swayにある設定ファイルを順にincludeするという形になっている。

まずinclude /etc/sway/definitionsで各種定数を定義する。 たとえばモディファイアキーがWinキーに設定されているので、これを変更したい場合はこのinclude文の直後で変更をかければよい。

また、include /etc/sway/modes/*では、便利な各種モードと、そのモードを使うためのキーバインドが定義される。やめてほしい。

特に、defaultファイルでは「デフォルトモード」とでも言いたいなのだろうか、標準状態でのキーバインドが勝手に設定される。やめてほしい。

これを防ぎたい場合はこの行全体をコメントアウトするしかない(/etc/を書き換えると、すべてのユーザの設定が一括で変わってしまうのでおすすめできない)。そうすると、各種モードは自分で定義することになる。

どこで定義するかと言うと、最後の行である。最後の行では、ホームディレクトリ下のパスから設定を読み込む。これは、ユーザの設定を読み込むための行である。ここに自分のキーバインドや設定をおけばよい。上で公式の設定ファイルの一部を読み込まないように設定していた人は、そのディレクトリからコピーしてきて一部改変するのもいいだろう。

Firefox/Thunderbirdが低解像度になっちゃうよ問題

高解像度のディスプレイと低解像度のディスプレイ(正確には高DPIと低DPI)を組み合わせて使ってると起こるっぽい。 例えば、自分の環境ではThinkpad X1 carbon 2019の内部ディスプレイと、HD画質の23インチディスプレイを使っているので、まさにこの状況である。

sway output scale xでいじり、DPIを揃えるのでもよい。しかし、これだと整数倍にしかできない *1 ので使い勝手が悪い。

直接的に解決するには、 MOZ_ENABLE_WAYLAND=1という環境変数をつけて起動するようにすればよい。例えば、 bindsym $mod+F1 exec "MOZ_ENABLE_WAYLAND=1 firefox"みたいな感じ。

ターミナルとかからFirefoxを開くとエラーが出るよ問題

自分のよくやる作業だと、Jupyter notebookを開いたときとか、cargo doc --openしたときに発生する。

Firefox is already running, but is not responding. To use Firefox, you must first close existing Firefox process, restart your device, or use a different profile.

みたいな感じのエラーが出る。 このスレッドで議論されているが、これは環境変数としてMOZ_DBUS_REMOTE=1と設定しておけば回避できる。

なので、.bashrc.zshrcあたりにこの設定を書いておこう。

以上。詰まった箇所を解決できるごとにこの記事は更新する。

*1:整数倍以外にもできないことはないが、整数倍で描画したものを線形補間して拡大して表示するため、画像が荒くなる