Skip to content

Swayではgraphical-session.targetを明示的に開始する必要がある

systemdの特殊なユニットに graphical-session.targetgraphical-session-pre.target がある。これはユーザーサービスの一部で、WaylandやX11などのグラフィカルな環境が利用できる状態と連動する。このターゲットはユーザーが直接開始することは制限されており、他のユニットから必要とされたときに開始される。

Sway - ArchWikiでは、sway-session.target を以下の内容で作って、それを sway/config で実行するように記述している。

[Unit]
Description=Sway compositor session
Documentation=man:systemd.special(7)
BindsTo=graphical-session.target
Wants=graphical-session-pre.target
After=graphical-session-pre.target

実行するコマンドはこのように。/etc/sway/config.d/50-systemd-user.confsystemctl import-environment などを実行していて、systemdで環境変数が伝播するしくみの影響もあるので、コマンドはコンフィグの最後に置くのがいいと思う。

Terminal window
include /etc/sway/config.d/*
exec_always systemctl --user start sway-session.target

ところで sway-session.targetRefuseManualStart=yesRefuseManualStop=yes を入れようとしたが、そうすると graphical-session.target を起動する手段がなくてうまく動作させられなかった。具体的にはこのように書いた。

[Unit]
BindsTo=graphical-session.target
RefuseManualStart=yes
RefuseManualStop=yes
[Install]
WantsBy=graphical-session.target

systemdユニットの順序を制御するで調査しているように、これで graphical-session.target を開始したとき sway-session.target も開始してくれそうに思うが、Swayの場合はユーザーにログインして sway コマンドを実行するまでは graphical-session.target が開始とならないので、ユーザーセッション開始までにユニットの条件が満たされないとだめなのかもしれない。

i3にはイシューがあってacceptされていた。