Manage quadlets and systemd units from Cockpit
Start, stop and debug quadlet services from Cockpit, and know which tasks still belong in the terminal.
Part 3 of 5 in Cockpit on openSUSE. Last updated
In short: Cockpit's Services page has a switch between System and User units; quadlets of the logged-in user are under User. Quadlet services show as Generated: start, stop, restart and read logs there, but boot start comes from the [Install] section of the .container file, not from the enable toggle. Cockpit has no quadlet editor: edit the file in the Terminal page, run systemctl --user daemon-reload, then restart the service. Timers can be created and inspected on the Timers tab.
The Services page: System and User
Services lists systemd units with their state, and has tabs for services, targets, sockets, timers and paths. At the top is a switch between System units (root's service manager, needs administrative access to change) and User units (the service manager of the user you logged in as). Rootless quadlets live under User.
Click a unit for its detail page: status, the unit file path, dependencies, the recent log
lines, and the actions Start, Stop, Restart, Reload and Disallow running (mask). It is the
same as systemctl status, just clickable. The command-line side is in the
systemctl and journalctl guide.
Quadlet services show as Generated
Find your quadlet (for whoami.container, look for whoami.service).
Its state reads Generated, because podman's generator wrote it at the last
daemon-reload. For a quadlet, Cockpit also links from the service to its container on the
Podman containers page.
- Start, Stop, Restart: use them here. systemd then knows what you meant.
- Enable at boot: not here. systemd does not enable generated units; the
[Install]section of the.containerfile decides, as the quadlet basics guide explains. - Unit file: the path shown is the generated file in
/run. Changes there are lost at the next daemon-reload; edit the.containerfile instead.
What Cockpit reads, asked of systemd directly for a real quadlet and for a mount from /etc/fstab, which is generated the same way:
$ systemctl --user show -p Id,UnitFileState,FragmentPath,SourcePath snippetbox.service
Id=snippetbox.service
FragmentPath=/run/user/1000/systemd/generator/snippetbox.service
SourcePath=/home/user/.config/containers/systemd/snippetbox.container
UnitFileState=generated Real output on openSUSE Tumbleweed, podman 6.0.2, 2026-09-28; user and host names and addresses redacted.
$ systemctl show -p Id,UnitFileState,FragmentPath,SourcePath home.mount
Id=home.mount
FragmentPath=/run/systemd/generator/home.mount
SourcePath=/etc/fstab
UnitFileState=generated Real output on openSUSE Tumbleweed, 2026-09-28; user and host names and addresses redacted.
Editing a quadlet from the browser
Cockpit has no quadlet editor, but its Terminal page is a real shell as your logged-in user:
nano ~/.config/containers/systemd/whoami.container
/usr/lib/systemd/user-generators/podman-user-generator --dryrun # optional: check it
systemctl --user daemon-reload
systemctl --user restart whoami Skip the daemon-reload and the restart runs the old version: the generator only reads your file at reload time. After the restart, the Services page and the Podman page both show the new state.
Logs for one service
The service detail page shows its latest log lines; "View all logs" opens the Logs page
filtered to that unit, with priority and time filters. For the same view in a shell, or for
filters Cockpit does not offer, the journalctl
command builder writes the command. For a rootless service that is
journalctl --user -u whoami.
Timers
The Timers tab lists every timer with its last and next run. Cockpit can also create a simple
timer for a command. For anything you want to keep and version, write the
.timer and .service files yourself; the
cron to systemd timer converter turns an old
crontab line into both.
Frequently asked questions
Why is the enable switch greyed out or failing for my quadlet?
Quadlet services are generated by podman at daemon-reload, and systemd does not enable generated units. Add WantedBy=default.target (rootless) to the [Install] section of the .container file and daemon-reload; that is what starts it at boot.
Why do I not see another user's services?
The User view shows the service manager of the user you logged in as. Log in to Cockpit as that user, or use the Terminal page with sudo machinectl shell username@ and systemctl --user.
Can Cockpit restart a service that keeps failing?
It can restart it by hand, but the automatic part belongs in the unit: Restart=on-failure in the [Service] section of the quadlet. Cockpit shows the failed state and the log lines that explain why.