swayのすゝめ
Swayというtiling Wayland compositorをご存知でしょうか。所謂デスクトップ環境というものです。Wayland compositorというくらいですから、Waylandを前提としたもので、X11で動作するものではありません (X11のアプリケーションを動かす事はできます)。
何年も開発が続いていましたが、2019年の3月くらいに1.0がリリースされました (indiegogoで募った資金で一箇所に集まってのハッカソンを経て)。日本語では情報が少ないので、自分がはまったSwayの設定などに関して書きます。
SwayはどういうWayland compositorなのか
Swayは、基本的に多くの操作がキーボードのみで行えるようになっています。ソフトウェアを起動する、アプリケーションのウィンドウの配置を変える (タブにしたりタイル状に並べたり)、アプリケーションのウィンドウのサイズを変更する、Swayの設定ファイルを再度読み込んだり、Swayを終了したり、全てキーボードのみで操作可能です。コンピュータで行う主な作業がターミナルでコードを書くことような人には、とても使いやすいデスクトップ環境であると思います。
私はエディタにvimを使っていますが、vimと同様のkey bindingで色々な操作が行えるのが素晴らしいです。
インストールする
この記事では、インストールに関して詳しくは説明しません。Linuxのディストリビューションによっても異なりますので、公式のサイトを見つつ、使っているLinuxのディストリビューションのWikiなどを見てみることをお薦めします。
使いやすいように設定する
Swayはi3と互換性のあるWayland compositorです。もし既にi3を使っている方であれば、多くの設定がそのまま使用できるようです。
私はi3を使っていた訳ではないので、デフォルトの設定ファイルから始めました。/etc/sway/config
などにあると思われる設定ファイルを、~/.config/sway/config
にコピーします。
Swayは、デフォルトの設定ファイルのままで起動しても何をどうして良いのかよく分かりません。起動するとデスクトップ環境が表示されますが、クリックするメニューもなにありません。
まず一番最初に設定するべきなのが、modifier
です。キーボードによる全ての操作を、modifier
と他のキーを組み合わせて行うことになります。私は、super (Mod4)
をmodifier
としています。
set $mod Mod4
次に設定するべきなのが、ターミナルを起動するためのキーを決めることです。ターミナルを起動するのも、modifier
と指定したキーを押すことで操作します。デフォルトではt
に設定されています。
bindsym $mod+t exec $term
最後に、上で設定したキーが押された際に起動するターミナルを指定します。私はkitty
を指定しています。
set $term kitty
ここで一旦、設定ファイルに行った変更を反映させるために、設定ファイルを再度読み込みましょう。デフォルトだと、modifier+Shift+c
で設定ファイルを再度読み込めます。
早速modifier+t
などのターミナルを起動するためのキーを押して、指定したターミナルが起動するか確かめましょう。無事指定したターミナルが起動したら、とりあえず安心です。最悪何をして良いか分からなくなっても、ターミナルにアクセスがあればどうにかなります。
私の設定ファイルはこちらになります。ウィンドウの枠の色などは、Nordを参考にしています。
Waybar
Swayは、swaybar
というソフトウェアを使って、所謂デスクトップの一番上や下に表示されるメニューのようなものを表示します。
swaybar
そのものはとても単純で、標準入力から改行を区切りとした文字列を渡すと、それらが表示されるようです。流石にそれだと色々面倒なので、私はWaybarというソフトウェアを使ってメニューバーを設定しています。Waybar
は設定ファイルを持っており、その設定ファイルで色々指定するとそれに従った形でswaybar
を使ってメニューバーを表示してくれます。
Waybar
は、~/.config/waybar
ディレクトリ以下にconfig
とstyle.css
という設定ファイルを期待します。config
では何を表示するか、style.css
ではconfig
で指定したものの見た目などを設定します。基本的にはデフォルトのままでもそれなりに綺麗な見た目になりますが、私は必要の無いものを削除して、時間と日付の表示を変更しました。
私のconfigとstyle.cssです。環境によっては文字化けしているかも知れませんが、Font Awesomeの文字を使っています。Font Awesomeをインストールすると正しく表示されると思います。
tips
このセクションでは、Sway
を使っていて学んだことを書きます。
Waylandをサポートしたものを使う
Sway
はWayland compositorです。XWayland経由でX11のアプリケーションも使用できますが、Waylandだけで完結する方が綺麗なので、出来るだけWaylandをサポートしたソフトウェアのみを使うようにしています。以下が、その過程で問題があったソフトウェアの一覧とその解決策です。
ターミナル
私はずっとGnome Terminalを使っていました。タブも日本語入力も対応していて素晴らしいターミナルです。Gnome TerminalはWaylandをサポートしているのでそのまま問題なく使えます。
ただ、Gnomeの外でGnomeに関に対する依存も減らしたかったので、kittyを使っています。GPUを利用するターミナルなので、それなりのビデオカードを搭載している環境であれば、それなりの恩恵を受けられるかも知れません。kitty
は、ウィンドウの枠やタイトルバーを排除でき、ターミナルだけを表示できます。それが気に入っています。
rofi
最初に引っかかったのがランチャーです。デフォルトでdmenu
が使われるような設定になっていますが、上手く動作しませんでした。私はrofiを使うことで解決させました。
set $menu dmenu_path | rofi -dmenu | xargs swaymsg exec
rofi
は、dmenuに渡すデータをそのまま渡して動作するモードがあり、それを使うとそのままdmenu_path
からpipeしたデータが使えます。UIも、themeをそれなりのものにすれば綺麗です。
Redshift
Redhatのあれではなく、こちらのRedshiftです。RedshiftはWaylandに対応していませんが、wlrootsで動作するようにforkされたものがあります。Arch Linuxの場合は、redshift-wlr-gamma-controlがそのforkを使ったパッケージです。このforkを使うと、Sway
の環境でRedshift
が動作します。
ちなみにSway
は、freedesktop.orgが定めたデスクトップ環境におけるautostartの方法をサポートしていません (~/.config/autostart
ディレクトリ以下に置いたスクリプトをデスクトップ環境の起動時に自動で実行するもの)。Sway
の作者の一人であるDrew DeVaultさんによると、サポートする予定もないそうです。
この場合、一番単純にRedshift
を起動する方法は、Sway
の設定ファイルに書くことです。
exec redshift
screen lock
ある程度の時間の間にコンピュータを使っていない場合は、自動でスクリーンをロックして、アンロックする際にはパスワードが必要であって欲しいものです。swayidleとswaylockでそれが実現できます。
私は5分間何もしていない場合に、スクリーンロックをかけるようにしています。こちらもRedshift
同様、autostartの方法がないのでSway
の設定ファイルに書いています。
exec swayidle -w \
timeout 300 'swaylock -f -c 000000' \
timeout 301 'swaymsg "output * dpms off"' \
resume 'swaymsg "output * dpms on"' \
before-sleep 'swaylock -f -c 000000' \
swaylock
がまたハードコアで、パスワードを入力する画面が必要最低限でとてもかっこよいです。
X11に依存したアプリケーション (例: ChromeやElectronを使ったもの)
私は明示的に~/.zshrc
にexport GDK_BACKEND=wayland
としているので、アプリケーションによっては正しく起動しません。例えばChromeやElectronを使用しているアプリケーションです。その場合は、X11を使う旨を明示的に示した上でアプリケーションを起動させましょう。
$ GDK_BACKEND=x11 code
GUIのあるJavaのアプリケーション (例: Android Studio)
Android Studioは何故か正しく描写されません。以下のように起動すると正しく描写されます。
$ _JAVA_AWT_WM_NONREPARENTING=1 /path/to/studio.sh
gnome-keyring-daemonを使ったsshのprivate keyの管理
私は、Sway
に移行する前はGnome
を使っていました。Sway
に移行して面倒だったのが、git pull
する時などに毎回最初にsshのprivate keyのpassphraseを聞かれることでした。原因は、以前はGnome
が起動する際にgnome-keyring-daemon
が自動で起動していたのですが、Sway
では意図的に起動させない限り自動で起動しないことにあります。つまり、Sway
が起動するタイミングでgnome-keyring-daemon
を起動させれば問題は解決します。
gnome-keyring-daemon
を正しく起動させるのは結構複雑で、最初に特定のオプションの元で起動させた後にevalするようです。最終的には、Linuxが起動した後にコンソール経由でログインした際にgnome-keyring-daemon
が起動するようにして、~/.zshrc
でSSH_AUTH_SOCK
をexportすることにしました。
コンソール経由でログインした際にgnome-keyring-daemon
が起動するようにする方法は、こちらを参考にしてください。
/etc/pam.d/login
#%PAM-1.0
auth required pam_securetty.so
auth requisite pam_nologin.so
auth include system-local-login
# この下の行を追加
auth optional pam_gnome_keyring.so
account include system-local-login
session include system-local-login
# この下の行も追加
session optional pam_gnome_keyring.so auto_start
その後に、~/.zshrc
などのログインの後に実行されるファイルにて、以下を実行します。
eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)
export SSH_AUTH_SOCK
これを~/.config/sway/config
でやってしまうと、exportがSway
のプロセスで実行されるようで、意図した効果が得られませんでした。
trayは開発中
現時点 (2019年5月5日) では、Sway
はまだtrayに対応していません。私は日本語入力にFcitxを使用していますが、trayにアイコンが表示されないだけで正しく動作はしています。
trayがなくて一番困っているのは、新しいwifiのアクセスポイントを利用する場合です。swaybar
で表示されているwifiのアイコンをクリックしても電波の強さが表示されるだけの設定になっているため、苦し紛れにnmcliを使っています。
misc
その他、Sway
に関係していて、私が興味のあるものを書いておきます。
wlroots
Sway
のチームは、Sway
を開発する過程で、wlrootsというWayland compositorを書くためのライブラリも開発しています。実際に、現在のSway
はwlroots
を使って実装されています。
まだまだWayland compositorが少ない今、自分で作りたい場合はwlroots
を使うと色々楽だと思います。wlroots
の前はwlcが使われていました。wlc
はとても簡潔なので、Waylandの仕組みを理解するためにコードを読むのは良いでしょう。
wio
Sway
の開発者の一人であるさんは、最近WioというSway
とは別のWayland compositorを発表しました。Plan 9のデスクトップ環境のクローンのようです。Sway
はどうなるのかなと少し不安になりました。