Skip to content

Quadlet Keys Used

.build file

Key Value Notes
ImageTag localhost/podbox-<name>:latest Local tag for built image
File Absolute path to Containerfile Must be absolute
Retry From image.pull_retry Pull retry count (default 3)
RetryDelay From image.pull_retry_delay Pull retry delay (default 5s)

.socket file

Key Value Notes
ListenStream %t/podbox/<name>.sock %t = $XDG_RUNTIME_DIR
SocketMode 0600 User-only access
DirectoryMode 0700 Parent dir permissions

.container file

Key Value Notes
Image podbox-<name>.build References the .build unit
ContainerName <name> Podman container name
UserNS keep-id Maps host UID/GID
SecurityLabelDisable true Required for Wayland socket
Memory From container.memory Memory limit (conditional)
ReloadCmd From container.reload_cmd Reload command (conditional)
AppArmorProfile From container.security.apparmor AppArmor profile (conditional)
Volume %h/containers/<name>:/root:Z Isolated home (NOT host home)
Volume %t/wayland-0:%t/wayland-0 Wayland socket (conditional)
Volume %t/pulse:%t/pulse PulseAudio (conditional)
Volume %t/bus:%t/bus D-Bus session (conditional)
Volume %t/podbox/<name>.sock:%t/... Host-guest socket
Volume %E{SSH_AUTH_SOCK}:/run/podbox/ssh-agent.sock:ro SSH agent (conditional, Podman ≥ 5.6)
Environment WAYLAND_DISPLAY=... Wayland display name
Environment PULSE_SERVER=unix:%t/pulse/native Pulse server path
Environment DBUS_SESSION_BUS_ADDRESS=... D-Bus address
Environment SSH_AUTH_SOCK=/run/podbox/ssh-agent.sock SSH agent socket (conditional, Podman ≥ 5.6)
AddDevice /dev/dri GPU (conditional on gpu=true)
PodmanArgs --init catatonit as PID 1
Restart on-failure Auto-restart on crash
WantedBy default.target Autostart (conditional)

Podman Version Targeting

Podbox targets Podman 5.5+ with feature gating at 5.6:

Feature Podman 5.5.x Podman ≥ 5.6
ssh_agent Warns and skips Volume=%E{SSH_AUTH_SOCK} + Environment=
Quadlet install podman quadlet install (uses --replace for idempotent re-runs) podman quadlet install
Quadlet uninstall Manual file remove + systemctl daemon-reload podman quadlet rm
Container list podman ps --filter label=podbox.* podman quadlet list

See podbox doctor to check Podman version compatibility.

Important Notes

  • %t is the systemd specifier for $XDG_RUNTIME_DIR — never substitute it.
  • %h is the systemd specifier for the user's home — never substitute it.
  • %E{NAME} expands environment variable $NAME at container start — used for SSH agent passthrough (Podman ≥ 5.6).
  • Files go in ~/.config/containers/systemd/, NOT ~/.config/systemd/user/.