inxi is a full featured CLI system information tool. It is available in most Linux distribution repositories, and does its best to support the BSDs.
Go to file
Harald Hope 991a35d665 Enhanced features!! Huge BSD upgrades! Bug Fixes!! Elbrus Fixes!! More bluetooth
fixes!! What are you waiting for?!!?

A special thanks for significant help, ongoing, leading to a huge boost to BSD
support, Stan Vandiver, who did a lot of BSD testing, and setup many remote
access systems for testing and development of the latest BSD upgrades. If you're
a BSD user, you can thank him for helping to expand BSD support!

Take special note of the code folding fixes in Fix 1, those open up possible
free software code editors that can be used to work with inxi to more than just
Kwrite/Kate, to include scite and geany, nice lightweight code editors. You
can't do real work in inxi without code folding, so getting this finally
resolved was I think worth it.

Also, for the first time ever!! inxi is now using Pledge, well, if
OpenBSD::Pledge module is available, which is currently only in OpenBSD, since
that's the only system that supports Pledge security, except for Serenity, but
inxi doesn't support Serenity. Note that OpenBSD was smart and added
OpenBSD::Pledge and OpenBSD::Unveil to Perl Core modules, thus removing any hoop
that might stop a Perl program from implementing it. Nice going OpenBSD guys!

The addition of OpenBSD softraid support for RAID and CRYPTO types highlights
the problem with --raid and --logical, where --raid is really just a subset of
Logical volume management. Note that while the hardware RAID feature only lists
the actual PCI RAID device, OpenBSD bioctl supports hardware RAID out of the
box, something I'd thought of doing in inxi for a few years, but it's too much
work, but bioctl has done the work, which is impressive. Can't do much without a
lot of debugger data there though, but it's worth being aware of. In this case,
since softraid is the primary device, I opted to call Crypto and RAID types all
RAID, same as with linear zfs.

--------------------------------------------------------------------------------
KNOWN ISSUES BUT CAN'T OR  WON'T BE FIXED:

1. FreeBSD: USB drivers. I really gave this a try, but could not get any logic
to be stable across systems and varying syntaxes used. Will wait for FreeBSD to
add drivers to usbconfig -vl. Note that this makes it not possible to correctly
match USB networking devices to their respective IF data, so USB networking IF
will fall back to the undetected IF-ID, which means it was found but not
connected to a specific hardware device.

2. FreeBSD Battery Report: there are non-objective values for Battery state data
in sysctl output, as in minutes remaining, which has no meaning, and percent
charge (percent of what? original design capacity? current actual capacity?). If
data with voltages, design/current capacity in Ah or Wh, is made available,
support will be added. Note that there are 3rd party tools that do supply this
data in a usable format, but they are not in core so no point.

3. BSDs All: have found no way to get physical CPU counts. this will lead to odd
outputs in some cases, like a 2 cpu system reporting itself as a 2x the actual
core counts single CPU, but the data just isn't there as far as I know.
Dragonfly in some cases appears to have that data.

4. BSDs All: so far no way to get live per core cpu speeds using a file or fast
command query. Thought I'd found a way in FreeBSD but that was not the correct
clockrate values, or inconsistently right/wrong, so not using it. Also saw the
same issue with max/min frequencies in FreeBSD so removed that item, it's
better to show nothing than data that is not reliable or actually not even
referring to what it seems to be.

5. BSD SOC Support: An issue poster asked why FreeBSD (but really BSD in
general) SOC ARM device, like RaPi, support, was so weak in inxi. The reason is
simple: to do SOC ARM device data in a meaningful way requires a complete path
based data structure, which the BSDs do not appear to have, at least from what
I've seen so far. See Linux's /sys data structures for examples of what is
required to add or expand inxi SOC device support in inxi. It's hard even with
that type of rich path based data, and without it I won't try.

The bright side is inxi runs perfectly on such devices, no errors, which was
amazing to see, and spoke volumes of the recent work done to extend support for
the BSDs.

6. Perl / inxi, when run as root, shows read error when trying to open a 200 /
--w------- permission /sys uevent file for reading. The test works as expected
as user, but not as root. Perl will try to read it when run as root even though
it has no read permissions, only write. This in reality only manifests on very
old /sys, from Debian Etch kernel 2.26 days.

--------------------------------------------------------------------------------
BUGS:

1. tput + urxvt / FreeBSD: There appears to be a bug in Arch Linux urxvt that
leads to failed terminal/console size from tput. Also while trying to resolve
this bug, discovered that if you use "tput cols 2>/dev/null" in FreeBSD, for
some inexplicable reason tput puts out defaults 80 cols x 24 rows. Why? Who
knows. Added in non numeric tests of output to handle errors from tput instead.

The bug appears to be what rxvt reports itself as vs what it is actually running
as. This issue isn't present in any other distro I tried, but could just be a
new bug in urxvt, don't know.

2. Elbrus CPU: Ongoing issue #197 Elbrus poster gave sample of new 2C3 cpuinfo,
that exposed some bugs internally in inxi Elbrus handling, I was using integer
values instead of hex for model IDs in the Elbrus logic, which would fail after
model 9.

3. BSD dmesg.boot: The logic used for dmesg.boot data processing had errors, and
had to be fully redone because of the need to detect in a reliable way the
current state of USB drives. This logic now is much more robust and reliable,
and no longer relies on using 'uniq' values per line, which would fail in all
kinds of situations.

4. OpenBSD USB Speeds: bugs fixed for OpenBSD speeds, these were found during
the USB data refactor testing process.

5. BSDs: in some cases, wrong memory used values were being generated, this
should be largely corrected now. Also pulled the weird NetBSD use of
/proc/meminfo which had wrong data in it, and now use vmstat for all BSDs, which
after the used bug fixes, is more reliable for BSDs.

6. All systems: CPU stepping would report as N/A if stepping 0, luckily I came
across some systems with an actual stepping: 0, which are not common.

7. FreeBSD: dmidecode sourced L2 cache data failed to show correct totals in
some cases. Due to no MT detection possible for FreeBSD currently, these totals
will still be wrong, but now it says note; check to let users know.

8. dmidecode: some cases were getting the wrong failure error message, this bug
became exposed due to OpenBSD locking /dev/mem even to root, which then failed
to show the expected message. This was a bug, and is now corrected.

9. FreeBSD: partition swap size didn't show in at least some cases, that's
corrected.

10. Linux Partitions: partitions would let doubled swap items through in several
cases, and also failed to create in rare cases matches for hidden partition
mapped id's. Finally tracked down the actual cause, when moving the partition
filters I'd forgotten to add swap into the filter list, oops. But now it will
catch duplicates in several different ways, so that's fine.

11. Unmounted: Failed to properly handle detecting RAID components in the case
of lvm, mdraid, it was only working for zfs. This was an accident, and should
now be corrected.

--------------------------------------------------------------------------------
FIXES:

1. Code Folding: Note that this was NOT a bug or failure in inxi, it was a bug
in scintilla/scite geany code editors with folding, basically if you commented
out logic, without using a space or other marker after the comment #, folding
would break in weird ways. Obviously the core scintilla engine should IGNORE the
darned # commented out lines, but it doesn't, which is a real bug. But not in
inxi.

This was however worth working around, because without folding, you can't work
on or learn how inxi works, and the only editor I know of in the free software
eco-system that can handle folding reasonably accurately was until now
Kwrite/Kate code editors, and those have some real, long standing, weaknesses,
and bugs around folding that have never been resolved, and yes, did notify them
about them, and no, they remain unfixed after years, or they were fixed briefly,
then broke again.

So it was important to expand the base of possible code editors to more than
just the KDE stuff. Fixing this was tedious, but I think worth it. On the bright
side, geany/scite folding / unfolding is FAST, and once the code issues that
triggered folding failures were resolved, very accurate, much better than Kate's
to be honest, though Kate isn't as picky, but Kate's unfold top nodes has been
broken more often than it's worked.

To avoid this issue, it's also important to configure geany/scite to use a space
after the comment when using keyboard shortcuts to comment out lines/blocks.
Same goes for Kate/Kwrite, by the way.

2. Battery: Forgot to add battery-force to -v7, which means you would never see
the battery line in full output if there was no battery present, this is similar
to how raid-forced worked, it was just an oversight which I hadn't noticed until
testing the new BSD battery logic.

3. Indentation: small indentation fixes on Sound Server data. Those are visible
with -y1, that is.

4. OpenBSD PCI: enabled Device matching to PCI networking device, this required
an odd little hack, but seems to be pretty reliable, and allowed me to add
driver to PCI device reports as well. Not sure why driver isn't in pcidump -v
but it probably will be in the future. Note to self: add in support for that so
if they include it in a future release, it will suddenly 'just work', assume
they use the same basic syntax as usbdevs -vv output.

5. BSDs: Added in some null data protections for BSDs, which do not always have
all the data types found in Linux, those would trigger Perl undefined value
errors, which are warnings that inxi failed internally to test for null data in
that, but it's hard to know when to do that when the data is basically always
there in Linux.

6. Debugger: Added test for required Net::FTP module in debugger, had forgotten
to make that test explicit, which led to odd failures.

7. BSDs: nvme detections should be better now. But I have seen no live test
system to confirm the fixes work as expected, plus, at least, OpenBSD swaps
nvme0 to sd0 internally, so I'm not actually sure how that data will even work,
we'll see how that goes.

8. BSDs: oddly, despite using 0x hex numbers almost everywhere, for CPU
stepping, the stepping is in decimal, which is even odder because CPU makers
list their steppings as hex in many if not most cases. In case this is corrected
in the future, if 0x appears before stepping number, will not then try to
convert to hex since it already is.

9a. CPU L3: Subtle, probably won't change behaviors, but L3 cache is per physical
CPU in every case I've found, so never multiply value by cores for L3. Like
everything, this may lead to corner cases being wrong, but that's life, it will
also lead to the data being right for most users.

9b. CPU L1: Different L1 syntaxes found so inxi now uses more loose detections,
should cover most OpenBSD L1 variants at least.

10. BSDs: inxi was using internal 'sleep' right before reading /proc/cpuinfo,
but that was silly for BSDs since cpu speeds there come from sysctl, so the BSD
sleeps are now running before sysctl if CPU data feature is required.

11. Too many to remember, but lots of subtle message output changes to make more
clear, more accurate, shorter, whatever.

12. USB: a very subtle fix, some devices can be both audio and video, like
cameras, but inxi would default to the first detected. Now it checks for both
before going to the list of checks, and correctly assigns a type that is both
audio and video to the audio and video hashes so both features will show the USB
device, not just Audio.

13: BSD: fixes for BSD ifconfig IF status, it was slicing off the full status
string, like 'no network' to 'no', which is silly. Now shows full string.

14. OpenBSD: restored USB Hub ports: xx item, I hadn't realized that the data
was still there with usbdevs but it required an extra -v, like: usbdevs -vv to
trigger, so now the OpenBSD USB ports works fine again.

15. Fedora Xorg: updated --recommends to use the newer split apart xorg utils
package names, only xrandr I think needed updating. Thanks Mr. Mazda for keeping
up with that stuff!

16. OpenBSD SMART: the actual device being queried turns out to the 'c'
partition, the one that represents the entire disk, NOT the main device ID, like
sd0, so now inxi tacks on 'c', sd0c, when smartctl runs, and it works fine. So
previously SMART report would never have worked in OpenBSD.

17. Partion labels/uuids: in Partitions and Unmounted, does not show label/uuid
if fs type is ffs or if fs is a logical type one, like zfs, hammer, and remote
fs mounts etc. This cleans up output, since these file system types will never
have labels or uuids.

18. Mr Mazda inxi was missing data and showing errors if run in Debian Etch with
Perl 5.008, and I realized I'd slipped up and had used the -k option without
testing lspci version, but -k was only available in 3.0 in Lenny. But -v turns
on -k automatically, so the easy solution was just to remove the -k and leave
the -nnv, which is the same thing, but does not cause errors in early lspci.

There are also errors with reading as root some /sys uevent files, but upon
examination, those had only root write permission, so the perl -r test isn't
right. Don't think that can be fixed. See Can't/Won't fix for more.

Another issue I noticed was that in some cases Perl seemed to lose track of some
hash values in local %trigger in OptionsHandler, and just lose them, thus
leading to things like --help --version --recommends not working. Moving
%trigger to globals %show and %use fixed that one, but that's weird, no idea
what happened, but it works now.

Tested in Sarge 3.1, where core modules have to be explicitly installed, they
were not included in base Perl install. Kernel 2.4 had some key differences,
different lspci syntax, different /proc/partitions, so the block device output
and device output is flawed, but otherwise inxi worked fine in Sarge, from 2005!
But these issues will not be corrected, kernel 2.24 is just too old, lol.

inxi should always run ok in very old systems, like Etch, back to when Perl 5.8
was standard, so bugs like this are always welcome, it's easy to slip up and use
something that didn't work in those old systems, then forget to test.

19. Corner case SMART errors, sometimes occur much later in output than inxi
expects, this is now corrected and errors should show in smart data no matter
where the main error type occured.

--------------------------------------------------------------------------------
ENHANCEMENTS:

1. Elbrus: Going along with Bug 2, Updated Elbrus microarch to use family 6,
assuming models 10, 11, are the same, which they should be since 12 is the same
as in family 4.

2. IPMI Sensors: More sensor syntax detections, sensors will never be stable...

3. OpenBSD: Rolled out live battery state feature, they have very good data,
simple, but solid, that allows for a quality battery state report. Handles both
Wh/Ah, though I am slightly suspicious of the reality of the arithmetic for Ah >
Wh conversion, it seems to be too high. That's Ah * Design Voltage. But Linux
battery data has the same issue, though I think in most cases, the data is in
Wh, so this issue isn't BSD specific. My suspicion is that the voltages used to
determine Ah may actually be slightly lower than the listed design voltage,
which inxi calls min: but it's actually the design voltage.

Unknown if NetBSD data is the same as OpenBSD for battery, was unable to locate
any samples, so can't say, if you have a NetBSD laptop that correctly reports
battery state in sysctl -a, please file an issue with some sample battery
charge/voltage syntax and values, ideally from > 1 system. If the data is
complete, it's easy to add support.

4a. BSD USB rev: inxi now emulates USB rev versions for BSD USB speed/rev
version data. Note that this is not guaranteed to be right, because USB devices
can be different rev versions than the speed they run at, but as far as I could
find, the USB revision data is not available in any practical sense, unless I
create a complicated recursive tool to build up a snapshot of the usb system and
devices from dmesg data, but I already blew a day on that attempt, so will wait
for more complete data in the usb tools in future. The rev version is based on
the device/hub speed, using a standard USB rev speed mapping. But a 12 Mbps
device can be rev 2, not rev 1.1, for example, that is, it's actually a USB 2.0
device, but a slow speed one.

4b. USB Type: Expanded fallback USB device type tests, these are useful for
cases where it's either a vendor defined type, or for Open/NetBSD, which do not
yet show USB class/subclass data. But it's a good fallback tool, added Mass
Storage, expanded detections.

5. BSD Sensors: Going along with Enhancement 3, rolled out live sensors data.
Confirmed working in OpenBSD and FreeBSD, not sure about NetBSD, no data,
problem with vm testing is no sensors, but don't have any NetBSD hardware
installs to verify. Stan gave it a good try, but could not get NetBSD running so
far, maybe later.

This basically means the -B and -s features are largely feature complete for the
BSDs as far as practical, though due to difficulties in getting the data in a
consistent clear way, some more advanced features, like gpu temps, which are now
available in Linux kernel values and lm-sensors, do not yet appear to be present
in the BSDs, though if this changes, the structures are in  place to make
updates to these logics very easy to implement now.

Note that the --sensors-include and --sensors-exclude items, or config items,
work fine with this BSD logic, though you have to figure out what exact syntax
to use, but that's the same in Linux.

6. OpenBSD Pledge: Yes, that's right, inxi is now Pledged!!! In OpenBSD, anyway,
they did a really good job, and the OpenBSD Perl packager made a very nice Perl
modules, OpenBSD::Pledge, which was very easy to implement. Now I know what inxi
needs to run its features!!

So far OpenBSD only, but Pledge seems like a really good idea, so I figured,
let's give it a spin, even if it will only currently work on OpenBSD, but that's
fine, inxi is pledged as tightly as I could make it, including unpledging
features not required post options processing, once inxi knows what it's
actually going to be doing.

Note that I'm aware of OpenBSD::Unveil, but that's a lot harder to implement due
to never really being sure about what files inxi will need to be looking at
until well into the logic. I may look at that in the future.

7. Bluetooth Rfkill: Due to ongoing failures in current inxi to show consistent
Bluetooth hci report on Linux, added in one last fallback, rfkill state, which
allows inxi to always fallback to at least that basic data. Also added in which
tool is providing the report mostly, like: Report: bt-adapter ID: hci0 and so
on.

Also integrated into -xxx data, or for down state, the full rfkill report, since
that can be quite useful.

Note that bluetooth is a real pain for users to debug because you can have:

 * Bluetooth Service: enabled/disabled * Bluetooth Service: started/stopped *
bluetoothctl: start/stop * bt-adapter: start/stop * hciconfig: start/stop *
rfkill: software: block/unblock; hardware: block/unblock - however, for
hardware, that means a physical button has been pressed to disable it, on the
laptop that is.

To make matters worse, one tool does not always even know when another tool has
changed something, for example, if I rfkill blocked hci0, then unblocked it,
hciconfig would keep seeing it as down until it was switched to on with
hciconfig explicitly. This is I suspect one reason hciconfig is being dropped,
it doesn't know how to listen to the newer tools like bluetoothctl, bt-adapter,
or rfkill.

8. OpenBSD: Going along with Code Change 1, now has disk serial (doas/root),
more consistent physical block size data, more reliable disk data, and for
-Dxxx, duid, if available. Also added disk partition table scheme, aka MBR /
GPT. Some of these new items may also work with NetBSD. See also Fix 17, SMART
fix for OpenBSD.

9. OpenBSD/NetBSD/FreeBSD: the DiskDataBSD refactor now allows Unmounted
partitions report.

10. OpenBSD: added in CPU MT detections using siblings data, I think only
OpenBSD and Dragonfly support proper MT cpu core counts. Still no way to get
physical cpu counts in OpenBSD or FreeBSD or NetBSD that I am aware of.

11. OpenBSD: added in cpu speed min/max data, that was available in most cases,
didn't realize that.

12. BSDs: expanded and made more robust cpu L1/L2/L3 cache detections, now for
example, OpenBSD will report its L1/L2/L3 cache without root. FreeBSD requires
root since that data is coming from dmidecode.

This logic update made BSD L-cache data much more reliable and consistent, and,
important, easy to work with. This was directly connected to Code Changes 2 and
3, which made dealing with those data sources a lot easier.

Note that L1/L2 cache data if not from OpenBSD will show note: check because
it's not possible to determine if it's a multithreaded MT cpu or not, and thus
if L1/L2 * core count would so often be totally wrong that inxi won't try to
guess, it will just list the single value found, and tell the user to check it
themselves.

13. OpenBSD: Added rcctl tool to init tools, I hadn't known about that one, that
replaces the fallback default used before, /etc/rc.d.

14. RAM Vendor: Issue #245 raised the point that it would be good to try to show
RAM vendor data when the manufactorer field is empty, and since that logic is
already present in disk_vendor, it was just matter of researching the product
IDs to find the matching patterns for the RAM vendors, the initial list is
pretty good, but will need updates now and then to correct errors. Also will
override only vendor ID 4 character hex value and see if it can find a better
value.

15. OpenBSD RAM: data quality is decent (no vendor/product no, unfortunately).
The data is often, but sadly not always, available. I'm not clear why sometimes
it isn't, but since OpenBSD also defaults to blocking /dev/mem to even root
user, which then blocks dmidecode, this is the only practical way to give basic
RAM data for OpenBSD, so that's running fine now, when the data is available,
with the added bonus of not needing doas/root.

Note that due to the way that this data is present, I can have inxi deduce some
things like how many arrays there are, and then guess at overall capacity, max
stick size, and so on, but all Array-x: values are followed by note: est because
they are never based on hard data, just extrapolations. I debated if inxi should
even show the guesses, but I think by saying note: est after each Array-x: item,
it's pretty clear that it's not hard data, and it does give an idea roughly. I
made an initial guess at > 1 ram array but found no data samples to let me see
if my guess was right or not, so > 1 array remains roughly theoretical until
shown to work or not work empirically.

While NetBSD sometimes has the system ram data in a similar way that OpenBSD
does in dmesg.boot, it varies too much, and is too inconsistent. There are not
enough data samples with good consistent data, and the samples I did see
suggested that it would take too much code and convoluted logic to handle the
variations, so I'm leaving this one alone. Also, NetBSD probably doesn't block
/dev/mem so dmidecode should work fine.

16. Using system clang version info for OpenBSD kernel compiler, the assumption
being that a BSD is an OS, so the Clang version it shipped with would be the
clang version that compiled the kernel. Please correct if this is wrong.

17. OpenBSD RAID: support added for softraid, including for drive storage
totals, unmounted raid component detections. Plugged in pretty smoothly, able to
generate a partial report for non root, and shows message if not root.

18. VM detections upgraded, particularly for BSDs, now includes vmm, hvm,
hyper-v, kvm. Not all of these would have been detected before. Also cleaned up
vm logic, moved all vm detections into $dboot{'machine-vm'}, and only use the
first found item.

19. Disk Vendors!!: Yes, last, but not least!! More disk vendors, vendor ID
matches!! Yep. What else can I say? Eternity? Man's quest for something that
cannot be found, yet these strivings never cease, here manifested by always new
vendors and ID matches!

--------------------------------------------------------------------------------
DOCUMENTATION:

1. Very significant ongoing upgrades to the docs in inxi-perl/docs/,
particularly in inxi-values.txt, inxi-resources.txt, and inxi-data.txt. These
are now increasingly useful, and I am trying to keep in particular
inxi-values.txt up to date as a primary reference for various features, though
it will always lag, because that's how it is, lol.

2. Cleaned up changelog, made 80 cols wide for text, bars, etc, made numbered
lists and headers consistent, but otherwise did not change any of the actual
content.

--------------------------------------------------------------------------------
CODE CHANGES:

1. Complete rewrite of BSD disk/partition data tools, now  there is one core
tool that generates a mega-disk/partition hash, which is then used for all
features that need partition/disk data. This worked out super well, and allowed
new features like BSD Unmounted disk data to be generated for the first time
ever, along with filling in various block device fields that were missing
before.

2. Change 1 also went along with a refactor of dmesg data tool for BSDs, which
allowed for much more granular data generation, along with a complex %dboot hash
which stores all sub types as well as the main full dataset. This allowed inxi
to stop looping through all of dmesg data each time a feature needed it. Now all
the data types are assigned if required by a feature, and only then. This, along
with change 1, worked really well.

See also Bug 3, which mandated completely changing how dmesg.boot and dmesg live
data were / are merged, the result is far more robust now, and far less prone to
error.

3. Similar to dmesg changes, used same methods for sysctl data, now all the data
is assigned to %sysctl data structure based on if needed or not, so it only does
the assignments one time, in one location. Much cleaner code this way, and
allows for testing set/unset substructures, like $sysctl{'cpu'}.

4. The %dboot and %sysctl refactors went so well that I switched the core USB
and Devices to also use %usb and %devices structures. These updates let me dump
a lot of global hashes and arrays, and leaned everything down a lot, and also
removed basically all the testing loops for these data types, now the Item
features just test to see if a reference to the specific type exists, if it
does, it has data, if not, it doesn't, this is a lot easier to manage.

5. Ongoing: moving related subroutines to Packages, the goal is to have pretty
much all related subroutines (functions) contained in parent classes/packages,
makes it easier to maintain.

6. Ongoing: making all internal package tools have similar sub names, getting
rid of the specific names for output and data generator functions. This makes
each Item Generator increasingly like all the others, as much as practical.

7. A big one, renamed all the feature generators to be XxxxxItem, instead of
XxxxData, which was colliding as a package name with actual data generator
tools, now all the Feature generators are [Feature]Item, and all the Data
generators have Data type names where relevant. This avoided in particular the
silly case where I was relying on case to differentiate UsbData and USBData,
feature vs data generator.

8. As part of the move to data hash global structures, also moved as many of the
top global scalars and hashes and arrays to these now much more heavily utilized
global hashes, like %alerts, %use, %fake, %force, and so on. There are now far
fewer globals running than before, and where it makes sense, I keep moving them
into global hashes, and giving the global hashes more work to do.

9. Significantly expanded list of debuggers for specific data types always
available, see docs/inxi-values.txt for list of options there. Decided for rapid
development, it was too much of a pain to always be uncommenting the debuggers,
so now am uncommenting, adding to @dbg supported items, then documenting. I
guess this means the @dbg items are more or less stable and consistent now, give
or take.

10. Refactored UsbData and DeviceData, for in particular the BSDs, to be much
more robust and to rely less on very fragile regex parsing patterns, takes more
lines of code, but better than having the detections break every other BSD
release. This was part of the %device and %usb refactors as well.

11. Fixed system_files()  too, which was really silly logic, it used a global
packed hash of system files, then would do a function call for the paths when
required, which was redundant since the values were already in a hash which
could be used directly. This was a throwback to inxi gawk/bash, where hashes
were not really used in this way, and the logic had been translated to Perl
without thinking about it, but once I thought about it, I realized how silly
that was. This must have knocked off a good 50 or more unnecessary, and always
expensive, function calls.
2021-04-16 20:41:58 -07:00
inxi Enhanced features!! Huge BSD upgrades! Bug Fixes!! Elbrus Fixes!! More bluetooth 2021-04-16 20:41:58 -07:00
inxi.1 Enhanced features!! Huge BSD upgrades! Bug Fixes!! Elbrus Fixes!! More bluetooth 2021-04-16 20:41:58 -07:00
inxi.changelog Enhanced features!! Huge BSD upgrades! Bug Fixes!! Elbrus Fixes!! More bluetooth 2021-04-16 20:41:58 -07:00
LICENSE.txt added gpl 3 license txt 2015-08-30 19:08:36 -07:00
README.txt readme edits 2021-03-29 14:32:48 -07:00

README for inxi - a command line system information tool

The new faster, more powerful Perl inxi is here! File all issue reports 
with the master branch. All support for versions prior to 3.0 is now ended, 
sorry. 

Make sure to update to the current inxi from the master branch before filing
any issue reports. The code in pre 2.9 versions literally no longer exists in
inxi 3. Bugs from earlier versions cannot usually be solved in the new version 
since the pre 2.9 and the 2.9 and later versions are completely different 
internally.

===============================================================================
DEVELOPMENT AND ISSUES
-------------------------------------------------------------------------------

Make inxi better! Expand supported hardware and OS data, fix broken items!

-------------------------------------------------------------------------------
HELP PROJECT DEVELOPMENT! SUBMIT A DEBUGGER DATASET
-------------------------------------------------------------------------------

This is easy to do, and only takes a few seconds. These datasets really help 
the project add and debug features. You will generally also be asked to provide 
this data for non trivial issue reports.

Note that the following options are present:

1. Generate local gz'ed debugger dataset. Leaves gz on your system:
 inxi version 3: inxi --debug 20 
 inxi version <= 2.3: inxi -@14
2. Generate, upload gz'ed debugger dataset. Leaves gz on your system:
 inxi version 3: inxi --debug 21
 inxi version <= 2.3: inxi -xx@14
3. Generate, upload, delete gz'ed debugger dataset:
 inxi version 3 only: inxi --debug 22

You can run these as regular user, or root/sudo, which will gather a bit more 
data, like from dmidecode, and other tools that need superuser permissions
to run.

ARM (plus MIPS, SPARC, PowerPC) and BSD datasets are particularly appreciated 
because we simply do not have enough of those.

-------------------------------------------------------------------------------
FILE AN ISSUE IF YOU FIND SOMETHING MISSING, BROKEN, OR FOR AN ENHANCEMENT
-------------------------------------------------------------------------------

inxi strives to support the widest range of operating systems and hardware,
from the most simple consumer desktops, to the most advanced professional
hardware and servers. 

The issues you post help maintain or expand that support, and are always
appreciated since user data and feedback is what keeps inxi working and
supporting the latest (or not so latest) hardware and operating systems. 

See INXI VERSION/SUPPORT/ISSUES/BUGS INFORMATION for more about issues/support.

See BSD/UNIX below for qualifications re BSDs, and OSX in particular. 

===============================================================================
SOURCE VERSION CONTROL
-------------------------------------------------------------------------------

https://github.com/smxi/inxi
MAIN BRANCH: master
DEVELOPMENT BRANCHES: inxi-perl, one, two
inxi-perl is the dev branch, the others are rarely if ever used. inxi itself
has the built in feature to be able to update itself from anywhere, including
these branches, which is very useful for development and debugging on various
user systems.

PULL REQUESTS: Please talk to me before starting to work on patches of any
reasonable complexity. inxi is hard to work on, and you have to understand how
it works before submitting patches, unless it's a trivial bug fix. Please:
NEVER even think about looking at or using previous inxi commits, previous to
the current master version, as a base for a patch. If you do, your patch / pull
request will probably be rejected. Developers, get your version from the 
inxi-perl branch, pinxi, otherwise you may not be current to actual development
versions. inxi-perl pinxi is always equal to or ahead of master branch inxi.

Man page updates, doc page updates, etc, of course, are easy and will probably
be accepted, as long as they are properly formatted and logically coherent. 

When under active development, inxi releases early, and releases often. 

PACKAGERS: inxi has one and only one 'release', and that is the current 
commit/version in the master branch (plus pinxi inxi-perl branch, of course,
but those should never be packaged). 

-------------------------------------------------------------------------------
MASTER BRANCH
-------------------------------------------------------------------------------

This is the only supported branch, and the current latest commit/version is
the only supported 'release'. There are no 'releases' of inxi beyond the 
current commit/version in master. All past versions are not supported. 

git clone https://github.com/smxi/inxi --branch master --single-branch

OR direct fast and easy install:
wget -O inxi https://github.com/smxi/inxi/raw/master/inxi

OR easy to remember shortcut (which redirects to github):
wget -O inxi https://smxi.org/inxi
wget -O inxi smxi.org/inxi

NOTE: Just because github calls tagged commits 'Releases' does not mean they 
are releases! I can't change the words on the tag page. They are tagged 
commmits, period. A tag is a pointer to a commit, and has no further meaning. 

If your distribution has blocked -U self updater and you want a newer version:

Open /etc/inxi.conf and change false to true: B_ALLOW_UPDATE=true

-------------------------------------------------------------------------------
DEVELOPMENT BRANCH
-------------------------------------------------------------------------------

All active development is now done on the inxi-perl branch (pinxi):

git clone https://github.com/smxi/inxi --branch inxi-perl --single-branch

OR direct fast and easy install:
wget -O pinxi https://github.com/smxi/inxi/raw/inxi-perl/pinxi

OR easy to remember shortcut (which redirects to github):
wget -O pinxi https://smxi.org/pinxi
wget -O pinxi smxi.org/pinxi

Once new features have been debugged, tested, and are reasonably stable, pinxi 
is copied to inxi in the master branch.

It's a good idea to check with pinxi if you want to make sure your issue has 
not been corrected, since pinxi is always equal to or ahead of inxi.

-------------------------------------------------------------------------------
LEGACY BRANCH
-------------------------------------------------------------------------------

If you'd like to look at or check out the Gawk/Bash version of inxi, you can
find it here, at the inxi-legacy branch (binxi):

git clone https://github.com/smxi/inxi --branch inxi-legacy --single-branch

OR direct fast and easy install:
wget -O binxi https://github.com/smxi/inxi/raw/inxi-legacy/binxi

OR easy to remember shortcut (which redirects to github):
wget -O binxi https://smxi.org/binxi

This version will not be maintained, and it's unlikely that any time will be
spent on it in the future, but it is there in case it's of use or interest to
anyone.

===============================================================================
SUPPORT INFO
-------------------------------------------------------------------------------

Do not ask for basic help that reading the inxi -h / --help menus, or man page
would show you, and do not ask for features to be added that inxi already has. 
Also do not ask for support if your distro won't update its inxi version, some
are bad about that.

-------------------------------------------------------------------------------
DOCUMENTATION
-------------------------------------------------------------------------------

https://smxi.org/docs/inxi.htm 
(smxi.org/docs/ is easier to remember, and is one click away from inxi.htm).
The one page wiki on github is only a pointer to the real resources.

https://github.com/smxi/inxi/tree/inxi-perl/docs
Contains specific Perl inxi documentation, of interest mostly to developers.
Includes internal inxi tools, values, configuration items. Also has useful
information about Perl version support, including the list of Core modules that
_should_ be included in a distribution's core modules, but which are 
unfortunately sometimes removed. 

INXI CONFIGURATION: https://smxi.org/docs/inxi-configuration.htm 
HTML MAN PAGE: https://smxi.org/docs/inxi-man.htm 
INXI OPTIONS PAGE: http://smxi.org/docs/inxi-options.htm 

NOTE: Check the inxi version number on each doc page to see which version 
will support the options listed. The man and options page also link to a 
legacy version, pre 2.9.

-------------------------------------------------------------------------------
IRC
-------------------------------------------------------------------------------

You can go to: irc.oftc.net channel #smxi 
but be prepared to wait around for a while to get a response. Generally it's 
better to use github issues.

-------------------------------------------------------------------------------
ISSUES
-------------------------------------------------------------------------------

https://github.com/smxi/inxi/issues
No issues accepted for non current inxi versions. See below for more on that.
Unfortunately as of 2.9, no support or issues can be accepted for older inxi's
because inxi 2.9 (Perl) and newer is a full rewrite, and legacy inxi is not
being supported since our time here on earth is finite (plus of course, one
reason for the rewrite was to never have to work with Gawk->Bash again!).

Sys Admin type inxi users always get the first level of support. ie, convince 
us you run real systems and networks, and your issue shoots to the top of the 
line. As do any real bugs. 

Failure to supply requested debugger data will lead To a distinct lack of 
interest on our part to help you with a bug. ie, saying, oh, it doesn't work, 
doesn't cut it, unless it's obvious why. 

-------------------------------------------------------------------------------
SUPPORT FORUMS
-------------------------------------------------------------------------------

https://techpatterns.com/forums/forum-33.html
This is the best place to place support issues that may be complicated.

If you are developer, use:
DEVELOPER FORUMS: https://techpatterns.com/forums/forum-32.html

===============================================================================
ABOUT INXI
-------------------------------------------------------------------------------

inxi is a command line system information tool. It was forked from the ancient
and mindbendingly perverse yet ingenius infobash, by locsmif. 

That was a buggy, impossible to update or maintain piece of software, so the
fork fixed those core issues, and made it flexible enough to expand the utility
of the original ideas. Locmsif has given his thumbs up to inxi, so don't be
fooled by legacy infobash stuff you may see out there.

inxi is lower case, except when I create a text header here in a file like
this, but it's always lower case. Sometimes to follow convention I will use
upper case inxi to start a sentence, but i find it a bad idea since invariably,
someone will repeat that and type it in as the command name, then someone will
copy that, and complain that the command: Inxi doesn't exist...

The primary purpose of inxi is for support, and sys admin use. inxi is used
widely for forum and IRC support, which is I believe it's most common function.

If you are piping output to paste or post (or writing to file), inxi now
automatically turns off color codes, so the old suggestion to use -c 0 to turn 
off colors is no longer required.

inxi strives to be as accurate as possible, but some things, like memory/ram 
data, depend on radically unreliable system self reporting based on OEM 
filling out data correctly, which doesn't often happen, so in those cases, 
you want to confirm things like ram capacity with a reputable hardware source, 
like crucial.com, which has the best ram hardware tool I know of.

-------------------------------------------------------------------------------
COMMITMENT TO LONG TERM STABILITY
-------------------------------------------------------------------------------

The core mission of inxi is to always work on all systems all the time. Well, 
all systems with the core tools inxi requires to operate installed. 

What this means is this: you can have a 10 year old box, or probably 15, not 
sure, and you can install today's inxi on it, and it will run. It won't run 
fast, but it will run. I test inxi on a 200 MHz laptop from about 1998 to 
keep it honest. That's also what was used to optimize the code at some points, 
since differences appear as seconds, not 10ths or 100ths of seconds on old 
systems like that.

inxi is being written, and tested, on Perl as old as 5.08, and will work on any 
system that runs Perl 5.08 or later. Pre 2.9.0 Gawk/Bash inxi will also run on 
any system no matter how old, within reason, so there should be no difference.

-------------------------------------------------------------------------------
FEATURES AND FUNCTIONALITY
-------------------------------------------------------------------------------

inxi's functionality continues to grow over time, but it's also important to 
understand that each core new feature usually requires about 30 days work to 
get it stable. So new features are not trivial things, nor is it acceptable to 
submit a patch that works only on your personal system. One inxi feature (-s, 
sensors data), took about 2 hours to get working in the alpha test on the local 
dev system, but then to handle the massive chaos that is actual user sensors 
output and system variations, it took several rewrites and about 30 days to 
get somewhat reliable for about 98% or so of inxi users. So if your patch is 
rejected, it's likely because you have not thought it through adequately, have 
not done adequate testing cross system and platform, etc.

-------------------------------------------------------------------------------
SUPPORTED VERSIONS / DISTRO VERSIONS
-------------------------------------------------------------------------------

Important: the only version of inxi that is supported is the latest current 
master branch version/commit. No issue reports or bug reports will be accepted 
for anything other than current master branch. No merges, attempts to patch old 
code from old versions, will be considered or accepted. If you are not updated 
to the latest inxi, do not file a bug report since it's probably been fixed 
ages ago. If your distro isn't packaging a current inxi, then file a bug report 
with your packager, not here. 

inxi is 'rolling release' software, just like Debian Sid, Gentoo, or Arch Linux 
are rolling release GNU/Linux distributions, with no 'release points'.

Distributions should never feel any advantage comes from using old inxi 
versions because inxi has as a core promise to you, the end user, that it will 
never require new tools to run. New tools may be required for a new feature, 
but that will always be handled internally by inxi, and will not cause any 
operational failures. This is a promise, and I will never as long as I run this 
project violate that core inxi requirement. Old inxi is NOT more stable than 
current inxi, it's just old, and lacking in bug fixes and features. For pre 2.9 
versions, it's also significantly slower, and with fewer features.

Your distro not updating inxi ever, then failing to show something that is 
fixed in current inxi is not a bug, and please do not post it here. File the 
issue with your distro, not here. Updating inxi in a package pool will NEVER 
make anything break or fail, period. It has no version based dependencies, just 
software, like Perl 5.xx, lspci, etc. There is never a valid reason to not 
update inxi in a package pool of any distro in the world (with one single known 
exception, the Slackware based Puppy Linux release, which ships without the 
full Perl language. The Debian based one works fine).

-------------------------------------------------------------------------------
SEMANTIC VERSION NUMBERING
-------------------------------------------------------------------------------

inxi uses 'semantic' version numbering, where the version numbers actually mean 
something.

The version number follows these guidelines:
Using example 3.2.28-6

The first digit(s), "3", is a major version, and almost never changes. Only a 
huge milestone, or if inxi reaches 3.9.xx, when it will simply move up to 4.0.0 
just to keep it clean, would cause a change. 

The second digit(s), "2", means a new real feature has been added. Not a 
tweaked existing feature, an actual new feature, which usually also has a new 
argument option letter attached. The second number goes from 0 to 9, and then 
rolls over the first after 9. It could also be adding a very complicated 
expansion of existing features, like Wayland. It depends.

The third, "28", is for everything small, can cover bug fixes, tweaks to 
existing features to add support for something, pretty much anything where you 
want the end user to know that they are not up to date. The third goes from 0 
to 99, then rolls over the second.

The fourth, "6", is extra information about certain types of inxi updates. I 
don't usually use this last one in master branch, but you will see it in 
branches one,two, inxi-perl, inxi-legacy since that is used to confirm remote 
test system patch version updates.

The fourth number, when used, will be alpha-numeric, a common version would be, 
in say, branch one: 2.2.28-b1-02, in other words: branch 1 patch version 2.

In the past, now and then the 4th, or 'patch', number, was used in trunk/master 
branches of inxi, but I've pretty much stopped doing that because it's 
confusing.

inxi does not use the fiction of date based versioning because that imparts no 
useful information to the end user, when you look at say, 2.2.28, and you last 
had 2.2.11, you can know with some certainty that inxi has no major new 
features, just fine tunings and bug fixes. And if you see one with 2.3.2, you 
will know that there is a new feature, almost, but not always, linked to one or 
more new line output items. Sometimes a fine tuning can be quite significant, 
sometimes it's a one line code fix. 

A move to a new full version number, like the rewrite of inxi to Perl, would 
reflect in first version say, 2.9.01, then after a period of testing, where 
most little glitches are fixed, a move to 3.0.0. These almost never happen. I 
do not expect for example version 4.0 to ever happen after 3.0 (early 2018), 
unless so many new features are added that it actually hits 3.9, then it would 
roll over to 4.

===============================================================================
BSD / UNIX
-------------------------------------------------------------------------------

BSD support is not as complete as GNU/Linux support due to the fact some of the 
data simply is not available, or is structured in a way that makes it unique to 
each BSD, or is difficult to process. This fragmentation makes supporting BSDs 
far more difficult than it should be in the 21st century. The BSD support in 
inxi is an ongoing process, with more features being added as new data sources 
and types are discovered.

Note that due to time/practicality constraints, in general, only the original
BSD branches will be actively supported: FreeBSD+derived; OpenBSD+derived;
NetBSD+derived. Other UNIX variants will generally only get the work required 
to make internal BSD flags get set and to remove visible output errors.

-------------------------------------------------------------------------------
TRUE BSDs 
-------------------------------------------------------------------------------

All BSD issue reports unless trivial and obvious will require 1 of two things:

1. a full --debug 21 data dump so I don't have to spend days trying to get the 
information I need to resolve the issue file by painful file from the issue 
poster. This is only the start of the process, and realistically requires 2. to 
complete it.

2. direct SSH access to at least a comparable live BSD version/system, that is, 
if the issue is on a laptop, access has to be granted to the laptop, or a 
similar one. 

Option 2 is far preferred because in terms of my finite time on this planet of 
ours, the fact is, if I don't have direct (or SSH) access, I can't get much 
done, and the little I can get done will take 10 to 1000x longer than it 
should. That's my time spent (and sadly, with BSDs, largely lost), not yours. 

I decided I have to adopt this much more strict policy with BSDs after wasting 
untold hours on trying to get good BSD support, only to see that support break 
a few years down the road as the data inxi relied in changed structure or 
syntax, or the tools changed, or whatever else makes the BSDs such a challenge 
to support. In the end, I realized, the only BSDs that are well supported are 
ones that I have had direct access to for debugging and testing. 

I will always accept patches that are well done, if they do not break 
GNU/Linux, and extend BSD support, or add new BSD features, and follow the 
internal inxi logic, and aren't too long. inxi sets initial internal flags to 
identify that it is a BSD system vs a GNU/Linux system, and preloads some data 
structures for BSD use, so make sure you understand what inxi is doing before 
you get into it.

-------------------------------------------------------------------------------
APPLE CORPORATION OSX
-------------------------------------------------------------------------------

Non-free/libre OSX is in my view a BSD in name only. It is the least Unix-like 
operating system I've ever seen that claims to be a Unix, its tools are 
mutated, its data randomly and non-standardly organized, and it totally fails 
to respect the 'spirit' of Unix, even though it might pass some random tests 
that certify a system as a 'Unix'. 

If you want me to use my time on OSX features or issues, you have to pay me, 
because Apple is all about money, not freedom (that's what the 'free' in 'free 
software' is referring to, not cost), and I'm not donating my finite time in 
support of non-free operating systems. 

### EOF ###