Run systemd units on Artix Linux with runit using systemd-shim
Use systemd-shim on Artix Linux with runit to manage selected systemd units via systemctl without replacing the init system. Install, enable, verify, and understand limits and rollback.
09 Jul 2026, 22:28 UTC

You want to use a package that ships a systemd unit without replacing runit as init. On Artix Linux the practical way to do that is systemd-shim, a small daemon that translates a limited set of systemd commands and unit files into runit service management. It keeps runit in control of boot and core services while letting you manage selected packages with familiar systemctl syntax.
Desired outcome
Install artix-systemd-shim, start the shim daemon, and be able to enable and check a systemd unit such as sshd via systemctl while the system remains runit-based. The shim does not replace runit; it sits alongside it and only handles units you explicitly manage through it.
Prerequisites
- Artix Linux with runit as the active init system. The shim is designed for runit-based Artix profiles.
- Root access for package installation and service management. Commands below assume sudo.
- pacman repositories enabled and a working network for package install.
Do not enable the shim if you already manage the same service via runit svcs. Overlapping control leads to duplicate starts and stop failures.
Install and enable the shim
Run the following in a terminal as root.
sudo pacman -S artix-systemd-shimThis installs the shim daemon and the systemd-shim service unit used by the shim itself.
Enable and start the shim daemon:
sudo systemctl enable --now systemd-shimThe enable step creates the runit service link for the shim so it starts on boot. The --now flag starts it in the current session.
Verify the shim is running and usable
Check that the shim process is present:
ps -C shimdA non-empty result indicates the daemon is running. If nothing is returned, the shim service did not start.
Test with a simple system service that is not already managed by runit. Replace with a real unit you want to manage via shim:
sudo systemctl enable --now <service-name>Then query status:
systemctl status <service-name>The shim translates enable/start/stop/status to runit operations. Check the corresponding runit service directory under /etc/runit/sv to confirm the service was created and is being supervised.
Limitations you need to plan for
- Feature subset only. Unit files, basic sockets and timers are supported. Advanced systemd features such as Requires=, After=, complex dependency graphs, and cgroup v2 integration are not implemented.
- No user services. systemctl --user is not supported by the shim.
- Conflict risk. If runit already supervises a service, enabling the same unit via shim can cause two supervisors to fight over the same pid and log files.
- Overhead and surface area. The shim adds a daemon and expands the attack surface compared to pure runit.
Use the shim for isolated, self-contained services with simple ExecStart and no ordering dependencies.
Recovery options
If a service fails to start or conflicts appear:
- Stop and disable the shim-managed unit:
sudo systemctl disable --now <service-name>- Stop the shim daemon and prevent it from starting on boot:
sudo systemctl disable --now systemd-shim- Remove the package if you no longer need compatibility:
sudo pacman -Rns artix-systemd-shimAfter removal, revert any services you moved back to native runit service directories and ensure runit sv start/stop controls them.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.