New version, man page. Fixes, enhancements, changes.

Thanks:
1. AntiX forums, for testing -C --admin, suggestions, always helpful.

Bugs:
1. Added switch to set @ps_gui, I forgot case where info block was only thing
that used ps_gui (Nitrux kde nomad latte case). This led to no info: data if
other ps_gui switches not activated. Now each block that can use it activates it.

Fixes:
1. To clarify issue #161 added help/man explanation on how to get colors in cases
where you want to preserve colors for piped or redirected output. Thanks fugo.
2. LMDE 3.0 released, slightly different system base handling, so refactored to
add Debian version, see enhancement 2. Tested on some old vm instances, improved
old system Debian system base id, but it's empirical, distro by distro, there is
no rule I can use to automatically do it, sadly.
3. 'Motherboard' sensors field name added, a few small tweaks to sensors. This
was in response to issue #159, which also raised a problem I was not really
aware of, user generated sensor config files, that can have totally random
field names. Longer term solution, start getting data from sys to pad out
lm-sensors data, or to handle cases where no lm-sensors installed.
4. Fixed kwin_11 and kwin_wayland compositor print names, I'd left out the _,
which made it look strange, like there were two compositors or something.
5. Fixed latte-dock ID, I thought the program name when running was latte, not
latte-dock. inxi checks for both now. Thanks Nitrux for exposing that in vm test.
6. Sensors: added in a small filter to motherboard temp, avoid values that are
too high, like SYSTIN: 118 C, filters out to only use < 90 C. Very unlikely a
mobo would be more than 90C unless it's a mistake or about to melt. This may
correct anoymous debugger dataset report from rakasunka.

Enhancements:
1. Added --admin to -v 8 and to --debugger 2x
2. Expanded system base to use Debian version tool, like the ubuntu one, that
lets me match version number to codename. The ubuntu one matches code names to
release dates. Added Neptune, PureOS, Sparky, Tails, to new Debian system base
handler.
3. Big enhancement: --admin -C now shows a nice report on cpu vulnerabilities,
and has a good error message if no data found. Report shows:
Vulnerabilities: Type: [e.g. meltdown] status/mitigation: text explanation.
Note: 'status' is for when no mitigation, either not applicable,  or is vulnerable.
'mitigation' is when it's handled, and how. Thanks issue #160 Vascom from Fedora
for that request.
4. The never-ending saga of disk vendor IDs continues. More obscure vendors,
more matches to existing vendors. Thanks linuxlite/linux hardware database

Changes:
1. Reordered usb output, I don't know why I had Hubs and Devices use different
ordering and different -x switch priorities, that was silly, and made it hard to
read.
Now shows:
Device/Hub: bus-id-port-id[.port-id]:device-id info: [product info]
type/ports: [devices/hubs] usb: [type, speed]
-x adds drivers for devices, and usb: speed is now default for devices, same as
Hubs. Why I had those different is beyond me.
The USB ordering is now more sensible, the various components of each
matching whether hub or device.

Unfixable or Won't Fix:
1. Unable to detect Nomad desktop. As far as I can tell, Nomad is only a theme
applied to KDE Plasma, there is no program by that name detectable, only a
reference in ps aux to a theme called nomad.
2. Nitrux system base ID will not work until they correct their /etc/os-release file.
3. Tails live cd for some inexplicable reason uses non standard /etc/os-release
field names, which forces me to either do a custom detection just for them, or for
them to fix this bug. I opted for ignoring it, if I let each distro break standard
formats then try to work around it, the distro ID will grow to be a 1000 lines long
easily. Will file distro bug reports when I find these from now on.

Samples:

This shows the corrected, cleaned up, consistent usb output:

inxi -y80 --usb
USB:
  Hub: 1-0:1 info: Full speed (or root) Hub ports: 14 usb: 2.0
  Hub: 1-3:2 info: Atmel 4-Port Hub ports: 4 usb: 1.1
  Device-1: 1-3.2:4 info: C-Media Audio Adapter (Planet UP-100 Genius G-Talk)
  type: Audio,HID usb: 1.1
  Device-2: 1-4:3 info: Wacom Graphire 2 4x5 type: Mouse usb: 1.1
  Device-3: 1-10:5 info: Tangtop HID Keyboard type: Keyboard,Mouse usb: 1.1
  Device-4: 1-13:7 info: Canon CanoScan LiDE 110 type: <vendor specific>
  usb: 2.0
  Device-5: 1-14:8 info: Apple Ethernet Adapter [A1277] type: Network usb: 2.0
  Hub: 2-0:1 info: Full speed (or root) Hub ports: 8 usb: 3.1
  Hub: 3-0:1 info: Full speed (or root) Hub ports: 2 usb: 2.0
  Hub: 4-0:1 info: Full speed (or root) Hub ports: 2 usb: 3.1
  Hub: 5-0:1 info: Full speed (or root) Hub ports: 4 usb: 2.0
  Hub: 6-0:1 info: Full speed (or root) Hub ports: 4 usb: 3.0

inxi -y80 --usb -xxxz
USB:
  Hub: 1-0:1 info: Full speed (or root) Hub ports: 14 usb: 2.0
  chip ID: 1d6b:0002
  Hub: 1-3:2 info: Atmel 4-Port Hub ports: 4 usb: 1.1 chip ID: 03eb:0902
  Device-1: 1-3.2:4 info: C-Media Audio Adapter (Planet UP-100 Genius G-Talk)
  type: Audio,HID driver: cm109,snd-usb-audio interfaces: 4 usb: 1.1
  chip ID: 0d8c:000e
  Device-2: 1-4:3 info: Wacom Graphire 2 4x5 type: Mouse driver: usbhid,wacom
  interfaces: 1 usb: 1.1 chip ID: 056a:0011
  Device-3: 1-10:5 info: Tangtop HID Keyboard type: Keyboard,Mouse
  driver: hid-generic,usbhid interfaces: 2 usb: 1.1 chip ID: 0d3d:0001
  Device-4: 1-13:7 info: Canon CanoScan LiDE 110 type: <vendor specific>
  driver: N/A interfaces: 1 usb: 2.0 chip ID: 04a9:1909
  Device-5: 1-14:8 info: Apple Ethernet Adapter [A1277] type: Network
  driver: asix interfaces: 1 usb: 2.0 chip ID: 05ac:1402 serial: <filter>
  Hub: 2-0:1 info: Full speed (or root) Hub ports: 8 usb: 3.1
  chip ID: 1d6b:0003
  Hub: 3-0:1 info: Full speed (or root) Hub ports: 2 usb: 2.0
  chip ID: 1d6b:0002
  Hub: 4-0:1 info: Full speed (or root) Hub ports: 2 usb: 3.1
  chip ID: 1d6b:0003
  Hub: 5-0:1 info: Full speed (or root) Hub ports: 4 usb: 2.0
  chip ID: 1d6b:0002
  Hub: 6-0:1 info: Full speed (or root) Hub ports: 4 usb: 3.0
  chip ID: 1d6b:0003
This commit is contained in:
Harald Hope 2018-09-07 13:58:55 -07:00
parent 59e988c9e2
commit e78e37a1e1
3 changed files with 297 additions and 50 deletions

185
inxi
View file

@ -31,8 +31,8 @@ use POSIX qw(uname strftime ttyname);
## INXI INFO ##
my $self_name='inxi';
my $self_version='3.0.22';
my $self_date='2018-08-28';
my $self_version='3.0.23';
my $self_date='2018-09-07';
my $self_patch='00';
## END INXI INFO ##
@ -1776,13 +1776,15 @@ sub system_files {
'/var/run/dmesg.boot',
);
copy_files(\@files,'system-bsd');
@files = main::globber('/sys/devices/system/cpu/vulnerabilities/*');
copy_files(\@files,'security');
}
## SELF EXECUTE FOR LOG/OUTPUT
sub run_self {
print "Creating $self_name output file now. This can take a few seconds...\n";
print "Starting $self_name from: $self_path\n";
my $i = ($option eq 'main-full')? ' -i' : '';
my $cmd = "$self_path/$self_name -FRfrploudmxxx$i -c 0 --usb --slots --debug 10 -y 120 > $data_dir/$self_name-FRfrploudmxxxyusbslots120.txt 2>&1";
my $cmd = "$self_path/$self_name -FRfrploudmxxx$i --admin --usb --slots --debug 10 -y 120 > $data_dir/$self_name-FRfrploudmxxxy-usb-slots-admin120.txt 2>&1";
system($cmd);
copy($log_file, "$data_dir") or main::error_handler('copy-failed', "$log_file", "$!");
system("$self_path/$self_name --recommends -y 120 > $data_dir/$self_name-recommends-120.txt 2>&1");
@ -2077,7 +2079,7 @@ sub upload_file {
if ($host && ( $file_path && -e $file_path ) ){
# NOTE: important: must explicitly set to passive true/1
$ftp = Net::FTP->new($host, Debug => 0, Passive => 1);
$ftp = Net::FTP->new($host, Debug => 0, Passive => 1) || main::error_handler('ftp-connect', $ftp->message);
$ftp->login($user, $pass) || main::error_handler('ftp-login', $ftp->message);
$ftp->binary();
$ftp->cwd($dir);
@ -2330,10 +2332,12 @@ sub error_handler {
## FTP
elsif ( $err eq 'ftp-bad-path' ) {
$errno=70; "Unable to locate for FTP upload file:\n$one" }
elsif ( $err eq 'ftp-connect' ) {
$errno=71; "There was an error with connection to ftp server: $one" }
elsif ( $err eq 'ftp-login' ) {
$errno=71; "There was an error with login to ftp server: $one" }
$errno=72; "There was an error with login to ftp server: $one" }
elsif ( $err eq 'ftp-upload' ) {
$errno=72; "There was an error with upload to ftp server: $one" }
$errno=73; "There was an error with upload to ftp server: $one" }
## Modules
elsif ( $err eq 'required-module' ) {
$errno=80; $b_recommends=1; "The required $one Perl module is not installed:\n$two" }
@ -3935,6 +3939,7 @@ sub get_options{
$extra = 3;
}
if ($arg >= 8 ){
$b_admin = 1;
$b_downloader = 1;
$show{'slot'} = 1;
$show{'process'} = 1;
@ -4308,7 +4313,8 @@ sub show_options {
['1', '-b', '--basic', "Basic output, short form. Same as $self_name^-v^2." ],
['1', '-B', '--battery', "System battery info, including charge and condition, plus
extra info (if battery present)." ],
['1', '-c', '--color', "Set color scheme (0-42). Example:^$self_name^-c^11" ],
['1', '-c', '--color', "Set color scheme (0-42). For piped or redirected output,
you must use an explicit color selector. Example:^$self_name^-c^11" ],
['1', '', '', "Color selectors let you set the config file value for the
selection (NOTE: IRC and global only show safe color set)" ],
['2', '94', '', "Console, out of X" ],
@ -4360,7 +4366,7 @@ sub show_options {
/ /boot /home /opt /tmp /usr /usr/home /var /var/log /var/tmp. Use -p to see all
mounted ${partition_string}s." ],
['1', '-r', '--repos', "Distro repository data. Supported repo types: APK,
APT, EOPKG, PACMAN, PACMAN-G2, PISI, PORTAGE, PORTS (BSDs), SLACKPKG,
APT, EOPKG, PACMAN, PACMAN-G2, PISI, PORTAGE, PORTS (BSDs), SLACKPKG, TCE,
URPMQ, YUM/ZYPP." ],
['1', '-R', '--raid', "RAID data. Shows RAID devices, states, levels,
and components. md-raid: If device is resyncing, also shows resync progress line." ],
@ -4396,7 +4402,7 @@ sub show_options {
optical drive (-d), USB (--usb), full RAID; triggers -xx." ],
['2', '7', '', "Network IP data (-i); triggers -xxx."],
['2', '8', '', "Everything available, including repos (-r), processes
(-tcm), PCI slots (--slots)."],
(-tcm), PCI slots (--slots), extra admin data (--admin)."],
);
push @data, @rows;
# if distro maintainers don't want the weather feature disable it
@ -4444,7 +4450,7 @@ sub show_options {
and detected)" ],
['2', '-t', '', "Adds memory use output to CPU (-xt c), and CPU use to
memory (-xt m)." ],
['2', '--usb', '', "For Devices, shows USB version/speed and driver." ],
['2', '--usb', '', "For Device: driver." ],
);
push @data, @rows;
if ( $b_weather ){
@ -4505,7 +4511,7 @@ sub show_options {
['2', '-S', '', "Panel/tray/bar/dock info in desktop output, if in X (like lxpanel,
xfce4-panel, mate-panel); (if available) dm version number, window manager
version number." ],
['2', '--usb', '', "For devices: serial number (if present), interface count." ],
['2', '--usb', '', "For Device: serial number (if present), interface count." ],
);
push @data, @rows;
if ( $b_weather ){
@ -4516,7 +4522,7 @@ sub show_options {
@rows = (
['1', '', '--admin', "Adds advanced sys admin data (only works with
verbose or line output, not short form):" ],
['2', '-C', '', "If available: CPU errata (bugs); family, model-id, stepping - format:
['2', '-C', '', "If available: CPU vulnerabilities (bugs); family, model-id, stepping - format:
hex (decimal) if greater than 9, otherwise hex; microcode - format: hex." ],
['1', '-y', '--width', "Output line width max (integer >= 80). Overrides IRC/Terminal
settings or actual widths. Example:^inxi^-y^130" ],
@ -5254,6 +5260,7 @@ sub row_defaults {
'arm-pci' => "No ARM data found for this feature.",
'battery-data' => "No system battery data found. Is one present?",
'battery-data-sys' => "No /sys data found. Old system?",
'cpu-bugs-null' => "No CPU vulnerability/bugs data available.",
'cpu-model-null' => "Model N/A",
'cpu-speeds' => "No speed data found for $id cores.",
'darwin-feature' => "Feature not supported iu Darwin/OSX.",
@ -6557,14 +6564,32 @@ sub create_output_full {
},);
@rows = (@rows,@data);
}
if ($b_admin && $cpu{'bugs'}){
my @bugs = split /\s+/, $cpu{'bugs'};
@bugs = sort(@bugs);
my $bug = join ' ', @bugs;
if ($b_admin){
my @bugs = cpu_bugs_sys();
my $value = '';
if (!@bugs){
if ( $cpu{'bugs'}){
my @proc_bugs = split /\s+/, $cpu{'bugs'};
@proc_bugs = sort(@proc_bugs);
$value = join ' ', @bugs;
}
else {
$value = main::row_defaults('cpu-bugs-null');
}
}
@data = ({
main::key($num++,'Errata') => $bug,
main::key($num++,'Vulnerabilities') => $value,
},);
@rows = (@rows,@data);
if (@bugs){
$j = $#rows;
foreach my $ref (@bugs){
my @bug = @$ref;
$rows[$j]{main::key($num++,'Type')} = $bug[0];
$rows[$j]{main::key($num++,$bug[1])} = $bug[2];
$j++;
}
}
}
eval $end if $b_log;
return @rows;
@ -6872,6 +6897,7 @@ sub data_cpuinfo {
}
}
if ($b_admin ){
# note: not used unless maybe /sys data missing?
if ( !$cpu{'bugs'} && $line[0] eq 'bugs'){
$cpu{'bugs'} = $line[1];
}
@ -7316,6 +7342,26 @@ sub cpu_properties {
eval $end if $b_log;
return %cpu_properties;
}
sub cpu_bugs_sys {
eval $start if $b_log;
my (@bugs,$type,$value);
return if ! -d '/sys/devices/system/cpu/vulnerabilities/';
my @items = main::globber('/sys/devices/system/cpu/vulnerabilities/*');
if (@items){
foreach (@items){
$value = (main::reader($_))[0];
$type = ($value =~ /^Mitigation:/) ? 'mitigation': 'status';
$_ =~ s/.*\/([^\/]+)$/$1/;
$value =~ s/Mitigation: //;
@bugs = (@bugs,[($_,$type,$value)]);
}
}
main::log_data('dump','@bugs',\@bugs) if $b_log;
# print Data::Dumper::Dumper \@bugs;
eval $end if $b_log;
return @bugs;
}
sub cpu_speeds {
eval $start if $b_log;
my (@processors) = @_;
@ -8408,7 +8454,7 @@ sub device_vendor {
['(SanDisk|^SDS[S]?[DQ]|^SL([0-9]+)G|^AFGCE|ULTRA\sFIT|Clip Sport|Cruzer)','SanDisk','SanDisk',''],
['^STEC\b','^STEC\b','STEC',''], # ssd drive, must come before seagate ST test
# real, SSEAGATE Backup+; XP1600HE30002
['(^ST[^T]|[S]?SEAGATE|^X[AFP]|^BUP|Expansion Desk|GoFlex)','[S]?SEAGATE','Seagate',''],
['(^ST[^T]|[S]?SEAGATE|^X[AFP]|^BUP|Expansion Desk|GoFlex|Backup(\+|\s?Plus)\s?Hub)','[S]?SEAGATE','Seagate',''],
['^(WD|Western Digital|My (Book|Passport)|\d*LPCX|Elements|M000|EARX|EFRX|\d*EAVS)','(^WDC|Western Digital)','Western Digital',''],
## Then better known ones ##
['^(A-DATA|ADATA|AXN)','^(A-DATA|ADATA)','A-Data',''],
@ -8421,7 +8467,7 @@ sub device_vendor {
['^(HGST|Touro)','^HGST','HGST (Hitachi)',''], # HGST HUA
['^(Hitachi|HDS|HDT|IC|HT|HU)','^Hitachi','Hitachi',''],
['^Hoodisk','^Hoodisk','Hoodisk',''],
['^(HP\b|MB0)','^HP','HP',''], # vb: VB0250EAVER but clashes with vbox; HP_SSD_S700_120G
['^(HP\b|MB0|GJ0)','^HP','HP',''], # vb: VB0250EAVER but clashes with vbox; HP_SSD_S700_120G
['^(LSD|Lexar|JumpDrive)','^Lexar','Lexar',''], # mmc-LEXAR_0xb016546c
# OCZSSD2-2VTXE120G is OCZ-VERTEX2_3.5
['^(OCZ|APOC|D2|DEN|DEN|DRSAK|EC188|FTNC|GFGC|MANG|MMOC|NIMC|NIMR|PSIR|TALOS2|TMSC|TRSAK)','^OCZ[\s\-]','OCZ',''],
@ -8444,6 +8490,7 @@ sub device_vendor {
['^DREVO\b','^DREVO','Drevo',''],
['^(Eaget|V8$)','^Eaget','Eaget',''],
['^EXCELSTOR','^EXCELSTOR( TECHNO(LOGY)?)?','Excelstor',''],
['^Fantom','^Fantom( Drive[s]?)?','Fantom Drives',''],
['^FASTDISK','^FASTDISK','FASTDISK',''],
['^FORESEE','^FORESEE','Foresee',''],
['^GALAX\b','^GALAX','GALAX',''],
@ -8455,6 +8502,7 @@ sub device_vendor {
['^(G[\.]?SKILL)','^G[\.]?SKILL','G.SKILL',''],
['^HUAWEI','^HUAWEI','Huawei',''],
['^(IBM|DT)','^IBM','IBM',''],
['^IEI Tech','^IEI Tech(\.|nology)?( Corp(\.|oration)?)?','IEI Technology',''],
['^Imation','^Imation(\sImation)?','Imation',''], # Imation_ImationFlashDrive; TF20 is imation/tdk
['^(InnoDisk|Innolite)','^InnoDisk( Corp.)?','InnoDisk',''],
['^Innostor','^Innostor','Innostor',''],
@ -8463,6 +8511,7 @@ sub device_vendor {
['^Kingfast','^Kingfast','Kingfast',''],
['^KingMAX','^KingMAX','KingMAX',''],
['^KINGSHARE','^KINGSHARE','KingShare',''],
['^KingSpec','^KingSpec','KingSpec',''],
['^(LITE[\-]?ON[\s\-]?IT)','^LITE[\-]?ON[\s\-]?IT','LITE-ON IT',''], # LITEONIT_LSS-24L6G
['^(LITE[\-]?ON|PH6)','^LITE[\-]?ON','LITE-ON',''], # PH6-CE240-L
['^M-Systems','^M-Systems','M-Systems',''],
@ -9249,8 +9298,8 @@ sub display_compositor {
# as of version 20 is wayland compositor
['enlightenment','enlightenment','','enlightenment'],
['gnome-shell','gnome-shell','','gnome-shell'],
['kwin_wayland','kwin_wayland','','kwin wayland'],
['kwin_x11','kwin_x11','','kwin x11'],
['kwin_wayland','kwin_wayland','','kwin_wayland'],
['kwin_x11','kwin_x11','','kwin_x11'],
#['kwin','kwin','','kwin'],
['marco','marco','','marco'],
['muffin','muffin','','muffin'],
@ -13735,6 +13784,7 @@ sub lm_sensors_data {
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-w-other-biker.txt";
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-asus-chassis-1.txt";
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-devnull-1.txt";
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-jammin1.txt";
#@sensors_data = main::reader($file);
# print join ("\n", @sensors_data), "\n";
@sensors_data = map {$_ =~ s/\s*:\s*\+?/:/;$_} @sensors_data;
@ -13762,11 +13812,14 @@ sub lm_sensors_data {
# note that because of charset issues, no "°" degree sign used, but it is required
# in testing regex to avoid error. It might be because I got that data from a forum post,
# note directly via debugger.
if ($_ =~ /^(AMBIENT|M\/B|MB|SIO|SYS).*:([0-9\.]+)[\s°]*(C|F)/i) {
if ($_ =~ /^(AMBIENT|M\/B|MB|Motherboard|SIO|SYS).*:([0-9\.]+)[\s°]*(C|F)/i) {
# avoid SYSTIN: 118 C
if (main::is_numeric($2) && $2 < 90 ){
$sensors{'mobo-temp'} = $2;
$working_unit = $3;
$sensors{'temp-unit'} = set_temp_unit($sensors{'temp-unit'},$working_unit) if $working_unit;
}
}
# issue 58 msi/asus show wrong for CPUTIN so overwrite it if PECI 0 is present
# http://www.spinics.net/lists/lm-sensors/msg37308.html
# NOTE: had: ^CPU.*\+([0-9]+): but that misses: CPUTIN and anything not with + in starter
@ -13844,7 +13897,7 @@ sub lm_sensors_data {
$sensors{'fan-main'} = () if !$sensors{'fan-main'};
$sensors{'fan-main'}[1] = $2;
}
elsif (!$sensors{'fan-main'}[2] && $_ =~ /^(M\/B|MB|SYS).*:([0-9]+)[\s]RPM/i) {
elsif (!$sensors{'fan-main'}[2] && $_ =~ /^(M\/B|MB|SYS|Motherboard).*:([0-9]+)[\s]RPM/i) {
$sensors{'fan-main'} = () if !$sensors{'fan-main'};
$sensors{'fan-main'}[2] = $2;
}
@ -14659,9 +14712,9 @@ sub usb_data {
#print "pt0:$protocol\n";
@data = ({
main::key($num++,'Hub') => $bus_id,
main::key($num++,'usb') => $speed,
main::key($num++,'type') => $product,
main::key($num++,'info') => $product,
main::key($num++,'ports') => $ports,
main::key($num++,'usb') => $speed,
},);
@rows = (@rows,@data);
$b_hub = 1;
@ -14673,23 +14726,21 @@ sub usb_data {
$type ||= 'N/A';
$driver ||= 'N/A';
#print "pt3:$class:$product\n";
$rows[$j]{main::key($num++,'Device')} = $product;
if ($extra > 1){
$rows[$j]{main::key($num++,'Device')} = $bus_id;
$rows[$j]{main::key($num++,'info')} = $product;
$rows[$j]{main::key($num++,'type')} = $type;
if ($extra > 0){
$rows[$j]{main::key($num++,'driver')} = $driver;
}
if ($extra > 0){
$rows[$j]{main::key($num++,'usb')} = $speed;
if ($extra > 2 && $id[9]){
$rows[$j]{main::key($num++,'interfaces')} = $id[9];
}
$rows[$j]{main::key($num++,'type')} = $type;
$rows[$j]{main::key($num++,'bus ID')} = $bus_id;
$rows[$j]{main::key($num++,'usb')} = $speed;
}
if ($extra > 1){
$rows[$j]{main::key($num++,'chip ID')} = $chip_id;
}
if (!$b_hub && $extra > 2){
if ($id[9]){
$rows[$j]{main::key($num++,'interfaces')} = $id[9];
}
if ($serial){
$rows[$j]{main::key($num++,'serial')} = main::apply_filter($serial);
}
@ -15763,13 +15814,15 @@ sub get_wm_version {
# }
sub set_info_data {
eval $start if $b_log;
main::set_ps_gui() if ! $b_ps_gui;
my (@data,@info,$item);
my $pattern = 'alltray|awn|bar|bmpanel|bmpanel2|budgie-panel|cairo-dock|';
$pattern .= 'dde-dock|dmenu|dockbarx|docker|docky|dzen|dzen2|';
$pattern .= 'fbpanel|fspanel|glx-dock|gnome-panel|hpanel|i3bar|icewmtray|';
$pattern .= 'kdocker|kicker|';
$pattern .= 'latte|lemonbar|ltpanel|lxpanel|lxqt-panel|matchbox-panel|mate-panel|';
$pattern .= 'ourico|perlpanel|plank|plasma-desktop|plasma-netbook|polybar|pypanel|';
$pattern .= 'latte|latte-dock|lemonbar|ltpanel|lxpanel|lxqt-panel|';
$pattern .= 'matchbox-panel|mate-panel|ourico|';
$pattern .= 'perlpanel|plank|plasma-desktop|plasma-netbook|polybar|pypanel|';
$pattern .= 'razor-panel|razorqt-panel|stalonetray|taskbar|tint2|trayer|';
$pattern .= 'vala-panel|wbar|wharf|wingpanel|witray|';
$pattern .= 'xfce4-panel|xfce5-panel|xmobar|yabar';
@ -16090,12 +16143,15 @@ sub get_linux_distro {
}
}
if ($extra > 0){
my $base_debian_version_distro = 'sidux';
my $base_debian_version_osr = 'lmde|neptune|pureos|sparky|tails';
my $base_default = 'antix-version|mx-version'; # osr has base ids
my $base_issue = 'bunsen'; # base only found in issue
my $base_manual = 'blankon|deepin|kali'; # synthesize, no direct data available
my $base_osr = 'aptosid|grml|siduction|bodhi'; # osr base, distro id in list of distro files
my $base_osr_issue = 'grml|linux lite'; # osr base, distro id in issue
my $base_osr_ubuntu = 'mint|neon|zorin'; # osr has distro name but has ubuntu ID_LIKE/UBUNTU_CODENAME
# osr has distro name but has ubuntu ID_LIKE/UBUNTU_CODENAME
my $base_osr_ubuntu = 'mint|neon|nitrux|zorin';
my $base_upstream_lsb = '/etc/upstream-release/lsb-release';
my $base_upstream_osr = '/etc/upstream-release/os-release';
# first: try, some distros have upstream-release, elementary, new mint
@ -16123,11 +16179,15 @@ sub get_linux_distro {
elsif ( @distro_files && (grep {/($base_default)/} @distro_files) ){
$base_type = 'default';
}
# must go before base_osr_ubuntu test
elsif ( grep {/($base_debian_version_osr)/i} @osr ){
$system_base = debian_id();
}
elsif ( grep {/($base_osr_ubuntu)/} @osr ){
$base_type = 'ubuntu';
}
elsif ( ( ($distro_id && $distro_id =~ /($base_osr_issue)/ ) ||
(@distro_files && (grep {/($base_osr)/} @distro_files)) ) &&
(@distro_files && (grep {/($base_osr)/} @distro_files) ) ) &&
!(grep {/($base_osr)/i} @osr)){
$system_base = get_os_release();
}
@ -16135,6 +16195,9 @@ sub get_linux_distro {
$system_base = get_os_release($base_type);
}
}
if (!$system_base && @distro_files && ( grep {/($base_debian_version_distro)/i} @distro_files ) ){
$system_base = debian_id();
}
if (!$system_base && $lc_issue && $lc_issue =~ /($base_manual)/){
my $id = $1;
my %manual = (
@ -16246,6 +16309,9 @@ sub get_os_release {
elsif ($base_type eq 'ubuntu' && $working[0] eq 'UBUNTU_CODENAME' && $working[1]){
$base_version = ucfirst($working[1]);
}
elsif ($base_type eq 'debian' && $working[0] eq 'DEBIAN_CODENAME' && $working[1]){
$base_version = $working[1];
}
}
}
# NOTE: tumbleweed has pretty name but pretty name does not have version id
@ -16282,14 +16348,53 @@ sub get_os_release {
elsif ($base_type eq 'default' && ($pretty_name || ($name && $version_name) ) ){
$distro = ($name && $version_name) ? "$name $version_name" : $pretty_name;
}
# LMDE has only limited data in os-release, no _LIKE values
# LMDE 2 has only limited data in os-release, no _LIKE values. 3 has like and debian_codename
elsif ( $base_type eq 'ubuntu' && $lc_name =~ /^(debian|ubuntu)/ && ($pretty_name || ($name && $version_name))){
$distro = ($name && $version_name) ? "$name $version_name": $pretty_name;
}
elsif ( $base_type eq 'debian' && $base_version ){
$distro = debian_id($base_version);
}
}
eval $end if $b_log;
return $distro;
}
# arg: 1 - optional: debian codename
sub debian_id {
eval $start if $b_log;
my ($codename) = @_;
my ($debian_version,$id);
$debian_version = (main::reader('/etc/debian_version','strip'))[0] if -r '/etc/debian_version';
$id = 'Debian';
return if !$debian_version && !$codename;
# note, 3.0, woody, 3.1, sarge, but after it's integer per version
my %debians = (
'4' => 'etch',
'5' => 'lenny',
'6' => 'squeeze',
'7' => 'wheezy',
'8' => 'jessie',
'9' => 'stretch',
'10' => 'buster',
'11' => 'bullseye',
'12' => 'bookworm', # ?
);
if (main::is_numeric($debian_version)){
$id .= " $debian_version $debians{int($debian_version)}";
}
elsif ($codename) {
my %by_value = reverse %debians;
my $version = (main::is_numeric($debian_version)) ? "$debian_version $codename": $debian_version;
$id .= " $version";
}
# like buster/sid
elsif ($debian_version) {
$id .= " $debian_version";
}
eval $end if $b_log;
return $id;
}
# note, these are only for matching derived names, no need to go
# all the way back here, update as new names are known. This is because
# Mint is using UBUNTU_CODENAME without ID data.
@ -17636,7 +17741,7 @@ sub set_ps_gui {
@temp=qw(alltray awn bar bmpanel bmpanel2 budgie-panel
cairo-dock dde-dock dmenu dockbarx docker docky dzen dzen2
fbpanel fspanel glx-dock gnome-panel hpanel i3bar icewmtray
kdocker kicker latte lemonbar ltpanel lxpanel lxqt-panel
kdocker kicker latte latte-dock lemonbar ltpanel lxpanel lxqt-panel
matchbox-panel mate-panel ourico
perlpanel plank plasma-desktop plasma-netbook polybar pypanel
razor-panel razorqt-panel stalonetray taskbar tint2 trayer vala-panel

28
inxi.1
View file

@ -1,4 +1,4 @@
.TH INXI 1 "2018\-08\-28" inxi "inxi manual"
.TH INXI 1 "2018\-09\-07" inxi "inxi manual"
.SH NAME
inxi \- Command line system information script for console and IRC
.SH SYNOPSIS
@ -93,6 +93,10 @@ Set color scheme. If no scheme number is supplied, 0 is assumed.
These color selectors run a color selector option prior to inxi starting which lets
you set the config file value for the selection.
NOTE: All configuration file set color values are removed when output is
piped or redirected. You must use the explicit runtime \fB\-c <color number>\fR option
if you want color codes to be present in the piped/redirected output.
Color selectors for each type display (NOTE: IRC and global only show safe color set):
.TP
.B \-c 94\fR
@ -298,6 +302,8 @@ APT distros like PCLinuxOS or Alt-Linux)
\fBSLACKPKG\fR (Slackware + derived versions)
\fBTCE\fR (TinyCore)
\fBURPMQ\fR (Mandriva, Mageia + derived versions)
\fBYUM/ZYPP\fR (Fedora, Red Hat, Suse + derived versions)
@ -365,6 +371,8 @@ Show USB data for attached Hubs and Devices. Hubs also show number of ports.
Be aware that a port is not always external, some may be internal, and either
used or unused (for example, a motherboard USB header connector that is not used).
Hubs and Devices are listed in order of BusID.
BusID is generally in this format: BusID-port[.port][.port]:DeviceID
Device ID is a number created by the kernel, and has no necessary ordering
@ -372,7 +380,7 @@ or sequence connection, but can be used to match this output to lsusb
values, which generally shows BusID / DeviceID (except for tree view, which
shows ports).
Examples: \fRBus ID: 4-3.2.1:2\fR or \fRHub: 4-0:1\fR
Examples: \fRDevice-3: 4-3.2.1:2\fR or \fRHub: 4-0:1\fR
.TP
.B \-u\fR,\fB \-\-uuid\fR
@ -435,7 +443,8 @@ optical drive data (\fB\-d\fR), USB (\fB\-\-usb\fR); triggers \fB\-xx\fR extra d
.TP
.B \-v 8
\- All system data available. Adds Repos (\fB\-r\fR), PCI slots (\fB\-\-slots\fR), processes
(\fB\-tcm\fR). Useful for testing output and to see what data you can get from your system.
(\fB\-tcm\fR), admin (\fB\-\-admin\fR). Useful for testing output and to see what data
you can get from your system.
.TP
.B \-w\fR,\fB \-\-weather\fR
Adds weather line. Note, this depends on an unreliable API so it may not always
@ -602,7 +611,7 @@ methods are found for each distribution system base detection.
(\fB\-xt m\fR).
.TP
.B \-x \-\-usb\fR
\- For \fBDevices\fR, adds USB version/speed.
\- For Devices, adds driver(s).
.TP
.B \-x \-w\fR,\fB \-W\fR
\- Adds humidity and barometric pressure.
@ -713,8 +722,6 @@ if \fBps\fR tests fail to find data.
.TP
.B \-xx \-\-usb\fR
\- Adds vendor:chip id.
\- Adds driver(s).
.TP
.B \-xx \-w\fR,\fB \-W\fR
\- Adds wind chill, heat index, and dew point if any of these are available.
@ -813,7 +820,9 @@ Format is \fBhexadecimal (decimal)\fR if greater than 9, otherwise \fBhexadecima
\- Adds CPU microcode. Format is \fBhexadecimal\fR.
\- Adds CPU Errata (bugs) as known by your current kernel.
\- Adds CPU Vulnerabilities (bugs) as known by your current kernel. Lists by
\fBType: ... (status|mitigation): ....\fR for systems that support this feature
(Linux kernel 4.14 or newer, or patched older kernels).
.SH ADVANCED OPTIONS
@ -1120,6 +1129,11 @@ or conflicting items, but if you prefer to create your own configuration files,
here are the options. All take the integer value from the options available in
\fB\-c 94\-99\fR.
NOTE: All default and configuration file set color values are removed when output is
piped or redirected. You must use the explicit \fB\-c <color number>\fR option
if you want colors to be present in the piped/redirected output (creating a PDF for
example).
\fBCONSOLE_COLOR_SCHEME\fR The color scheme for console output (not in X/Wayland).
\fBGLOBAL_COLOR_SCHEME\fR Overrides all other color schemes.

View file

@ -1,3 +1,131 @@
=====================================================================================
Version: 3.0.23
Patch Version: 00
Script Date: 2018-09-07
-----------------------------------
Changes:
-----------------------------------
New version, man page. Fixes, enhancements, changes.
Thanks:
1. AntiX forums, for testing -C --admin, suggestions, always helpful.
Bugs:
1. Added switch to set @ps_gui, I forgot case where info block was only thing
that used ps_gui (Nitrux kde nomad latte case). This led to no info: data if
other ps_gui switches not activated. Now each block that can use it activates it.
Fixes:
1. To clarify issue #161 added help/man explanation on how to get colors in cases
where you want to preserve colors for piped or redirected output. Thanks fugo.
2. LMDE 3.0 released, slightly different system base handling, so refactored to
add Debian version, see enhancement 2. Tested on some old vm instances, improved
old system Debian system base id, but it's empirical, distro by distro, there is
no rule I can use to automatically do it, sadly.
3. 'Motherboard' sensors field name added, a few small tweaks to sensors. This
was in response to issue #159, which also raised a problem I was not really
aware of, user generated sensor config files, that can have totally random
field names. Longer term solution, start getting data from sys to pad out
lm-sensors data, or to handle cases where no lm-sensors installed.
4. Fixed kwin_11 and kwin_wayland compositor print names, I'd left out the _,
which made it look strange, like there were two compositors or something.
5. Fixed latte-dock ID, I thought the program name when running was latte, not
latte-dock. inxi checks for both now. Thanks Nitrux for exposing that in vm test.
6. Sensors: added in a small filter to motherboard temp, avoid values that are
too high, like SYSTIN: 118 C, filters out to only use < 90 C. Very unlikely a
mobo would be more than 90C unless it's a mistake or about to melt. This may
correct anoymous debugger dataset report from rakasunka.
Enhancements:
1. Added --admin to -v 8 and to --debugger 2x
2. Expanded system base to use Debian version tool, like the ubuntu one, that
lets me match version number to codename. The ubuntu one matches code names to
release dates. Added Neptune, PureOS, Sparky, Tails, to new Debian system base
handler.
3. Big enhancement: --admin -C now shows a nice report on cpu vulnerabilities,
and has a good error message if no data found. Report shows:
Vulnerabilities: Type: [e.g. meltdown] status/mitigation: text explanation.
Note: 'status' is for when no mitigation, either not applicable, or is vulnerable.
'mitigation' is when it's handled, and how. Thanks issue #160 Vascom from Fedora
for that request.
4. The never-ending saga of disk vendor IDs continues. More obscure vendors,
more matches to existing vendors. Thanks linuxlite/linux hardware database
Changes:
1. Reordered usb output, I don't know why I had Hubs and Devices use different
ordering and different -x switch priorities, that was silly, and made it hard to
read.
Now shows:
Device/Hub: bus-id-port-id[.port-id]:device-id info: [product info]
type/ports: [devices/hubs] usb: [type, speed]
-x adds drivers for devices, and usb: speed is now default for devices, same as
Hubs. Why I had those different is beyond me.
The USB ordering is now more sensible, the various components of each
matching whether hub or device.
Unfixable or Won't Fix:
1. Unable to detect Nomad desktop. As far as I can tell, Nomad is only a theme
applied to KDE Plasma, there is no program by that name detectable, only a
reference in ps aux to a theme called nomad.
2. Nitrux system base ID will not work until they correct their /etc/os-release file.
3. Tails live cd for some inexplicable reason uses non standard /etc/os-release
field names, which forces me to either do a custom detection just for them, or for
them to fix this bug. I opted for ignoring it, if I let each distro break standard
formats then try to work around it, the distro ID will grow to be a 1000 lines long
easily. Will file distro bug reports when I find these from now on.
Samples:
This shows the corrected, cleaned up, consistent usb output:
inxi -y80 --usb
USB:
Hub: 1-0:1 info: Full speed (or root) Hub ports: 14 usb: 2.0
Hub: 1-3:2 info: Atmel 4-Port Hub ports: 4 usb: 1.1
Device-1: 1-3.2:4 info: C-Media Audio Adapter (Planet UP-100 Genius G-Talk)
type: Audio,HID usb: 1.1
Device-2: 1-4:3 info: Wacom Graphire 2 4x5 type: Mouse usb: 1.1
Device-3: 1-10:5 info: Tangtop HID Keyboard type: Keyboard,Mouse usb: 1.1
Device-4: 1-13:7 info: Canon CanoScan LiDE 110 type: <vendor specific>
usb: 2.0
Device-5: 1-14:8 info: Apple Ethernet Adapter [A1277] type: Network usb: 2.0
Hub: 2-0:1 info: Full speed (or root) Hub ports: 8 usb: 3.1
Hub: 3-0:1 info: Full speed (or root) Hub ports: 2 usb: 2.0
Hub: 4-0:1 info: Full speed (or root) Hub ports: 2 usb: 3.1
Hub: 5-0:1 info: Full speed (or root) Hub ports: 4 usb: 2.0
Hub: 6-0:1 info: Full speed (or root) Hub ports: 4 usb: 3.0
inxi -y80 --usb -xxxz
USB:
Hub: 1-0:1 info: Full speed (or root) Hub ports: 14 usb: 2.0
chip ID: 1d6b:0002
Hub: 1-3:2 info: Atmel 4-Port Hub ports: 4 usb: 1.1 chip ID: 03eb:0902
Device-1: 1-3.2:4 info: C-Media Audio Adapter (Planet UP-100 Genius G-Talk)
type: Audio,HID driver: cm109,snd-usb-audio interfaces: 4 usb: 1.1
chip ID: 0d8c:000e
Device-2: 1-4:3 info: Wacom Graphire 2 4x5 type: Mouse driver: usbhid,wacom
interfaces: 1 usb: 1.1 chip ID: 056a:0011
Device-3: 1-10:5 info: Tangtop HID Keyboard type: Keyboard,Mouse
driver: hid-generic,usbhid interfaces: 2 usb: 1.1 chip ID: 0d3d:0001
Device-4: 1-13:7 info: Canon CanoScan LiDE 110 type: <vendor specific>
driver: N/A interfaces: 1 usb: 2.0 chip ID: 04a9:1909
Device-5: 1-14:8 info: Apple Ethernet Adapter [A1277] type: Network
driver: asix interfaces: 1 usb: 2.0 chip ID: 05ac:1402 serial: <filter>
Hub: 2-0:1 info: Full speed (or root) Hub ports: 8 usb: 3.1
chip ID: 1d6b:0003
Hub: 3-0:1 info: Full speed (or root) Hub ports: 2 usb: 2.0
chip ID: 1d6b:0002
Hub: 4-0:1 info: Full speed (or root) Hub ports: 2 usb: 3.1
chip ID: 1d6b:0003
Hub: 5-0:1 info: Full speed (or root) Hub ports: 4 usb: 2.0
chip ID: 1d6b:0002
Hub: 6-0:1 info: Full speed (or root) Hub ports: 4 usb: 3.0
chip ID: 1d6b:0003
-----------------------------------
-- Harald Hope - Fri, 07 Sep 2018 13:01:40 -0700
=====================================================================================
Version: 3.0.22
Patch Version: 00