|
| 1 | +# TAGLINE |
| 2 | + |
| 3 | +Probe Linux hardware and upload reports to the Linux hardware database |
| 4 | + |
| 5 | +# TLDR |
| 6 | + |
| 7 | +**Probe all hardware** and upload the report to linux-hardware.org |
| 8 | + |
| 9 | +```sudo -E hw-probe -all -upload``` |
| 10 | + |
| 11 | +**Probe and run operability checks** (graphics, drive, CPU, memory) |
| 12 | + |
| 13 | +```sudo -E hw-probe -all -check -upload``` |
| 14 | + |
| 15 | +**Probe locally** without uploading (saved under `/root/HW_PROBE/`) |
| 16 | + |
| 17 | +```sudo -E hw-probe -all``` |
| 18 | + |
| 19 | +**Disable** specific log collectors |
| 20 | + |
| 21 | +```sudo -E hw-probe -all -upload -disable [xdpyinfo,xorg.conf]``` |
| 22 | + |
| 23 | +**Tag a probe** with an inventory identifier |
| 24 | + |
| 25 | +```sudo -E hw-probe -all -upload -i [INVENTORY_ID]``` |
| 26 | + |
| 27 | +**Generate** a new inventory ID linked to your email |
| 28 | + |
| 29 | +```sudo -E hw-probe -generate-inventory -email [you@example.com]``` |
| 30 | + |
| 31 | +**Install a daily cron job** that probes the system and alerts on failures |
| 32 | + |
| 33 | +```sudo -E hw-probe -start``` |
| 34 | + |
| 35 | +**Dump and decode** the ACPI tables (requires `acpica-tools`) |
| 36 | + |
| 37 | +```sudo -E hw-probe -all -dump-acpi -decode-acpi -upload``` |
| 38 | + |
| 39 | +# SYNOPSIS |
| 40 | + |
| 41 | +**hw-probe** [_options_] |
| 42 | + |
| 43 | +# PARAMETERS |
| 44 | + |
| 45 | +**-all** |
| 46 | +> Probe for all hardware. Equivalent to enabling every individual probe collector. |
| 47 | +
|
| 48 | +**-probe** |
| 49 | +> Probe for hardware (a lighter probe than **-all**). |
| 50 | +
|
| 51 | +**-logs** |
| 52 | +> Collect system logs (dmesg, journal, lspci, lsusb, etc.). |
| 53 | +
|
| 54 | +**-log-level** _N_ |
| 55 | +> Set log collection verbosity: `mini`, `default`, or `maximal`. |
| 56 | +
|
| 57 | +**-upload** |
| 58 | +> Upload the resulting probe to linux-hardware.org and print the public URL. |
| 59 | +
|
| 60 | +**-check** |
| 61 | +> Run operability sanity tests on graphics, drive, CPU and memory. |
| 62 | +
|
| 63 | +**-check-graphics** |
| 64 | +> Test integrated and discrete graphics with **glxgears**. |
| 65 | +
|
| 66 | +**-check-hdd** |
| 67 | +> Test drive read speed with **hdparm**. |
| 68 | +
|
| 69 | +**-check-cpu** |
| 70 | +> Test CPU using **dd** and **md5sum**. |
| 71 | +
|
| 72 | +**-check-memory** |
| 73 | +> Test RAM with **memtester**. |
| 74 | +
|
| 75 | +**-id** _DESC_, **-name** _DESC_ |
| 76 | +> Set a custom name or description for the probe. |
| 77 | +
|
| 78 | +**-i** _ID_ |
| 79 | +> Tag the probe with an inventory identifier. |
| 80 | +
|
| 81 | +**-generate-inventory**, **-generate-inventory-id** |
| 82 | +> Request a new inventory ID, linked to **-email**. |
| 83 | +
|
| 84 | +**-email** _ADDR_ |
| 85 | +> Email address to associate with a generated inventory ID. |
| 86 | +
|
| 87 | +**-disable** _A,B,C_ |
| 88 | +> Disable specific log collectors (e.g. `xdpyinfo,xorg.conf`). |
| 89 | +
|
| 90 | +**-enable** _A,B,C_ |
| 91 | +> Force-enable specific log collectors disabled by default. |
| 92 | +
|
| 93 | +**-dump-acpi** |
| 94 | +> Dump the ACPI tables. |
| 95 | +
|
| 96 | +**-decode-acpi** |
| 97 | +> Decode dumped ACPI tables (requires **acpica-tools**). |
| 98 | +
|
| 99 | +**-show** |
| 100 | +> Show summary of probe data on the console. |
| 101 | +
|
| 102 | +**-verbose** |
| 103 | +> Print detailed log output during probing. |
| 104 | +
|
| 105 | +**-pci-ids** _PATH_, **-usb-ids** _PATH_, **-sdio-ids** _PATH_, **-pnp-ids** _PATH_ |
| 106 | +> Use a custom IDs database file when decoding device IDs. |
| 107 | +
|
| 108 | +**-import** _DIR_ |
| 109 | +> Re-create probes from a directory of previously-saved probe data. |
| 110 | +
|
| 111 | +**-start** |
| 112 | +> Install a daily cron job that probes the system and emails on hardware failure. |
| 113 | +
|
| 114 | +**-stop** |
| 115 | +> Remove the daily cron job created by **-start**. |
| 116 | +
|
| 117 | +**-debug** |
| 118 | +> Enable debug output and keep temporary files. |
| 119 | +
|
| 120 | +**-help** |
| 121 | +> Print full usage information. |
| 122 | +
|
| 123 | +# DESCRIPTION |
| 124 | + |
| 125 | +**hw-probe** collects a snapshot of a machine's hardware configuration and the related kernel/userspace logs, then optionally uploads it to the public **Linux Hardware Database** at linux-hardware.org. The uploaded probe gets a permanent URL that can be shared on bug trackers, mailing lists, or vendor support requests. |
| 126 | + |
| 127 | +A probe combines the output of standard tools (lspci, lsusb, lscpu, dmidecode, smartctl, lshw, edid, dmesg, Xorg.log, etc.) into a structured, anonymized bundle. The database aggregates these reports to track hardware compatibility across Linux distributions, identify suitable drivers for unsupported devices, and recommend kernels known to work with a given configuration. |
| 128 | + |
| 129 | +The tool also doubles as a self-monitoring agent: with **-start** it adds a cron job that runs daily, compares the new probe with the previous one and emails the user if a disk SMART error, missing device, or other anomaly appears. It is widely used by distributions, vendors, and end users to diagnose driver issues, plan upgrades, and inventory fleets of machines. |
| 130 | + |
| 131 | +# CAVEATS |
| 132 | + |
| 133 | +Most probes require **root** privileges to read SMART data, DMI tables and X session logs — invoke via `sudo -E` so that environment variables (notably `DISPLAY`) are preserved. A full probe with **-check** can take a minute or more because of memtester and disk timing tests. Uploaded probes are public; they are anonymized but inventory tags and machine names are kept verbatim, so do not include sensitive identifiers in **-id** or **-i**. |
| 134 | + |
| 135 | +# CONFIGURATION |
| 136 | + |
| 137 | +Local probes are written to `/root/HW_PROBE/LATEST/` (or `~/HW_PROBE/LATEST/` for non-root probes). The cron job created by **-start** lives in `/etc/cron.daily/hw-probe`. Decoding ACPI requires the **acpica-tools** package; reading SMART requires **smartmontools**; graphics checks require **mesa-utils** for **glxgears**. |
| 138 | + |
| 139 | +# HISTORY |
| 140 | + |
| 141 | +**hw-probe** was created by **Andrey Ponomarenko** as the front-end client for the Linux Hardware Database project, first released in **2018**. It is written in Perl and ships in the AUR, Debian/Ubuntu, Fedora, openSUSE and FreeBSD ports. The companion site, linux-hardware.org, has since collected millions of public probes used by kernel developers and distribution maintainers to track Linux hardware support over time. |
| 142 | + |
| 143 | +# SEE ALSO |
| 144 | + |
| 145 | +[lshw](/man/lshw)(1), [lspci](/man/lspci)(8), [lsusb](/man/lsusb)(8), [dmidecode](/man/dmidecode)(8), [hwinfo](/man/hwinfo)(8), [smartctl](/man/smartctl)(8), [inxi](/man/inxi)(1) |
0 commit comments