mirror of
https://github.com/swaywm/sway.git
synced 2024-11-26 09:51:29 +00:00
Updated Systemd integration (markdown)
parent
a79200892b
commit
7171209083
|
@ -6,6 +6,7 @@ In order to enable this integration we need to configure a sway session target t
|
||||||
|
|
||||||
Here is the required sway-session.target unit, that must be placed either in `~/.config/systemd/user/sway-session.target` for the user, or globally in `/etc/systemd/user/sway-session.target` for all users (distributions would place it in /usr):
|
Here is the required sway-session.target unit, that must be placed either in `~/.config/systemd/user/sway-session.target` for the user, or globally in `/etc/systemd/user/sway-session.target` for all users (distributions would place it in /usr):
|
||||||
```
|
```
|
||||||
|
# ~/.config/systemd/user/sway-session.target or /etc/systemd/user/sway-session.target
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=sway compositor session
|
Description=sway compositor session
|
||||||
Documentation=man:systemd.special(7)
|
Documentation=man:systemd.special(7)
|
||||||
|
@ -20,7 +21,51 @@ exec systemctl --user import-environment
|
||||||
exec systemctl --user start sway-session.target
|
exec systemctl --user start sway-session.target
|
||||||
```
|
```
|
||||||
|
|
||||||
So, when the user logs in via sddm or getty², the --user manager is automatically started (by pam_systemd and logind), and then when sway runs it will update the environment variables of the --user manager, and start the target, which will instruct systemd to start and supervise all the other services with the appropriate environment. You can have both wayland or X11 services started like this.
|
So, when the user logs in via sddm or getty, the --user manager is automatically started (by pam_systemd and logind), and then when sway runs it will update the environment variables of the --user manager, and start the target, which will instruct systemd to start and supervise all the other services with the appropriate environment. You can have both wayland or X11 services started like this.
|
||||||
|
|
||||||
|
## Running sway itself as a --user service
|
||||||
|
|
||||||
|
Sway 1.0 supports running as a systemd --user service itself. The unit file is simple enough:
|
||||||
|
|
||||||
|
```
|
||||||
|
# ~/.config/systemd/user/sway.service or /etc/systemd/user/sway.service
|
||||||
|
[Unit]
|
||||||
|
Description=sway - SirCmpwn's Wayland window manager
|
||||||
|
Documentation=man:sway(5)
|
||||||
|
Before=graphical-session.service
|
||||||
|
Wants=graphical-session-pre.service
|
||||||
|
After=graphical-session-pre.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
EnvironmentFile=-%h/.config/sway/env
|
||||||
|
ExecStart=/usr/bin/sway
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=1
|
||||||
|
TimeoutStopSec=10
|
||||||
|
```
|
||||||
|
again, you can choose to put it in `/etc/systemd/user/` or `~/.config/systemd/user/`. This service file will load environment variables from `~/.config/sway/env`, a [KEY=VALUE file](https://www.freedesktop.org/software/systemd/man/systemd.exec.html#EnvironmentFile=). That's a good place to put variables such as `_JAVA_AWT_WM_NONREPARENTING=1` or `CLUTTER_BACKEND=wayland` (note: no need for export there, that is not a shell file]).
|
||||||
|
|
||||||
|
Now, you want your login manager to start the service via systemd, and not sway directly. In order to do that, it's easiest to just create a new wayland session in `/usr/share/wayland-sessions/sway-session.desktop`:
|
||||||
|
```
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Sway Service
|
||||||
|
Comment=SirCmpwn's Wayland window manager as a systemd service
|
||||||
|
Exec=sway-service.sh
|
||||||
|
Type=Application
|
||||||
|
```
|
||||||
|
and put the sway-service.sh somewhere on your PATH (`/usr/local/bin/sway-service.sh` should be fine):
|
||||||
|
```
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
# first import environment variables from the login manager
|
||||||
|
systemctl --user import-environment
|
||||||
|
# then start the service
|
||||||
|
exec systemctl --wait --user start sway.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Next time you login via gdm/sddm just choose "sway-service", instead of just "sway".
|
||||||
|
|
||||||
|
|
||||||
## Example service units for other programs
|
## Example service units for other programs
|
||||||
|
|
||||||
|
@ -86,5 +131,4 @@ WantedBy=sway-session.target
|
||||||
|
|
||||||
## End notes
|
## End notes
|
||||||
|
|
||||||
- ¹ Gnome and KDE might not have graphical-session.target integration on all distributions
|
- ¹ Gnome and KDE might not have graphical-session.target integration on all distributions (yet)
|
||||||
- ² sway is not supervised by the --user manager yet
|
|
Loading…
Reference in a new issue