GUI apps with systemd
This commit is contained in:
parent
6b1133b4d4
commit
59fb8f957d
12
Makefile
12
Makefile
|
@ -5,18 +5,20 @@ source_files := $(shell find content/*.md)
|
|||
target_files := $(patsubst content/%.md,gemini/%.gmi,$(source_files))
|
||||
|
||||
.PHONY: default
|
||||
default: publish build-html
|
||||
default: publish-gemini build-html
|
||||
|
||||
gemini/%.gmi: content/%.md
|
||||
lowdown -tgemini $< > $@
|
||||
|
||||
.PHONY: build-gemini
|
||||
build-gemini: $(target_files)
|
||||
cp gemini/_index.gmi gemini/index.gmi
|
||||
gemini/index.gmi: $(source_files)
|
||||
for file in $(target_files) ; do \
|
||||
echo "=> $$file" | sed 's/gemini//' >> gemini/index.gmi ; \
|
||||
done
|
||||
|
||||
.PHONY: build-gemini
|
||||
build-gemini: $(target_files) gemini/index.gmi
|
||||
cp gemini/_index.gmi gemini/index.gmi
|
||||
|
||||
.PHONY: build-html
|
||||
build-html:
|
||||
boot publish
|
||||
|
@ -26,5 +28,5 @@ clean:
|
|||
echo ${target_files}
|
||||
|
||||
.PHONY: publish
|
||||
publish: $(target_files)
|
||||
publish-gemini: $(target_files) gemini/index.gmi
|
||||
rsync -av content/img content/extra gemini/index.gmi $^ gemini.bgenc.net:/var/gemini/
|
||||
|
|
91
content/running-graphical-user-services-with-systemd.md
Normal file
91
content/running-graphical-user-services-with-systemd.md
Normal file
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
title: Running graphical user services with systemd
|
||||
date: 2022-03-18
|
||||
---
|
||||
|
||||
> This post is day 3 of me taking part in the
|
||||
> [#100DaysToOffload](https://100daystooffload.com/) challenge.
|
||||
|
||||
I've recently switched from KDE Plasma to sway as my window manager. I had a problem with the change though: the amazing kdeconnect service weren't working!
|
||||
|
||||
My first attempt at fixing this was to just add a lines into sway config to launch it along with sway.
|
||||
|
||||
```
|
||||
exec /usr/lib/kdeconnectd
|
||||
```
|
||||
|
||||
Looks simple enough. But for some reason, `kdeconnectd` would just disappear
|
||||
after a while. It would appear to run at startup, and then an hour or two later
|
||||
I pull up the kdeconnect app on my phone and it would tell me that my computer
|
||||
is disconnected.
|
||||
|
||||
The biggest issue here was that I had no way to see why kdeconnect had failed.
|
||||
In comes systemd to save the day. Systemd is a service manager, so it will
|
||||
actually maintain the logs for these services. That means if kdeconnect is
|
||||
crashing, I can check the logs for kdeconnect to see why it crashed. I can also
|
||||
configure it to auto-restart after a crash if I want to.
|
||||
|
||||
To launch graphical applications with systemd though, you need to pass the
|
||||
appropriate environment variables to it so it knows how to launch new windows.
|
||||
I added this line to my sway config to do exactly that.
|
||||
|
||||
```
|
||||
# Pass all variables to dbus & systemd to run graphical user services
|
||||
exec dbus-update-activation-environment --all --systemd
|
||||
```
|
||||
|
||||
Next, we need to write a service files to run the application. This is easier
|
||||
than it sounds, here's the service file I wrote for kdeconnect:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Run kdeconnectd.
|
||||
After=graphical-session.target
|
||||
StartLimitIntervalSec=600
|
||||
StartLimitBurst=5
|
||||
|
||||
[Service]
|
||||
Type=basic
|
||||
ExecStart=/usr/lib/kdeconnectd
|
||||
Restart=on-failure
|
||||
RestartSec=5s
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical-session.target
|
||||
```
|
||||
|
||||
I saved this as `~/.config/systemd/user/kdeconnectd.service`. Finally, enabled it for my user with `systemctl --user enable kdeconnectd.service` and then restarted.
|
||||
|
||||
The service is configured to automatically restart on failure, but not if it
|
||||
failed more than 5 times in the last 10 minutes. Systemd also waits 5 seconds
|
||||
before trying to restart the failed service. This way if it crashes for some
|
||||
reason, it will restart. But if it keeps crashing rapidly, it won't keep
|
||||
trying to restart which could take up too much system resources.
|
||||
|
||||
I can now check how the service is doing with systemd!
|
||||
|
||||
```
|
||||
Warning: The unit file, source configuration file or drop-ins of kdeconnectd.service changed on disk. Run 'systemctl --user daemon-reload>
|
||||
● kdeconnectd.service - Run kdeconnectd.
|
||||
Loaded: loaded (/home/kaan/.config/systemd/user/kdeconnectd.service; enabled; vendor preset: enabled)
|
||||
Active: active (running) since Thu 2022-03-17 14:18:15 EDT; 1h 46min ago
|
||||
Main PID: 2188363 (kdeconnectd)
|
||||
Tasks: 6 (limit: 77007)
|
||||
Memory: 24.2M
|
||||
CPU: 2.440s
|
||||
CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/kdeconnectd.service
|
||||
└─2188363 /usr/lib/kdeconnectd
|
||||
|
||||
Mar 17 14:20:58 eclipse systemd[817]: /home/kaan/.config/systemd/user/kdeconnectd.service:6: Unknown key name 'type' in section 'Service'>
|
||||
Mar 17 15:16:11 eclipse kdeconnectd[2188363]: QObject::connect(KWayland::Client::Registry, Unknown): invalid nullptr parameter
|
||||
Mar 17 15:16:11 eclipse kdeconnectd[2188363]: kdeconnect.plugin.battery: No Primary Battery detected on this system. This may be a bug.
|
||||
Mar 17 15:16:11 eclipse kdeconnectd[2188363]: kdeconnect.plugin.battery: Total quantity of batteries found: 0
|
||||
Mar 17 15:23:26 eclipse kdeconnectd[2188363]: QObject::connect(KWayland::Client::Registry, Unknown): invalid nullptr parameter
|
||||
Mar 17 15:23:26 eclipse kdeconnectd[2188363]: kdeconnect.plugin.battery: No Primary Battery detected on this system. This may be a bug.
|
||||
Mar 17 15:23:26 eclipse kdeconnectd[2188363]: kdeconnect.plugin.battery: Total quantity of batteries found: 0
|
||||
Mar 17 15:23:26 eclipse kdeconnectd[2188363]: QMetaObject::invokeMethod: No such method KIO::StoredTransferJob::slotDataReqFromDevice()
|
||||
Mar 17 15:24:35 eclipse kdeconnectd[2188363]: QMetaObject::invokeMethod: No such method KIO::StoredTransferJob::slotDataReqFromDevice()
|
||||
Mar 17 15:57:29 eclipse systemd[817]: /home/kaan/.config/systemd/user/kdeconnectd.service:9: Unknown key name 'type' in section 'Service'>
|
||||
```
|
||||
|
||||
A bunch of warnings so far, but no crashes yet. But if it does crash again, I'll finally know why.
|
Loading…
Reference in a new issue