Collects hardware facts and system state from Framework laptops and desktops running Linux.
** Your diagnostic report contains sensitive system data** — IP addresses, WiFi network names, VPN connections, DNS servers, kernel boot parameters, and full system logs. Review the output before sharing it publicly (e.g. forum posts, GitHub issues). Redact anything you're not comfortable posting.
** This tool auto-installs missing dependencies** — packages like
lspci,dmidecode, andlm-sensorsare installed via your distro's package manager (apt,dnf,pacman,zypper) without prompting. Dependencies come from your distro's official repositories. Ifframework_toolis not found locally, it is downloaded from GitHub and run as root, then deleted. On immutable distros (Bluefin, Bazzite, etc.) package installation is skipped because the package manager can't be used directly — if tools are missing, results may be incomplete.
Paste this single-line command instead, then press Enter:
echo "Saving logs to logs_24h.txt..."; (echo "== DMESG for Last 24 Hours =="; sudo journalctl -k --since="24 hours ago"; echo "== JOURNALCTL for Last 24 Hours =="; sudo journalctl --since="24 hours ago") > logs_24h.txt
A file named logs_24h.txt will appear in your current directory. Attach that file in your reply to support.
curl -sO https://raw.githubusercontent.com/FrameworkComputer/linux-docs/main/fw-log-tool/fw_diag.pyz && chmod +x fw_diag.pyz
sudo ./fw_diag.pyzFirst line downloads the tool and makes it executable. Second line runs it. No wrapper script, no pip install, no venv — just Python 3.
sudo ./fw_diag.pyz --since boot # Since last boot
sudo ./fw_diag.pyz --since 24h # Last 24 hours
sudo ./fw_diag.pyz -o my_report.txt # Custom output file
sudo ./fw_diag.pyz --json # Structured JSON outputsudo is recommended. Without it, some sections (dmidecode, dmesg, NVMe SMART) will be incomplete.
- System info — kernel version, distro, desktop environment, session type (Wayland/X11), power management daemon (ppd/tuned/TLP) with active profile and conflict detection
- Hardware — GPU (vendor, driver, iGPU/dGPU classification), NVMe drives, WiFi adapter, RAM (type, speed), expansion cards with USB port mapping, webcam, mic capture devices, connected displays (connector, resolution, refresh rate, PSR status), RF kill state
- Battery — level, health %, cycle count, charge rate, charge limit
- Disk health — NVMe health via
nvme smart-log, SATA health viasmartctl - Thermal — current temps with AMD/Intel-specific thresholds (modern AMD runs hotter by design)
- Network — internet/WiFi/ethernet connectivity, VPN connections, IP addresses, DNS servers, WiFi power save state
- Audio — PipeWire/PulseAudio server info, default output/input devices, mute/volume state, ALSA mixer levels
- Bluetooth — adapter power/block state, connected and paired devices
- Sleep/suspend — current mode (s2idle/deep), available modes, ACPI states, kernel suspend stats, suspend/resume cycle counts
- Firmware — BIOS/EC versions, Secure Boot status (mokutil → EFI variable → bootctl fallback), Thunderbolt firmware version, fwupd devices and update status, fingerprint reader (driver, fprintd service, enrollment, PAM config). If
framework_toolis not found locally, downloads it from GitHub, runs--versionsand--pd-info, then deletes the downloaded binary. - Distro compatibility — checks your distro/version against the Framework support matrix
- FW12-specific — tablet mode, screen rotation, touchscreen/stylus (Framework Laptop 12 only)
- Raw logs — journalctl for the selected time range + full dmesg ring buffer (not time-filtered — captures early boot messages journald may miss), plus a log summary that flags critical events (GPU errors, kernel panics, NVMe I/O errors, filesystem errors) with confidence levels
Output lands in diagnostic_output.txt (or .json with --json).
- Framework Laptop 13 (11th–13th Gen Intel, Intel Core Ultra, AMD Ryzen 7040, AMD Ryzen AI 300)
- Framework Laptop 16 (AMD Ryzen 7040, AMD Ryzen AI 300)
- Framework Laptop 12
- Framework Desktop (AMD Ryzen AI Max 300)
The supported distro versions listed here reflect the current compatibility matrix and will be updated as new releases come out. The tool itself works on beta, pre-release, and development versions of these distros — data collection doesn't depend on a specific release version.
Officially supported (per frame.work/linux):
- Fedora 43
- Ubuntu (version depends on model — 25.10 for newest hardware, 24.04+ or 22.04 for older models)
- Bazzite
Community supported — the tool runs and auto-installs deps on:
- Arch, CachyOS, EndeavourOS, Garuda
- Debian, Pop!_OS, elementary OS, Zorin
- openSUSE Tumbleweed/Leap
- NixOS (required tools like
lspci,dmidecode,sensorsaren't in PATH by default — the tool re-execs itself insidenix-shell -pwith them, nothing permanently installed) - Bluefin, Aurora, Kinoite, Silverblue (immutable — auto-install skipped, required tools must already be present)
- Linux Mint (not on AI 300 or Desktop models)
- Manjaro (11th/12th Gen Intel only)
Auto-install uses apt, dnf, pacman, or zypper depending on your distro.
- Python 3 (no third-party Python packages needed)
- Standard Linux CLI tools (
lspci,dmidecode,sensors,iw,nvme,fwupdmgr, etc.) — installed automatically if missing