Swayではgraphical-session.targetを明示的に開始する必要がある
systemdの特殊なユニットに graphical-session.target と graphical-session-pre.target がある。これはユーザーサービスの一部で、WaylandやX11などのグラフィカルな環境が利用できる状態と連動する。このターゲットはユーザーが直接開始することは制限されており、他のユニットから必要とされたときに開始される。
Sway - ArchWikiでは、sway-session.target を以下の内容で作って、それを sway/config で実行するように記述している。
[Unit]Description=Sway compositor sessionDocumentation=man:systemd.special(7)BindsTo=graphical-session.targetWants=graphical-session-pre.targetAfter=graphical-session-pre.target実行するコマンドはこのように。/etc/sway/config.d/50-systemd-user.conf で systemctl import-environment などを実行していて、systemdで環境変数が伝播するしくみの影響もあるので、コマンドはコンフィグの最後に置くのがいいと思う。
include /etc/sway/config.d/*
exec_always systemctl --user start sway-session.targetところで sway-session.target に RefuseManualStart=yes と RefuseManualStop=yes を入れようとしたが、そうすると graphical-session.target を起動する手段がなくてうまく動作させられなかった。具体的にはこのように書いた。
[Unit]BindsTo=graphical-session.targetRefuseManualStart=yesRefuseManualStop=yes
[Install]WantsBy=graphical-session.targetsystemdユニットの順序を制御するで調査しているように、これで graphical-session.target を開始したとき sway-session.target も開始してくれそうに思うが、Swayの場合はユーザーにログインして sway コマンドを実行するまでは graphical-session.target が開始とならないので、ユーザーセッション開始までにユニットの条件が満たされないとだめなのかもしれない。
i3にはイシューがあってacceptされていた。