You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -31,14 +31,25 @@ Also available from source: `git clone https://github.com/bethropolis/podbox &&
31
31
32
32
## Why podbox?
33
33
34
-
Unlike other desktop sandboxing tools, `podbox` translates a single TOML config directly into native systemd Quadlet units — no daemon, no persistent orchestrator.
34
+
Most desktop container tools make a trade-off: full integration means mounting your entire home directory into the container. podbox doesn't. You declare exactly what the container can see — directories, devices, and services — and nothing else is shared.
35
35
36
36
|| podbox | Distrobox / Toolbox | Raw `podman run`|
|**Baked images**| Yes — packages in image, not runtime | No — packages reinstalled on rebuild | N/A |
49
+
|**Reproducibility**| Full — TOML → image → unit | Partial — image only | None |
50
+
|**Runtime**| Podman only | Podman / Docker / lilipod | Any OCI runtime |
51
+
52
+
> podbox is not a distrobox replacement. Distrobox optimises for maximum host integration and is excellent at that. podbox optimises for declared, reproducible environments where you control exactly what is shared.
42
53
43
54
## How It Works
44
55
@@ -148,17 +159,9 @@ Supports `linux/x86_64`. Uninstall with `scripts/uninstall.sh`.
148
159
149
160
## Troubleshooting
150
161
151
-
### D-Bus proxy fails or container hangs
162
+
Run `podbox doctor` first — it checks the most common issues automatically and explains what to fix.
152
163
153
-
Missing `xdg-dbus-proxy` on the host. Install it or set `dbus = false` under `[integration]`.
154
-
155
-
### UID mismatch inside mounts
156
-
157
-
`UserNS=keep-id` + `User=root` maps host UID 1000 to container UID 999. Don't `chown` inside mounts — it will corrupt host ownership.
158
-
159
-
### Desktop shims or interceptors not working
160
-
161
-
The `podbox-guest` daemon relies on `/run/podbox/bin` being in the guest `$PATH`. Verify the systemd socket unit is active: `systemctl --user status <name>.socket`.
164
+
For detailed guides on specific issues (container won't start, D-Bus proxy, Wayland socket errors, interceptors, UID mapping, SSH agent forwarding, build failures, shell hangs), see the [Troubleshooting Guide](docs/troubleshooting.md).
162
165
163
166
## Command Reference
164
167
@@ -205,6 +208,7 @@ All commands support `--dry-run` to preview without executing.
205
208
|[D-Bus Proxy](docs/dbus-proxy.md)| Filtered D-Bus access via xdg-dbus-proxy |
206
209
|[Quadlet Reference](docs/quadlet.md)| Generated systemd units |
207
210
|[Host-Guest Protocol](docs/protocol.md)| Wire format and message types |
211
+
|[Troubleshooting Guide](docs/troubleshooting.md)| Common issues and fixes |
Running `podbox doctor` first is recommended — it checks the most common issues automatically and explains what to fix.
8
+
9
+
---
10
+
11
+
### Container won't start
12
+
13
+
```bash
14
+
systemctl --user status <name>.service # check the unit status
15
+
podbox logs # check container output
16
+
```
17
+
18
+
If the unit failed immediately after `podbox enable`, the Quadlet file may be malformed. Run `podbox enable --dry-run` to inspect the generated files without writing them.
19
+
20
+
---
21
+
22
+
### D-Bus proxy fails or container hangs on startup
23
+
24
+
`xdg-dbus-proxy` is missing or not on `PATH`. Install it from your distro's package manager (`xdg-dbus-proxy` on most distros). Alternatively, set `dbus = false` under `[integration]` if you don't need D-Bus access.
25
+
26
+
```bash
27
+
which xdg-dbus-proxy # should return a path
28
+
```
29
+
30
+
---
31
+
32
+
### GUI apps don't appear / Wayland socket errors
33
+
34
+
Verify `$WAYLAND_DISPLAY` is set on the host before starting the container. The socket is resolved at `podbox enable` time — if it changed after a reboot, re-run `podbox enable` to regenerate the Quadlet with the correct socket path.
35
+
36
+
```bash
37
+
echo$WAYLAND_DISPLAY# should be wayland-0 or similar
If the socket unit is inactive, run `podbox enable` and `podbox start` again. If the daemon is running but `PATH` is wrong, the `/etc/environment.d/podbox.conf` file may not have been written — check with `podbox exec -- cat /etc/environment.d/podbox.conf`.
55
+
56
+
---
57
+
58
+
### UID mismatch or permission errors inside bind mounts
59
+
60
+
`UserNS=keep-id` maps your host UID into the container with a shift of 1 (host UID 1000 → container UID 999). Do not run `chown` on bind-mounted directories from inside the container — it will change ownership on the host through the idmapped mount.
61
+
62
+
If files appear owned by `nobody` inside the container, the mount was created before the UID mapping was set up. Stop the container, check the volume path exists on the host with the correct ownership, then start again.
63
+
64
+
---
65
+
66
+
### SSH agent not forwarding
67
+
68
+
SSH agent forwarding requires Podman >= 5.6 and `ssh_agent = true` in `[integration]`. Verify both:
69
+
70
+
```bash
71
+
podman --version # must be >= 5.6
72
+
grep ssh_agent ~/.config/podbox/<name>.toml
73
+
```
74
+
75
+
If you're on Podman 5.5, the socket path is baked at `podbox enable` time. If `$SSH_AUTH_SOCK` changed since then (e.g. new login session), re-run `podbox disable && podbox enable`.
76
+
77
+
---
78
+
79
+
### Build fails or produces a stale image
80
+
81
+
Run `podbox build --rebuild` to force a full rebuild from scratch, bypassing the lock file. If the build context is corrupted:
The shell binary specified in `container.shell` may not be installed in the image. Check your `image.packages.install` list includes the shell package, then run `podbox build --rebuild`.
0 commit comments