diff options
author | Unit 193 <unit193@unit193.net> | 2020-07-28 00:28:03 -0400 |
---|---|---|
committer | Unit 193 <unit193@unit193.net> | 2020-07-28 00:28:03 -0400 |
commit | e93a1314e417f0085ec225d2855f3a1deecc3678 (patch) | |
tree | 4e9ba20d98f7ff036ce8a12c42841c63ee200867 /inxi | |
parent | 48fce2fe90c80279ad5da163b6d29b46e215de6f (diff) | |
download | inxi-e93a1314e417f0085ec225d2855f3a1deecc3678.tar.bz2 inxi-e93a1314e417f0085ec225d2855f3a1deecc3678.tar.xz inxi-e93a1314e417f0085ec225d2855f3a1deecc3678.tar.zst |
New upstream version 3.1.05-1.upstream/3.1.05-1
Diffstat (limited to 'inxi')
-rwxr-xr-x | inxi | 156 |
1 files changed, 121 insertions, 35 deletions
@@ -39,8 +39,8 @@ use POSIX qw(uname strftime ttyname); ## INXI INFO ## my $self_name='inxi'; -my $self_version='3.1.04'; -my $self_date='2020-06-28'; +my $self_version='3.1.05'; +my $self_date='2020-07-27'; my $self_patch='00'; ## END INXI INFO ## @@ -4659,7 +4659,10 @@ sub show_options { ['0', '', '', $line ], ['0', '', '', "Output Control Options:" ], ['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 (dmidecode+root/sudo required); CPU vulnerabilities (bugs); family, model-id, stepping - format: hex (decimal) if greater @@ -4668,11 +4671,14 @@ sub show_options { USB drive specifics; SMART report." ], ['2', '-G', '', "If available: Xorg Display ID, Screens total, default Screen, 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 number of lib files found for each package manager if not -r." ], ['2', '-j,-p,-P', '', "For swap (if available): swappiness and vfs cache 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, percent available for user, block size of file system (root required)." ], ['2', '-r', '', "Packages, see -Ia." ], @@ -6259,6 +6265,10 @@ sub card_data { $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){ $rows[$j]{main::key($num++,0,2,'bus ID')} = (!$row[2] && !$row[3]) ? 'N/A' : "$row[2].$row[3]"; } @@ -8732,10 +8742,10 @@ sub create_output { } $rows[$j]{main::key($num++,0,2,'size')} = $size; if ($b_admin && $row{'block-physical'}){ - $rows[$j]{main::key($num++,0,2,'block size')} = ''; - $rows[$j]{main::key($num++,0,2,'physical')} = $row{'block-physical'} . ' B'; - $rows[$j]{main::key($num++,0,2,'logical')} = ($row{'block-logical'}) ? $row{'block-logical'} . ' B' : 'N/A'; - } + $rows[$j]{main::key($num++,1,2,'block size')} = ''; + $rows[$j]{main::key($num++,0,3,'physical')} = $row{'block-physical'} . ' B'; + $rows[$j]{main::key($num++,0,3,'logical')} = ($row{'block-logical'}) ? $row{'block-logical'} . ' B' : 'N/A'; + }} if ($extra > 1 && $row{'speed'}){ if ($row{'sata'}){ $rows[$j]{main::key($num++,0,2,'sata')} = $row{'sata'}; @@ -9708,7 +9718,7 @@ sub set_vendors { # 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 # 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 # 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',''], @@ -9737,7 +9747,7 @@ sub set_vendors { ['^(PNY|Hook\s?Attache|SSD2SC)','^PNY\s','PNY','','^PNY'], # note: get rid of: M[DGK] becasue mushkin starts with MK # 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 ## # unknown: AL25744_12345678; ADP may be usb 2.5" adapter; udisk unknown: Z1E6FTKJ 00AAKS # SSD2SC240G726A10 MRS020A128GTS25C EHSAJM0016GB @@ -9805,6 +9815,7 @@ sub set_vendors { ['^Fantom','^Fantom( Drive[s]?)?','Fantom Drives',''], ['^Faspeed','^Faspeed','Faspeed',''], ['^FASTDISK','^FASTDISK','FASTDISK',''], + ['^Fordisk','^Fordisk','Fordisk',''], # FK0032CAAZP/FB160C4081 FK or FV can be HP but can be other things ['^FORESEE','^FORESEE','Foresee',''], ['^FOXLINE','^FOXLINE','Foxline',''], # russian vendor? @@ -9842,13 +9853,14 @@ sub set_vendors { ['^Innovera','^Innovera','Innovera',''], ['^Intaiel','^Intaiel','Intaiel',''], ['^(INM|Integral|V\s?Series)','^Integral(\s?Memory)?','Integral Memory',''], - ['^(Intenso|(Alu|Basic|Business|Micro|Mobile|Rainbow|Speed|Twister) Line|Rainbow)','^Intenso','Intenso',''], - ['^(Iomega|ZIP\b)','^Iomega','Iomega',''], + ['^(lntenso|Intenso|(Alu|Basic|Business|Micro|Mobile|Rainbow|Speed|Twister) Line|Rainbow)','^Intenso','Intenso',''], + ['^(Iomega|ZIP\b|Clik!)','^Iomega','Iomega',''], ['^JingX','^JingX','JingX',''], #JingX 120G SSD - not confirmed, but guessing ['^Jingyi','^Jingyi','Jingyi',''], # NOTE: ITY2 120GB hard to find ['^JMicron','^JMicron(\s?Tech(nology)?)?','JMicron Tech',''], #JMicron H/W raid ['^KimMIDI','^KimMIDI','KimMIDI',''], + ['^Kingchux[\s-]?ing','^Kingchux[\s-]?ing','Kingchuxing',''], ['^KingDian','^KingDian','KingDian',''], ['^Kingfast','^Kingfast','Kingfast',''], ['^KingMAX','^KingMAX','KingMAX',''], @@ -9870,6 +9882,7 @@ sub set_vendors { ['^LONDISK','^LONDISK','LONDISK',''], ['^M-Systems','^M-Systems','M-Systems',''], ['^(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 ['^(Memorex|TravelDrive|TD\s?Classic)','^Memorex','Memorex',''], # 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 ['^PERC\b','','Dell PowerEdge RAID Card',''], # ssd ['^(PS[8F]|Patriot)','^Patriot([-\s]?Memory)?','Patriot',''], + ['PHISON[\s-]?','PHISON[\s-]?','Phison',''],# E12-256G-PHISON-SSD-B3-BB1 ['^Pioneer','Pioneer','Pioneer',''], ['^PIX[\s]?JR','^PIX[\s]?JR','Disney',''], ['^(PLEXTOR|PX-)','^PLEXTOR','Plextor',''], @@ -9966,6 +9980,7 @@ sub set_vendors { ['^USBTech','^USBTech','USBTech',''], ['^(UG|Unigen)','^Unigen','Unigen',''], ['^(OOS[1-9]|Utania)','Utania','Utania',''], + ['^U-TECH','U-TECH','U-Tech',''], ['^VBOX','','VirtualBox',''], ['^(Verbatim|STORE N GO)','^Verbatim','Verbatim',''], ['^V-GEN','^V-GEN','V-Gen',''], @@ -10013,7 +10028,7 @@ sub device_vendor { $model = 'N/A'; } } - $model =~ s/^[\[\s_-]+|[\s\-_-]+$//g; + $model =~ s/^[\/\[\s_-]+|[\/\s_-]+$//g; $model =~ s/\s\s/ /g; @data = ($vendor,$model); last; @@ -10268,6 +10283,10 @@ sub card_data { $version ||= 'N/A'; $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){ $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'; $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'; # 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') ); @@ -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-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-mx-incorrect-1.txt"; # my $file = "$ENV{'HOME'}/bin/scripts/inxi/data/sensors/sensors-maximus-arch-1.txt"; # @sensors_data = main::reader($file); # print join ("\n", @sensors_data), "\n"; @@ -17734,24 +17758,26 @@ sub get_compiler_version_linux { # 6 - wm version { package DesktopEnvironment; -my ($b_gtk,$b_qt,$b_xprop,$desktop_session,$kde_session_version,$xdg_desktop, -@desktop,@data,@xprop); +my ($b_gtk,$b_qt,$b_xprop,$desktop_session,$gdmsession,$kde_session_version, +$xdg_desktop,@desktop,@data,@xprop); sub get { # 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) $desktop_session = ( $ENV{'DESKTOP_SESSION'} ) ? lc($ENV{'DESKTOP_SESSION'}) : ''; $xdg_desktop = ( $ENV{'XDG_CURRENT_DESKTOP'} ) ? lc($ENV{'XDG_CURRENT_DESKTOP'}) : ''; $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; get_kde_trinity_data(); if (!@desktop){ get_env_de_data(); } if (!@desktop){ - get_env_xprop_de_data(); + get_env_xprop_gnome_based_data(); } if (!@desktop && $b_xprop ){ - get_xprop_de_data(); + get_env_xprop_non_gnome_based_data(); } if (!@desktop){ get_ps_de_data(); @@ -17772,7 +17798,6 @@ sub get_kde_trinity_data { eval $start if $b_log; my ($program,@version_data,@version_data2); 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) ){ $desktop[0] = 'Trinity'; if ($program = main::check_program('kdesktop')){ @@ -17894,23 +17919,27 @@ sub get_env_de_data { } eval $end if $b_log; } -sub get_env_xprop_de_data { +sub get_env_xprop_gnome_based_data { eval $start if $b_log; my ($program,$value,@version_data); # NOTE: Always add to set_prop the search term if you add an item!! 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, # 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 # 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 - 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') )){ ($desktop[0],$desktop[1]) = main::program_data('cinnamon','cinnamon',0); $b_gtk = 1; $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 # consistently corresponds to the actual MATE version, so check both. my %versions = ('mate-about' => '','mate-session' => ''); @@ -17926,11 +17955,8 @@ sub get_env_xprop_de_data { # $b_gtk = 1; $desktop[0] ||= 'MATE'; } - # 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... - elsif ($xdg_desktop eq 'gnome' || $ENV{'GNOME_DESKTOP_SESSION_ID'} || - (main::check_program('gnome-shell') && $b_xprop && main::awk(\@xprop,'^_gnome') ) ){ + # See sub for logic and comments + elsif (check_gnome() ){ if (main::check_program('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; } -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; my ($program,@version_data,$version); #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) # 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' - 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 # talk to xfce to see what id they will be using for xfce 5 # if (main::awk(\@xprop, 'xfce4')){ @@ -17987,15 +18056,16 @@ sub get_xprop_de_data { $desktop[2] = $data[3]; } } - elsif ( (main::check_program('enlightenment') || main::check_program('moksha') ) && - main::awk(\@xprop,'moksha') ){ + elsif ( $xdg_desktop eq 'moksha' || $gdmsession eq 'moksha' || + (main::check_program('enlightenment') || main::check_program('moksha') ) && main::awk(\@xprop,'moksha') ){ # no -v or --version but version is in xprop -root # ENLIGHTENMENT_VERSION(STRING) = "Moksha 0.2.0.15989" $desktop[0] = 'Moksha'; $desktop[1] = main::awk(\@xprop,'(enlightenment|moksha)_version',2,'\s+=\s+' ); $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 # ENLIGHTENMENT_VERSION(STRING) = "Enlightenment 0.16.999.49898" $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 # detections. get_ps_de_data() and get_wm() will handle alternate wm detections. 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 =( ['icewm','icewm','icewm'], # debian package: i3-wm @@ -18887,7 +18957,23 @@ sub ubuntu_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 { eval $start if $b_log; my ($gcc,@data,@gccs,@temp); @@ -21628,9 +21714,9 @@ sub generate_info_data { my $compiler = ($b_gcc || $b_clang) ? '': 'N/A'; $data{$data_name}[$index]{main::key($num++,1,1,'Compilers')} = $compiler; 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){ - $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){ |