Skip to content

Troubleshooting

Ken Tobias edited this page Sep 11, 2026 · 7 revisions

Troubleshooting

phys-mem / phys-disk fields are empty or missing

On Linux, phys-mem reads DMI memory tables and requires root:

sudo retch

Without root, the field is silently omitted rather than erroring — this is expected, not a bug. On Windows, phys-mem uses Win32_PhysicalMemory and phys-disk uses Get-PhysicalDisk, both via PowerShell — make sure powershell.exe is on PATH.

What sudo retch actually changes

Running under sudo is not simply "retch with more fields" — it trades one set for another, because sudo's default env_reset clears most of the environment. Diffing a sudo retch --full run against a plain one is therefore not a fair before/after.

Field
Root only phys-mem (DMI tables, mode 0400 root); the snapshot count in btrfs (btrfs subvolume list -s)
User only editor ($VISUAL/$EDITOR), desktop and wm (XDG_CURRENT_DESKTOP and friends)

The btrfs snapshot count is omitted, never shown as 0, when it can't be read, so "couldn't check" is never mistaken for "no snapshots".

Packages used to be on the root-only list and no longer is (v0.6.18). It looked like a permissions limit but was a bug: the RPM SQLite database was opened read-write, and since it is root-owned inside a root-owned directory, SQLite could not create its journal sidecars and every query failed with attempt to write a readonly database. It is now opened read-only with immutable=1 and works as a normal user. If you are on an older build, sudo retch --fields packages is the workaround.

weather field is missing or slow

weather requires network access (Open-Meteo for forecast data, ipinfo.io for IP-based auto-location if weather_location isn't set) and has a ~4s timeout. It's shown in --full mode only by default — it won't appear in standard, --short, or --long output even with network access. Set weather_location in config (city name, ZIP code, or lat,lon) to skip the IP geolocation round-trip.

domain-search field is empty

domain-search queries resolvectl status (systemd-resolved) for per-interface DNS search domains. On systems without systemd-resolved (or where it isn't managing DNS), this field will be empty. It's shown in --full mode only.

Logo doesn't appear when output is piped or redirected

This is intentional, not a bug: the logo is automatically suppressed whenever stdout is not a terminal (e.g. retch | bat, retch > file.txt, or when running inside a script). This avoids dumping raw terminal graphics escape sequences into a file or another program's input. Set show_logo = true in config has no effect on this behavior — the piping check always wins.

Logo isn't on the right margin, or a row is misaligned

Both were fixed in v0.9.2 — check yours with retch --version. On earlier builds you may see one or both of:

  • Logo floats in the middle of a wide terminal. The logo was drawn where the text column ended (capped at column 65) rather than at the right margin, so anything wider than roughly 110 columns left a gap. It is now anchored to the terminal's last column.
  • One row's logo sits a few columns further right than the others. Line widths were measured in characters rather than terminal columns, so any field value containing double-width characters — most often a CJK or Hangul track title in media / player — pushed that row's logo right by one column per wide character.

If the logo still stacks above the field list, that is the layout falling back deliberately: it needs at least 95 columns, and enough room for the text column and the logo side by side. Widen the terminal, or use --no-logo if you would rather have the width back.

A wrapped field value looks wrong

Long values wrap onto indented continuation lines. Three defects there were fixed in v0.9.3:

  • The second line is a different colour. Lines are colourised before they are wrapped, so the opening escape stayed on the first line and the closing one on the last — everything between rendered in the terminal's default colour.
  • A comma went missing at the break. American Megatrends International, LLC. wrapped to …International / LLC., which reads as two values. This one changed the value's meaning, not just its appearance, so a BIOS/Audio/DNS Server line read from a build before v0.9.3 may be missing a separator at a line break.
  • A value wrapped early on a wide terminal. Lines beside the logo wrapped to the text column (at most 65) rather than to the space actually available up to the logo, so a 283-column terminal could break a line at ~55 columns and leave the rest of the gap empty.

macOS: binary is quarantined / won't run after download

Prebuilt macOS release binaries are not yet code-signed or notarized (tracked as future work). If macOS blocks the binary after downloading a release asset directly:

xattr -dr com.apple.quarantine /path/to/retch

This isn't needed when installing via cargo install retch-cli, nix run github:l1a/retch, or building from source — only for binaries downloaded directly from a GitHub Release.

AUR install fails with "account registration disabled"

New account registrations on the Arch User Repository are temporarily suspended by Arch Linux (upstream AUR issue, not retch-specific). This blocks first-time package maintainers, not installation via an existing AUR helper. If yay -S retch / paru -S retch themselves fail, build and install locally instead:

git clone https://github.com/l1a/retch.git
cd retch
just aur-local            # needs just, python3 and makepkg

packaging/aur/PKGBUILD is a template (pkgver=@VERSION@, sha256sums=('@SHA256@')), so makepkg cannot be pointed at it directly — it refuses @ in a pkgver. just aur-local renders it for the last released tag and builds that, which is exactly the tarball the published AUR package builds. Nothing in the repository records a released version; see scripts/render_packaging.py.

Local benchmarks look slower than expected

If you have FUSE-mounted volumes (e.g. cryfs, EncFS vaults), disk detection can be skewed by slow statvfs calls on those mounts. Standard, --short, and --long modes already skip fuse.* mounts to avoid this; only --full mode probes them. Unmount FUSE volumes before benchmarking, or discount runs where they're mounted.

Windows: the same adapter appears twice in Net, with identical RX/TX

Fixed in v0.11.1. If you are on v0.11.0 or earlier, this is what you were seeing.

Windows binds NDIS lightweight filters to each adapter — QoS Packet Scheduler, the WFP MAC-layer filters, the Native WiFi filter — and each one is reported by the OS as its own interface, carrying a copy of the adapter's own byte counters. So a single Wi-Fi card could show up as Wi-Fi plus a Wi-Fi-<filter name>-0000 entry with the same totals. The duplicate figures were never double-counted traffic; they are the same counters read twice.

Two things went wrong together, and only the first is Windows-specific:

  • the filter instance was listed as an interface at all (net-io had excluded them since v0.11.0; Net now does too);
  • both lines were rendered as the active interface, in bright blue, because the active interface was matched with a substring test against the rendered line — and Wi-Fi-Native WiFi Filter Driver-0000 contains Wi-Fi. That half was not Windows-specific: on Linux an active eth0 matched an eth0.100 VLAN and any veth0… pair the same way, highlighting and re-ordering the wrong line. Both now compare interface names exactly.

Net shows nothing in standard mode, but --long lists interfaces

Fixed in v0.11.1, on versions before which this could happen whenever retch could not work out which interface carried the default route — being offline, or an unusual routing setup. Standard mode shows a single Net line and is supposed to fall back to the first interface that is up; that fallback tested the rendered line for the literal [Up], which never appears, because the status is colourised (the bytes are [, an escape sequence, Up, another escape, ]). So the fallback never fired and no line was printed at all. --long and --full were unaffected — they list every interface and never needed the fallback.