Bug fixes!!! New Features!! Why wait!!!

Bugs:
1. Issue #220 on github: inxi misidentified XFCE as Gnome. This was a kind of core
issue, and pointed to some logic that needed updating, and some inadequate
assumptions made, and some too loose cascade of tests. Hopefully now xfce will
almost never get misidentified, and the other primary desktops ID'ed either from
$ENV or from xrop -root will be slightly more accurately identified as well.

Note that this fix creates a possibility for obscure misconfigured desktops to
be ID'ed wrong, but in this case, that will be technically a bug for them, but
with the new fixes, that situation will be cleaner to handle internally in the
desktop ID logic.

Also tightened the final Gnome fallback detection to not trigger a possible
false positive, it was testing for ^_GNOME but that is not adequate, because
some gnome programs will trigger these values in xprop -root even if GNOME
is not running. Should be safer now, hopefully no new bugs will be triggered
by these changes.

Fixes:
1. Missed an indentation level for -y1, gcc alt should have been indented in
one more level, now it is.

2. In disk vendors/family, didn't clean items starting with '/', this is
now corrected. Yes, some do, don't ask me why. Might be cases like:
Crucial/Micron maybe, where the first ID is grabbed, not sure.

Enhancements:
1. New Disk vendors, vendor IDs!!! The list never ends!!! We've finally found
infinity, and it is the unceasing wave of tiny and not so tiny disks and their
Ids.

2. New feature: for -Aa, -Na/-na/-ia, -Ga, now will add the modules the kernel
could support if they were available on the Device-x lines of those items.
This was made an -a option because it really makes no sense, if it's a regular
option, users might think that for example an nvidia card had a nouveua driver
when it didn't, when in fact, all the kernel is saying is that it knows those
listed modules 'couid' be used or present. This corresponds to the Display:
item in -Ga, that lists 'alternate:' drivers that Xorg knows about that could
likewise be used, if they were on the system.

In other words these are --admin options because otherwise users might get confused,
so this is one where you want to know the man explanation before you ask for it.

It is useful however if you're not sure what your choices are for kernel modules.

When the alternate driver is the same as the active driver, or if none is found,
it does not show the alternate: item to avoid spamming.
This commit is contained in:
Harald Hope 2020-07-26 19:22:59 -07:00
parent 776c788273
commit bbcaed9475
3 changed files with 202 additions and 32 deletions

148
inxi
View file

@ -39,8 +39,8 @@ use POSIX qw(uname strftime ttyname);
## INXI INFO ## ## INXI INFO ##
my $self_name='inxi'; my $self_name='inxi';
my $self_version='3.1.04'; my $self_version='3.1.05';
my $self_date='2020-06-28'; my $self_date='2020-07-26';
my $self_patch='00'; my $self_patch='00';
## END INXI INFO ## ## END INXI INFO ##
@ -4659,7 +4659,10 @@ sub show_options {
['0', '', '', $line ], ['0', '', '', $line ],
['0', '', '', "Output Control Options:" ], ['0', '', '', "Output Control Options:" ],
['1', '-a', '--admin', "Adds advanced sys admin data (only works with ['1', '-a', '--admin', "Adds advanced sys admin data (only works with
verbose or line output, not short form), sets --extra=3:" ], verbose or line output, not short form); check man page for explanations!;
also sets --extra=3:" ],
['2', '-A', '', "If available: list of alternate kernel modules/drivers
for device(s)." ],
['2', '-C', '', "If available: CPU socket type, base/boost speeds ['2', '-C', '', "If available: CPU socket type, base/boost speeds
(dmidecode+root/sudo required); CPU vulnerabilities (bugs); (dmidecode+root/sudo required); CPU vulnerabilities (bugs);
family, model-id, stepping - format: hex (decimal) if greater family, model-id, stepping - format: hex (decimal) if greater
@ -4668,11 +4671,14 @@ sub show_options {
USB drive specifics; SMART report." ], USB drive specifics; SMART report." ],
['2', '-G', '', "If available: Xorg Display ID, Screens total, default Screen, ['2', '-G', '', "If available: Xorg Display ID, Screens total, default Screen,
current Screen; per X Screen: resolution, dpi, size, diagonal; per Monitor: current Screen; per X Screen: resolution, dpi, size, diagonal; per Monitor:
resolution; hz; dpi; size; diagonal. See man for explanations." ], resolution; hz; dpi; size; diagonal; list of alternate kernel modules/drivers
for device(s)." ],
['2', '-I', '', "As well as per package manager counts, also adds total ['2', '-I', '', "As well as per package manager counts, also adds total
number of lib files found for each package manager if not -r." ], number of lib files found for each package manager if not -r." ],
['2', '-j,-p,-P', '', "For swap (if available): swappiness and vfs cache ['2', '-j,-p,-P', '', "For swap (if available): swappiness and vfs cache
pressure, and if values are default or not." ], pressure, and if values are default or not." ],
['2', '-n,-N', '', "If available: list of alternate kernel modules/drivers
for device(s)." ],
['2', '-p,-P', '', "If available: raw size of ${partition_string}s, ['2', '-p,-P', '', "If available: raw size of ${partition_string}s,
percent available for user, block size of file system (root required)." ], percent available for user, block size of file system (root required)." ],
['2', '-r', '', "Packages, see -Ia." ], ['2', '-r', '', "Packages, see -Ia." ],
@ -6259,6 +6265,10 @@ sub card_data {
$rows[$j]{main::key($num++,0,3,'v')} = $version if $version; $rows[$j]{main::key($num++,0,3,'v')} = $version if $version;
} }
} }
if ($b_admin && $row[10]){
$row[10] = main::get_driver_modules($row[9],$row[10]);
$rows[$j]{main::key($num++,0,3,'alternate')} = $row[10] if $row[10];
}
if ($extra > 0){ if ($extra > 0){
$rows[$j]{main::key($num++,0,2,'bus ID')} = (!$row[2] && !$row[3]) ? 'N/A' : "$row[2].$row[3]"; $rows[$j]{main::key($num++,0,2,'bus ID')} = (!$row[2] && !$row[3]) ? 'N/A' : "$row[2].$row[3]";
} }
@ -9708,7 +9718,7 @@ sub set_vendors {
# HM320II HM320II # HM320II HM320II
['(SAMSUNG|^MCG[0-9]+GC|^MCC|^MCBOE|^[GS]2 Portable|^[DG]3 Station|^DUO\b|^P3|^BGN|^BJ[NT]|^BWB|^(HM|SP)[0-9]{2}|^MZMPC|^HD[0-9]{3}[A-Z]{2}$)','SAMSUNG','Samsung',''], # maybe ^SM, ^HM ['(SAMSUNG|^MCG[0-9]+GC|^MCC|^MCBOE|^[GS]2 Portable|^[DG]3 Station|^DUO\b|^P3|^BGN|^BJ[NT]|^BWB|^(HM|SP)[0-9]{2}|^MZMPC|^HD[0-9]{3}[A-Z]{2}$)','SAMSUNG','Samsung',''], # maybe ^SM, ^HM
# Android UMS Composite? # Android UMS Composite?
['(SanDisk|^SDS[S]?[DQ]|^SL([0-9]+)G|^AFGCE|^U3\b|ULTRA\sFIT|Clip Sport|Cruzer|^Extreme)','SanDisk','SanDisk',''], ['(SanDisk|^SDS[S]?[DQ]|^SL([0-9]+)G|^AFGCE|^ABLCD|^SDW[1-9]|^U3\b|ULTRA\sFIT|Clip Sport|Cruzer|^Extreme)','SanDisk','SanDisk',''],
['^STEC\b','^STEC\b','STEC',''], # ssd drive, must come before seagate ST test ['^STEC\b','^STEC\b','STEC',''], # ssd drive, must come before seagate ST test
# real, SSEAGATE Backup+; XP1600HE30002 | 024 HN (spinpoint) # real, SSEAGATE Backup+; XP1600HE30002 | 024 HN (spinpoint)
['(^ST[^T]|[S]?SEAGATE|^X[AFP]|^5AS|^BUP|Expansion Desk|^Expansion|FreeAgent|GoFlex|Backup(\+|\s?Plus)\s?(Hub)?|OneTouch)','[S]?SEAGATE','Seagate',''], ['(^ST[^T]|[S]?SEAGATE|^X[AFP]|^5AS|^BUP|Expansion Desk|^Expansion|FreeAgent|GoFlex|Backup(\+|\s?Plus)\s?(Hub)?|OneTouch)','[S]?SEAGATE','Seagate',''],
@ -9737,7 +9747,7 @@ sub set_vendors {
['^(PNY|Hook\s?Attache|SSD2SC)','^PNY\s','PNY','','^PNY'], ['^(PNY|Hook\s?Attache|SSD2SC)','^PNY\s','PNY','','^PNY'],
# note: get rid of: M[DGK] becasue mushkin starts with MK # note: get rid of: M[DGK] becasue mushkin starts with MK
# note: seen: KXG50ZNV512G NVMe TOSHIBA 512GB | THNSN51T02DUK NVMe TOSHIBA 1024GB # note: seen: KXG50ZNV512G NVMe TOSHIBA 512GB | THNSN51T02DUK NVMe TOSHIBA 1024GB
['(^[S]?TOS|^THN|TOSHIBA|TransMemory|^M[GKQ][0-9])','[S]?TOSHIBA','Toshiba',''], # scsi-STOSHIBA_STOR.E_EDITION_ ['(^[S]?TOS|^THN|TOSHIBA|TransMemory|^M[GKQ][0-9]|KBG4)','[S]?TOSHIBA','Toshiba',''], # scsi-STOSHIBA_STOR.E_EDITION_
## These go last because they are short and could lead to false ID, or are unlikely ## ## These go last because they are short and could lead to false ID, or are unlikely ##
# unknown: AL25744_12345678; ADP may be usb 2.5" adapter; udisk unknown: Z1E6FTKJ 00AAKS # unknown: AL25744_12345678; ADP may be usb 2.5" adapter; udisk unknown: Z1E6FTKJ 00AAKS
# SSD2SC240G726A10 MRS020A128GTS25C EHSAJM0016GB # SSD2SC240G726A10 MRS020A128GTS25C EHSAJM0016GB
@ -9805,6 +9815,7 @@ sub set_vendors {
['^Fantom','^Fantom( Drive[s]?)?','Fantom Drives',''], ['^Fantom','^Fantom( Drive[s]?)?','Fantom Drives',''],
['^Faspeed','^Faspeed','Faspeed',''], ['^Faspeed','^Faspeed','Faspeed',''],
['^FASTDISK','^FASTDISK','FASTDISK',''], ['^FASTDISK','^FASTDISK','FASTDISK',''],
['^Fordisk','^Fordisk','Fordisk',''],
# FK0032CAAZP/FB160C4081 FK or FV can be HP but can be other things # FK0032CAAZP/FB160C4081 FK or FV can be HP but can be other things
['^FORESEE','^FORESEE','Foresee',''], ['^FORESEE','^FORESEE','Foresee',''],
['^FOXLINE','^FOXLINE','Foxline',''], # russian vendor? ['^FOXLINE','^FOXLINE','Foxline',''], # russian vendor?
@ -9842,13 +9853,14 @@ sub set_vendors {
['^Innovera','^Innovera','Innovera',''], ['^Innovera','^Innovera','Innovera',''],
['^Intaiel','^Intaiel','Intaiel',''], ['^Intaiel','^Intaiel','Intaiel',''],
['^(INM|Integral|V\s?Series)','^Integral(\s?Memory)?','Integral Memory',''], ['^(INM|Integral|V\s?Series)','^Integral(\s?Memory)?','Integral Memory',''],
['^(Intenso|(Alu|Basic|Business|Micro|Mobile|Rainbow|Speed|Twister) Line|Rainbow)','^Intenso','Intenso',''], ['^(lntenso|Intenso|(Alu|Basic|Business|Micro|Mobile|Rainbow|Speed|Twister) Line|Rainbow)','^Intenso','Intenso',''],
['^(Iomega|ZIP\b)','^Iomega','Iomega',''], ['^(Iomega|ZIP\b|Clik!)','^Iomega','Iomega',''],
['^JingX','^JingX','JingX',''], #JingX 120G SSD - not confirmed, but guessing ['^JingX','^JingX','JingX',''], #JingX 120G SSD - not confirmed, but guessing
['^Jingyi','^Jingyi','Jingyi',''], ['^Jingyi','^Jingyi','Jingyi',''],
# NOTE: ITY2 120GB hard to find # NOTE: ITY2 120GB hard to find
['^JMicron','^JMicron(\s?Tech(nology)?)?','JMicron Tech',''], #JMicron H/W raid ['^JMicron','^JMicron(\s?Tech(nology)?)?','JMicron Tech',''], #JMicron H/W raid
['^KimMIDI','^KimMIDI','KimMIDI',''], ['^KimMIDI','^KimMIDI','KimMIDI',''],
['^Kingchux[\s-]?ing','^Kingchux[\s-]?ing','Kingchuxing',''],
['^KingDian','^KingDian','KingDian',''], ['^KingDian','^KingDian','KingDian',''],
['^Kingfast','^Kingfast','Kingfast',''], ['^Kingfast','^Kingfast','Kingfast',''],
['^KingMAX','^KingMAX','KingMAX',''], ['^KingMAX','^KingMAX','KingMAX',''],
@ -9870,6 +9882,7 @@ sub set_vendors {
['^LONDISK','^LONDISK','LONDISK',''], ['^LONDISK','^LONDISK','LONDISK',''],
['^M-Systems','^M-Systems','M-Systems',''], ['^M-Systems','^M-Systems','M-Systems',''],
['^(Mach\s*Xtreme|MXSSD|MXU)','^Mach\s*Xtreme','Mach Xtreme',''], ['^(Mach\s*Xtreme|MXSSD|MXU)','^Mach\s*Xtreme','Mach Xtreme',''],
['^Maximus','^Maximus','Maximus',''],
['^(MAXTOR|Atlas|TM[0-9]{4})','^MAXTOR','Maxtor',''], # note M2 M3 is usually maxtor, but can be samsung ['^(MAXTOR|Atlas|TM[0-9]{4})','^MAXTOR','Maxtor',''], # note M2 M3 is usually maxtor, but can be samsung
['^(Memorex|TravelDrive|TD\s?Classic)','^Memorex','Memorex',''], ['^(Memorex|TravelDrive|TD\s?Classic)','^Memorex','Memorex',''],
# note: C300/400 can be either micron or crucial, but C400 is M4 from crucial # note: C300/400 can be either micron or crucial, but C400 is M4 from crucial
@ -9903,6 +9916,7 @@ sub set_vendors {
['^PALIT','PALIT','Palit',''], # ssd ['^PALIT','PALIT','Palit',''], # ssd
['^PERC\b','','Dell PowerEdge RAID Card',''], # ssd ['^PERC\b','','Dell PowerEdge RAID Card',''], # ssd
['^(PS[8F]|Patriot)','^Patriot([-\s]?Memory)?','Patriot',''], ['^(PS[8F]|Patriot)','^Patriot([-\s]?Memory)?','Patriot',''],
['PHISON[\s-]?','PHISON[\s-]?','Phison',''],# E12-256G-PHISON-SSD-B3-BB1
['^Pioneer','Pioneer','Pioneer',''], ['^Pioneer','Pioneer','Pioneer',''],
['^PIX[\s]?JR','^PIX[\s]?JR','Disney',''], ['^PIX[\s]?JR','^PIX[\s]?JR','Disney',''],
['^(PLEXTOR|PX-)','^PLEXTOR','Plextor',''], ['^(PLEXTOR|PX-)','^PLEXTOR','Plextor',''],
@ -9966,6 +9980,7 @@ sub set_vendors {
['^USBTech','^USBTech','USBTech',''], ['^USBTech','^USBTech','USBTech',''],
['^(UG|Unigen)','^Unigen','Unigen',''], ['^(UG|Unigen)','^Unigen','Unigen',''],
['^(OOS[1-9]|Utania)','Utania','Utania',''], ['^(OOS[1-9]|Utania)','Utania','Utania',''],
['^U-TECH','U-TECH','U-Tech',''],
['^VBOX','','VirtualBox',''], ['^VBOX','','VirtualBox',''],
['^(Verbatim|STORE N GO)','^Verbatim','Verbatim',''], ['^(Verbatim|STORE N GO)','^Verbatim','Verbatim',''],
['^V-GEN','^V-GEN','V-Gen',''], ['^V-GEN','^V-GEN','V-Gen',''],
@ -10013,7 +10028,7 @@ sub device_vendor {
$model = 'N/A'; $model = 'N/A';
} }
} }
$model =~ s/^[\[\s_-]+|[\s\-_-]+$//g; $model =~ s/^[\/\[\s_-]+|[\/\s_-]+$//g;
$model =~ s/\s\s/ /g; $model =~ s/\s\s/ /g;
@data = ($vendor,$model); @data = ($vendor,$model);
last; last;
@ -10268,6 +10283,10 @@ sub card_data {
$version ||= 'N/A'; $version ||= 'N/A';
$rows[$j]{main::key($num++,0,3,'v')} = $version; $rows[$j]{main::key($num++,0,3,'v')} = $version;
} }
if ($b_admin && $row[10]){
$row[10] = main::get_driver_modules($row[9],$row[10]);
$rows[$j]{main::key($num++,0,3,'alternate')} = $row[10] if $row[10];
}
if ($extra > 0){ if ($extra > 0){
$rows[$j]{main::key($num++,0,2,'bus ID')} = (!$row[2] && !$row[3]) ? 'N/A' : "$row[2].$row[3]"; $rows[$j]{main::key($num++,0,2,'bus ID')} = (!$row[2] && !$row[3]) ? 'N/A' : "$row[2].$row[3]";
} }
@ -11884,6 +11903,10 @@ sub card_data {
$version ||= 'N/A'; $version ||= 'N/A';
$rows[$j]{main::key($num++,0,3,'v')} = $version; $rows[$j]{main::key($num++,0,3,'v')} = $version;
} }
if ($b_admin && $row[10]){
$row[10] = main::get_driver_modules($row[9],$row[10]);
$rows[$j]{main::key($num++,0,3,'modules')} = $row[10] if $row[10];
}
$row[8] ||= 'N/A'; $row[8] ||= 'N/A';
# as far as I know, wifi has no port, but in case it does in future, use it # as far as I know, wifi has no port, but in case it does in future, use it
$rows[$j]{main::key($num++,0,2,'port')} = $row[8] if (!$b_wifi || ( $b_wifi && $row[8] ne 'N/A') ); $rows[$j]{main::key($num++,0,2,'port')} = $row[8] if (!$b_wifi || ( $b_wifi && $row[8] ne 'N/A') );
@ -15936,6 +15959,7 @@ sub lm_sensors_data {
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-asus-chassis-1.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-devnull-1.txt";
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-jammin1.txt"; #my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-jammin1.txt";
#my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-mx-incorrect-1.txt";
# my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-maximus-arch-1.txt"; # my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-maximus-arch-1.txt";
# @sensors_data = main::reader($file); # @sensors_data = main::reader($file);
# print join ("\n", @sensors_data), "\n"; # print join ("\n", @sensors_data), "\n";
@ -17734,24 +17758,26 @@ sub get_compiler_version_linux {
# 6 - wm version # 6 - wm version
{ {
package DesktopEnvironment; package DesktopEnvironment;
my ($b_gtk,$b_qt,$b_xprop,$desktop_session,$kde_session_version,$xdg_desktop, my ($b_gtk,$b_qt,$b_xprop,$desktop_session,$gdmsession,$kde_session_version,
@desktop,@data,@xprop); $xdg_desktop,@desktop,@data,@xprop);
sub get { sub get {
# NOTE $XDG_CURRENT_DESKTOP envvar is not reliable, but it shows certain desktops better. # NOTE $XDG_CURRENT_DESKTOP envvar is not reliable, but it shows certain desktops better.
# most desktops are not using it as of 2014-01-13 (KDE, UNITY, LXDE. Not Gnome) # most desktops are not using it as of 2014-01-13 (KDE, UNITY, LXDE. Not Gnome)
$desktop_session = ( $ENV{'DESKTOP_SESSION'} ) ? lc($ENV{'DESKTOP_SESSION'}) : ''; $desktop_session = ( $ENV{'DESKTOP_SESSION'} ) ? lc($ENV{'DESKTOP_SESSION'}) : '';
$xdg_desktop = ( $ENV{'XDG_CURRENT_DESKTOP'} ) ? lc($ENV{'XDG_CURRENT_DESKTOP'}) : ''; $xdg_desktop = ( $ENV{'XDG_CURRENT_DESKTOP'} ) ? lc($ENV{'XDG_CURRENT_DESKTOP'}) : '';
$kde_session_version = ($ENV{'KDE_SESSION_VERSION'}) ? $ENV{'KDE_SESSION_VERSION'} : ''; $kde_session_version = ($ENV{'KDE_SESSION_VERSION'}) ? $ENV{'KDE_SESSION_VERSION'} : '';
# for fallback to fallback protections re false gnome id
$gdmsession = ( $ENV{'GDMSESSION'} ) ? lc($ENV{'GDMSESSION'}) : '';
main::set_ps_gui() if ! $b_ps_gui; main::set_ps_gui() if ! $b_ps_gui;
get_kde_trinity_data(); get_kde_trinity_data();
if (!@desktop){ if (!@desktop){
get_env_de_data(); get_env_de_data();
} }
if (!@desktop){ if (!@desktop){
get_env_xprop_de_data(); get_env_xprop_gnome_based_data();
} }
if (!@desktop && $b_xprop ){ if (!@desktop && $b_xprop ){
get_xprop_de_data(); get_env_xprop_non_gnome_based_data();
} }
if (!@desktop){ if (!@desktop){
get_ps_de_data(); get_ps_de_data();
@ -17772,7 +17798,6 @@ sub get_kde_trinity_data {
eval $start if $b_log; eval $start if $b_log;
my ($program,@version_data,@version_data2); my ($program,@version_data,@version_data2);
my $kde_full_session = ($ENV{'KDE_FULL_SESSION'}) ? $ENV{'KDE_FULL_SESSION'} : ''; my $kde_full_session = ($ENV{'KDE_FULL_SESSION'}) ? $ENV{'KDE_FULL_SESSION'} : '';
if ($desktop_session eq 'trinity' || $xdg_desktop eq 'trinity' || (grep {/^tde/} @ps_gui) ){ if ($desktop_session eq 'trinity' || $xdg_desktop eq 'trinity' || (grep {/^tde/} @ps_gui) ){
$desktop[0] = 'Trinity'; $desktop[0] = 'Trinity';
if ($program = main::check_program('kdesktop')){ if ($program = main::check_program('kdesktop')){
@ -17894,23 +17919,27 @@ sub get_env_de_data {
} }
eval $end if $b_log; eval $end if $b_log;
} }
sub get_env_xprop_de_data { sub get_env_xprop_gnome_based_data {
eval $start if $b_log; eval $start if $b_log;
my ($program,$value,@version_data); my ($program,$value,@version_data);
# NOTE: Always add to set_prop the search term if you add an item!! # NOTE: Always add to set_prop the search term if you add an item!!
set_xprop(); set_xprop();
# add more as discovered
return if $xdg_desktop eq 'xfce' || $gdmsession eq 'xfce';
# note that cinnamon split from gnome, and and can now be id'ed via xprop, # note that cinnamon split from gnome, and and can now be id'ed via xprop,
# but it will still trigger the next gnome true case, so this needs to go # but it will still trigger the next gnome true case, so this needs to go
# before gnome test eventually this needs to be better organized so all the # before gnome test eventually this needs to be better organized so all the
# xprop tests are in the same section, but this is good enough for now. # xprop tests are in the same section, but this is good enough for now.
# NOTE: was checking for 'muffin' but that's not part of cinnamon # NOTE: was checking for 'muffin' but that's not part of cinnamon
if ( (main::check_program('muffin') || main::check_program('cinnamon-session') ) && if ( $xdg_desktop eq 'cinnamon' || $gdmsession eq 'cinnamon' ||
(main::check_program('muffin') || main::check_program('cinnamon-session') ) &&
($b_xprop && main::awk(\@xprop,'_muffin') )){ ($b_xprop && main::awk(\@xprop,'_muffin') )){
($desktop[0],$desktop[1]) = main::program_data('cinnamon','cinnamon',0); ($desktop[0],$desktop[1]) = main::program_data('cinnamon','cinnamon',0);
$b_gtk = 1; $b_gtk = 1;
$desktop[0] ||= 'Cinnamon'; $desktop[0] ||= 'Cinnamon';
} }
elsif ($xdg_desktop eq 'mate' || ( $b_xprop && main::awk(\@xprop,'_marco') )){ elsif ($xdg_desktop eq 'mate' || $gdmsession eq 'mate' ||
( $b_xprop && main::awk(\@xprop,'_marco') )){
# NOTE: mate-about and mate-sesssion vary which has the higher number, neither # NOTE: mate-about and mate-sesssion vary which has the higher number, neither
# consistently corresponds to the actual MATE version, so check both. # consistently corresponds to the actual MATE version, so check both.
my %versions = ('mate-about' => '','mate-session' => ''); my %versions = ('mate-about' => '','mate-session' => '');
@ -17926,11 +17955,8 @@ sub get_env_xprop_de_data {
# $b_gtk = 1; # $b_gtk = 1;
$desktop[0] ||= 'MATE'; $desktop[0] ||= 'MATE';
} }
# note, GNOME_DESKTOP_SESSION_ID is deprecated so we'll see how that works out # See sub for logic and comments
# https://bugzilla.gnome.org/show_bug.cgi?id=542880. elsif (check_gnome() ){
# NOTE: manjaro is leaving XDG data null, which forces the manual check for gnome, sigh...
elsif ($xdg_desktop eq 'gnome' || $ENV{'GNOME_DESKTOP_SESSION_ID'} ||
(main::check_program('gnome-shell') && $b_xprop && main::awk(\@xprop,'^_gnome') ) ){
if (main::check_program('gnome-about') ) { if (main::check_program('gnome-about') ) {
($desktop[0],$desktop[1]) = main::program_data('gnome-about'); ($desktop[0],$desktop[1]) = main::program_data('gnome-about');
} }
@ -17942,7 +17968,49 @@ sub get_env_xprop_de_data {
} }
eval $end if $b_log; eval $end if $b_log;
} }
sub get_xprop_de_data { # note, GNOME_DESKTOP_SESSION_ID is deprecated so we'll see how that works out
# https://bugzilla.gnome.org/show_bug.cgi?id=542880.
# NOTE: manjaro is leaving XDG data null, which forces the manual check for gnome, sigh...
# some gnome programs can trigger a false xprop gnome ID
# _GNOME_BACKGROUND_REPRESENTATIVE_COLORS(STRING) = "rgb(23,31,35)"
sub check_gnome {
eval $start if $b_log;
my ($b_gnome,$detection) = (0,'');
if ($xdg_desktop && $xdg_desktop eq 'gnome'){
$detection = 'xdg_current_desktop';
$b_gnome = 1;
}
elsif ($xdg_desktop && $xdg_desktop ne 'gnome'){
$detection = 'xdg_current_desktop';
}
# possible values: lightdm-xsession, only positive match tests will work
elsif ($gdmsession && $gdmsession eq 'gnome'){
$detection = 'gdmsession';
$b_gnome = 1;
}
# risky: Debian: $DESKTOP_SESSION = lightdm-xsession; Manjaro/Arch = xfce
# note that mate/cinnamon would already have been caught so no need to add
# explicit tests for them
elsif ($desktop_session && $desktop_session eq 'gnome'){
$detection = 'desktop_session';
$b_gnome = 1;
}
# possible value: this-is-deprecated, but I believe only gnome based desktops
# set this variable, so it doesn't matter what it contains
elsif ($ENV{'GNOME_DESKTOP_SESSION_ID'}){
$detection = 'gnome_destkop_session_id';
$b_gnome = 1;
}
# maybe use ^_gnome_session instead? try it for a while
elsif ($b_xprop && main::check_program('gnome-shell') && main::awk(\@xprop,'^_gnome_session')){
$detection = 'xprop-root';
$b_gnome = 1;
}
main::log_data('data','$detection:$b_gnome',$detection . ":$b_gnome") if $b_log;
return $b_gnome;
eval $end if $b_log;
}
sub get_env_xprop_non_gnome_based_data {
eval $start if $b_log; eval $start if $b_log;
my ($program,@version_data,$version); my ($program,@version_data,$version);
#print join "\n", @xprop, "\n"; #print join "\n", @xprop, "\n";
@ -17950,7 +18018,8 @@ sub get_xprop_de_data {
# alternate: xfce4-about --version > xfce4-about 4.10.0 (Xfce 4.10) # alternate: xfce4-about --version > xfce4-about 4.10.0 (Xfce 4.10)
# note: some distros/wm (e.g. bunsen) set xdg to xfce to solve some other # note: some distros/wm (e.g. bunsen) set xdg to xfce to solve some other
# issues so don't test for that. $xdg_desktop eq 'xfce' # issues so don't test for that. $xdg_desktop eq 'xfce'
if ((main::check_program('xfdesktop')) && main::awk(\@xprop,'^(xfdesktop|xfce)' )){ if ($xdg_desktop eq 'xfce' || $gdmsession eq 'xfce' ||
(main::check_program('xfdesktop')) && main::awk(\@xprop,'^(xfdesktop|xfce)' )){
# this is a very expensive test that doesn't usually result in a find # this is a very expensive test that doesn't usually result in a find
# talk to xfce to see what id they will be using for xfce 5 # talk to xfce to see what id they will be using for xfce 5
# if (main::awk(\@xprop, 'xfce4')){ # if (main::awk(\@xprop, 'xfce4')){
@ -17987,15 +18056,16 @@ sub get_xprop_de_data {
$desktop[2] = $data[3]; $desktop[2] = $data[3];
} }
} }
elsif ( (main::check_program('enlightenment') || main::check_program('moksha') ) && elsif ( $xdg_desktop eq 'moksha' || $gdmsession eq 'moksha' ||
main::awk(\@xprop,'moksha') ){ (main::check_program('enlightenment') || main::check_program('moksha') ) && main::awk(\@xprop,'moksha') ){
# no -v or --version but version is in xprop -root # no -v or --version but version is in xprop -root
# ENLIGHTENMENT_VERSION(STRING) = "Moksha 0.2.0.15989" # ENLIGHTENMENT_VERSION(STRING) = "Moksha 0.2.0.15989"
$desktop[0] = 'Moksha'; $desktop[0] = 'Moksha';
$desktop[1] = main::awk(\@xprop,'(enlightenment|moksha)_version',2,'\s+=\s+' ); $desktop[1] = main::awk(\@xprop,'(enlightenment|moksha)_version',2,'\s+=\s+' );
$desktop[1] =~ s/"?(Moksha|Enlightenment)\s([^"]+)"?/$2/i if $desktop[1]; $desktop[1] =~ s/"?(Moksha|Enlightenment)\s([^"]+)"?/$2/i if $desktop[1];
} }
elsif ( main::check_program('enlightenment') && main::awk(\@xprop,'enlightenment' ) ){ elsif ( $xdg_desktop eq 'enlightenment' || $gdmsession eq 'enlightenment' ||
(main::check_program('enlightenment') && main::awk(\@xprop,'enlightenment' ) ) ){
# no -v or --version but version is in xprop -root # no -v or --version but version is in xprop -root
# ENLIGHTENMENT_VERSION(STRING) = "Enlightenment 0.16.999.49898" # ENLIGHTENMENT_VERSION(STRING) = "Enlightenment 0.16.999.49898"
$desktop[0] = 'Enlightenment'; $desktop[0] = 'Enlightenment';
@ -18006,7 +18076,7 @@ sub get_xprop_de_data {
# wm, so we want to get the main controlling desktop first, then fall back to the wm # wm, so we want to get the main controlling desktop first, then fall back to the wm
# detections. get_ps_de_data() and get_wm() will handle alternate wm detections. # detections. get_ps_de_data() and get_wm() will handle alternate wm detections.
if (!$desktop[0]){ if (!$desktop[0]){
# 0 check program; 1 xprop search; 23: data; 3 - optional: ps_gui search # 0 check program; 1 xprop search; 2: data; 3 - optional: ps_gui search
my @desktops =( my @desktops =(
['icewm','icewm','icewm'], ['icewm','icewm','icewm'],
# debian package: i3-wm # debian package: i3-wm
@ -18887,7 +18957,23 @@ sub ubuntu_id {
return $id; return $id;
} }
} }
# return all device modules not including driver
sub get_driver_modules {
eval $start if $b_log;
my ($driver,$modules) = @_;
return if ! $modules;
my @mods = split /,\s+/, $modules;
if ($driver){
@mods = grep {!/^$driver$/} @mods;
$modules = join ',', @mods;
}
log_data('data','$modules',$modules) if $b_log;
eval $end if $b_log;
return $modules;
}
# 1: driver; 2: modules, comma separated, return only modules
# which do not equal the driver string itself. Sometimes the module
# name is different from the driver name, even though it's the same thing.
sub get_gcc_data { sub get_gcc_data {
eval $start if $b_log; eval $start if $b_log;
my ($gcc,@data,@gccs,@temp); my ($gcc,@data,@gccs,@temp);
@ -21628,9 +21714,9 @@ sub generate_info_data {
my $compiler = ($b_gcc || $b_clang) ? '': 'N/A'; my $compiler = ($b_gcc || $b_clang) ? '': 'N/A';
$data{$data_name}[$index]{main::key($num++,1,1,'Compilers')} = $compiler; $data{$data_name}[$index]{main::key($num++,1,1,'Compilers')} = $compiler;
if ($b_gcc){ if ($b_gcc){
$data{$data_name}[$index]{main::key($num++,0,2,'gcc')} = $gcc; $data{$data_name}[$index]{main::key($num++,1,2,'gcc')} = $gcc;
if ( $extra > 1 && $gcc_alt){ if ( $extra > 1 && $gcc_alt){
$data{$data_name}[$index]{main::key($num++,0,2,'alt')} = $gcc_alt; $data{$data_name}[$index]{main::key($num++,0,3,'alt')} = $gcc_alt;
} }
} }
if ($b_clang){ if ($b_clang){

23
inxi.1
View file

@ -1,4 +1,4 @@
.TH INXI 1 "2020\-06\-28" inxi "inxi manual" .TH INXI 1 "2020\-07\-26" inxi "inxi manual"
.SH NAME .SH NAME
inxi \- Command line system information script for console and IRC inxi \- Command line system information script for console and IRC
@ -1059,6 +1059,14 @@ administrators or other machine admins.
The \fB\-\-admin\fR option sets \fB\-xxx\fR, and only has to be used once. The \fB\-\-admin\fR option sets \fB\-xxx\fR, and only has to be used once.
It will trigger the following features: It will trigger the following features:
.TP
.B \-a \-A\fR
\- Adds, if present, possible \fBalternate:\fR kernel modules capable of driving
each \fBDevice\-x\fR (not including the current \fBdriver:\fR). If no non\-driver
modules found, shows nothing. NOTE: just because it lists a module does NOT mean it is
available in the system, it's just something the kernel knows could possibly be used
instead.
.TP .TP
.B \-a \-C\fR .B \-a \-C\fR
\- Adds CPU family, model\-id, and stepping (replaces \fBrev\fR of \fB\-Cx\fR). \- Adds CPU family, model\-id, and stepping (replaces \fBrev\fR of \fB\-Cx\fR).
@ -1204,6 +1212,11 @@ Monitor\-2: VGA\-0 res: 1280x1024 hz: 60 dpi: 86
size: 376x301mm (14.8x11.9") diag: 482mm (19") size: 376x301mm (14.8x11.9") diag: 482mm (19")
.... ....
.fi .fi
\- Adds, if present, possible \fBalternate:\fR kernel modules capable of driving
each \fBDevice\-x\fR (not including the current \fBdriver:\fR). If no non\-driver
modules found, shows nothing. NOTE: just because it lists a module does NOT mean it is
available in the system, it's just something the kernel knows could possibly be used
instead.
.TP .TP
.B \-a \-I\fR .B \-a \-I\fR
@ -1234,6 +1247,14 @@ For \fB\-j\fR row 1 output:
\fBKernel: swappiness: 60 (default) cache pressure: 90 (default 100)\fR \fBKernel: swappiness: 60 (default) cache pressure: 90 (default 100)\fR
.TP
.B \-a \-n\fR, \fB\-a \-N\fR, \fB\-a \-i\fR
\- Adds, if present, possible \fBalternate:\fR kernel modules capable of driving
each \fBDevice\-x\fR (not including the current \fBdriver:\fR). If no non\-driver
modules found, shows nothing. NOTE: just because it lists a module does NOT mean it is
available in the system, it's just something the kernel knows could possibly be used
instead.
.TP .TP
.B \-a \-p\fR,\fB\-a \-P\fR .B \-a \-p\fR,\fB\-a \-P\fR
\- Adds raw partition size, including file system overhead, partition table, e.g. \- Adds raw partition size, including file system overhead, partition table, e.g.

View file

@ -1,3 +1,66 @@
=====================================================================================
Version: 3.1.05
Patch: 00
Date: 2020-07-26
-----------------------------------
Changes:
-----------------------------------
Bug fixes!!! New Features!! Why wait!!!
Bugs:
1. Issue #220 on github: inxi misidentified XFCE as Gnome. This was a kind of core
issue, and pointed to some logic that needed updating, and some inadequate
assumptions made, and some too loose cascade of tests. Hopefully now xfce will
almost never get misidentified, and the other primary desktops ID'ed either from
$ENV or from xrop -root will be slightly more accurately identified as well.
Note that this fix creates a possibility for obscure misconfigured desktops to
be ID'ed wrong, but in this case, that will be technically a bug for them, but
with the new fixes, that situation will be cleaner to handle internally in the
desktop ID logic.
Also tightened the final Gnome fallback detection to not trigger a possible
false positive, it was testing for ^_GNOME but that is not adequate, because
some gnome programs will trigger these values in xprop -root even if GNOME
is not running. Should be safer now, hopefully no new bugs will be triggered
by these changes.
Fixes:
1. Missed an indentation level for -y1, gcc alt should have been indented in
one more level, now it is.
2. In disk vendors/family, didn't clean items starting with '/', this is
now corrected. Yes, some do, don't ask me why. Might be cases like:
Crucial/Micron maybe, where the first ID is grabbed, not sure.
Enhancements:
1. New Disk vendors, vendor IDs!!! The list never ends!!! We've finally found
infinity, and it is the unceasing wave of tiny and not so tiny disks and their
Ids.
2. New feature: for -Aa, -Na/-na/-ia, -Ga, now will add the modules the kernel
could support if they were available on the Device-x lines of those items.
This was made an -a option because it really makes no sense, if it's a regular
option, users might think that for example an nvidia card had a nouveua driver
when it didn't, when in fact, all the kernel is saying is that it knows those
listed modules 'couid' be used or present. This corresponds to the Display:
item in -Ga, that lists 'alternate:' drivers that Xorg knows about that could
likewise be used, if they were on the system.
In other words these are --admin options because otherwise users might get confused,
so this is one where you want to know the man explanation before you ask for it.
It is useful however if you're not sure what your choices are for kernel modules.
When the alternate driver is the same as the active driver, or if none is found,
it does not show the alternate: item to avoid spamming.
-----------------------------------
-- Harald Hope - Sun, 26 Jul 2020 19:10:21 -0700
===================================================================================== =====================================================================================
Version: 3.1.04 Version: 3.1.04
Patch: 00 Patch: 00