aboutsummaryrefslogtreecommitdiffstats
path: root/inxi
diff options
context:
space:
mode:
Diffstat (limited to 'inxi')
-rwxr-xr-xinxi295
1 files changed, 181 insertions, 114 deletions
diff --git a/inxi b/inxi
index 5edb0d2..92e8cb3 100755
--- a/inxi
+++ b/inxi
@@ -49,8 +49,8 @@ use POSIX qw(ceil uname strftime ttyname);
## INXI INFO ##
my $self_name='inxi';
-my $self_version='3.3.33';
-my $self_date='2024-02-06';
+my $self_version='3.3.34';
+my $self_date='2024-04-13';
my $self_patch='00';
## END INXI INFO ##
@@ -422,9 +422,13 @@ sub set_basics {
$ENV{'LC_ALL'}='C';
# remember, perl uses the opposite t/f return as shell!!!
# some versions of busybox do not have tty, like openwrt
- $b_irc = (check_program('tty') && system('tty >/dev/null')) ? 1 : 0;
+ $b_irc = 1 if (check_program('tty') && system('tty >/dev/null'));
# print "birc: $b_irc\n";
- $b_display = ($ENV{'DISPLAY'}) ? 1 : 0;
+ # with X, DISPLAY sets, then check Wayland, other DE/WM sessions
+ if ($ENV{'DISPLAY'} || $ENV{'WAYLAND_DISPLAY'} ||
+ $ENV{'XDG_CURRENT_DESKTOP'} || $ENV{'DESKTOP_SESSION'}){
+ $b_display = 1;
+ }
$b_root = $< == 0; # root UID 0, all others > 0
$dl{'dl'} = 'curl';
$dl{'curl'} = 1;
@@ -6012,13 +6016,13 @@ my $pppid = '';
sub set {
eval $start if $b_log;
- PsData::set_cmd() if !$loaded{'ps-cmd'};
# $b_irc = 1; # for testing, like cli konvi start which shows as tty
if (!$b_irc){
# we'll run ShellData::set() for -I, but only then
}
else {
$use{'filter'} = 1;
+ PsData::set() if !$loaded{'ps-data'};
get_client_name();
if ($client{'konvi'} == 1 || $client{'konvi'} == 3){
set_konvi_data();
@@ -11504,7 +11508,8 @@ sub cp_cpu_arch {
$gen = '5';
$process = 'TSMC n3 (3nm)'; # turin could be 4nm, need more data
$year = '2023+';}
- elsif ($model =~ /^(20|40)$/){
+ # Strix Point; Granite Ridge; Krackan Point; Strix Halo
+ elsif ($model =~ /^(10|20|40|60|70)$/){
$arch = 'Zen 5';
$gen = '5';
$process = 'TSMC n3 (3nm)'; # desktop, granite ridge, confirm 2024
@@ -13917,7 +13922,7 @@ sub set_disk_vendors {
# HM320II HM320II HM
['(SAMSUNG|^(AWMB|[BC]DS20|[BC]WB|BJ[NT]|[BC]GND|CJ[NT]|CKT|CUT|[DG]3 Station|DUO\b|DUT|EB\dMW|E[CS]\d[A-Z]\d|FD\d[A-Z]\dGE4S5|[GS]2 Portable|GN|HD\d{3}[A-Z]{2}$|(HM|SP)\d{2}|HS\d|M[AB]G\d[FG]|MCC|MCBOE|MCG\d+GC|[CD]JN|MZ|^G[CD][1-9][QS]|P[BM]\d|(SSD\s?)?SM\s?841)|^SSD\s?[89]\d{2}\s(DCT|PRO|QVD|\d+[GT]B)|\bEVO\b|SV\d|[BE][A-Z][1-9]QT|YP\b|[CH]N-M|MMC[QR]E)','SAMSUNG','Samsung',''], # maybe ^SM, ^HM
# Android UMS Composite?U1
- ['(SanDisk|0781|^(A[BCD]LC[DE]|AFGCE|D[AB]4|DX[1-9]|Extreme|Firebird|S[CD]\d{2}G|SC\d{3,4}|SD(CF|S[S]?[ADQ]|SL\d+G|SU\d|U\d|\sUltra)|SDW[1-9]|SE\d{2}|SEM\d{2}|\d[STU]|U(3\b|1\d0))|Clip Sport|Cruzer|iXpand|SN(\d+G|128|256)|SSD (Plus|U1[01]0) [1-9]|ULTRA\s(FIT|trek|II)|X[1-6]\d{2})','(SanDisk|0781)','SanDisk',''],
+ ['(SanDisk|0781|^(A[BCD]LC[DE]|AFGCE|D[AB]4|DX[1-9]|Extreme|Firebird|S[CD]\d{2}G|SC\d{3,4}|SD(CF|S[S]?[ADQ]|SL\d+G|SU\d|U\d|\sUltra)|SDW[1-9]|SE\d{2}|SEM\d{2}|\d[STU]|U(3\b|1\d0))|Clip Sport|Cruzer|iXpand|SN(\d+G|128|256)|SSD (Plus|U1[01]0) [1-9]|ULTRA\s(FIT|trek|II)|^X[1-6]\d{2})','(SanDisk|0781)','SanDisk',''],
# these are HP/Sandisk cobranded. DX110064A5xnNMRI ids as HP and Sandisc
['(^DX[1-9])','^(HP\b|SANDDISK)','Sandisk/HP',''], # ssd drive, must come before seagate ST test
# real, SSEAGATE Backup+; XP1600HE30002 | 024 HN (spinpoint) ; possible usb: 24AS
@@ -14526,6 +14531,7 @@ sub disk_vendor {
# Data URLs: inxi-resources.txt Section: DriveItem device_vendor()
# $model = 'H10 HBRPEKNX0202A NVMe INTEL 512GB';
# $model = 'SD Ultra 3D 1TB';
+ # $model = 'ST8000DM004-2CX188_WCT193ZX';
set_disk_vendors() if !$vendors;
# prefilter this one, some usb enclosurs and wrong master/slave hdd show default
$model =~ s/^Initio[\s_]//i;
@@ -17579,7 +17585,7 @@ sub display_drivers_x {
chips cirrus cyrix etnaviv fbdev fbturbo fglrx geode glide glint
i128 i740 i810-dec100 i810e i810 i815 i830 i845 i855 i865 i915 i945 i965
iftv igs imstt intel ipaq ivtv mach64 mesa mga m68k modesetting neomagic
- newport nouveau nsc nvidia nv openchrome r128 radeonhd radeon rendition
+ newport nouveau nova nsc nvidia nv openchrome r128 radeonhd radeon rendition
s3virge s3 savage siliconmotion sisimedia sisusb sis sis530 sunbw2 suncg14
suncg3 suncg6 sunffb sunleo suntcx tdfx tga trident trio ts300 tseng
unichrome v4l vboxvideo vesa vga via vmware vmwgfx voodoo));
@@ -17685,6 +17691,7 @@ sub set_mesa_drivers {
'iris' => 'intel',
'lima' => 'mali',
'nouveau' => 'nvidia',
+ 'nova' => 'nvidia',
'panfrost' => 'mali/bifrost',
'r200' => 'amd',
'r300' => 'amd',
@@ -18026,8 +18033,8 @@ sub set_intel_data {
'years' => '2013',
},
{'arch' => 'Gen-7',
- 'ids' => '0152|0155|0156|0157|015a|015e|0162|0166|016a|0172|0176|0f31|0f32|' .
- '0f33',
+ 'ids' => '0152|0155|0156|0157|015a|015e|0162|0166|016a|0172|0176|0f30|0f31|' .
+ '0f32|0f33',
'code' => '',
'process' => 'Intel 22nm',
'years' => '2012-13',
@@ -18075,7 +18082,8 @@ sub set_intel_data {
},
{'arch' => 'Gen-12.2',
'ids' => '4626|4628|462a|4636|4638|463a|4682|4688|468a|468b|4690|4692|4693|' .
- '46a3|46a6|46a8|46aa|46b0|46b1|46b3|46b6|46b8|46ba|46c1|46c3|46d0|46d1|46d2',
+ '46a3|46a6|46a8|46aa|46b0|46b1|46b3|46b6|46b8|46ba|46c1|46c3|46d0|46d1|46d2|' .
+ '46d3|46d4',
'code' => '',
'process' => 'Intel 10nm',
'years' => '2021-22+',
@@ -18090,7 +18098,7 @@ sub set_intel_data {
{'arch' => 'Gen-12.7',
'ids' => '4f80|4f81|4f82|4f83|4f84|4f85|4f86|4f87|4f88|5690|5691|5692|5693|' .
'5694|5695|5696|5697|5698|56a0|56a1|56a3|56a4|56a5|56a6|56a7|56a8|56a9|56b0|' .
- '56b1|56b2|56b3|56ba|56bb|56bc|56bd',
+ '56b1|56b2|56b3|56ba|56bb|56bc|56bd|56be|56bf',
'code' => 'Alchemist',
'process' => 'TSMC n6 (7nm)',
'years' => '2022+',
@@ -18102,24 +18110,30 @@ sub set_intel_data {
'years' => '2022+',
},
{'arch' => 'Gen-13',
- 'ids' => 'a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a0|a7a1|' .
- 'a7a8|a7a9|a7aa|a7ab|a7ac|a7ad',
+ 'ids' => 'a70d|a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a0|' .
+ 'a7a1|a7a8|a7a9|a7aa|a7ab|a7ac|a7ad',
'code' => '',
'process' => 'Intel 7 (10nm)',
'years' => '2022+',
},
- {'arch' => 'Gen-14',
+ {'arch' => 'Gen-13',
'ids' => '7d40|7d45|7d55|7d60|7dd5',
'code' => '',
'process' => 'Intel 4 (7nm+)',
'years' => '2023+',
},
- {'arch' => 'Gen-15',
- 'ids' => '7d51|7d67|7dd1',
+ {'arch' => 'Gen-14',
+ 'ids' => '6420|64a0|64b0',
'code' => '',
'process' => 'TSMC 3nm',
'years' => '2024+',
},
+ {'arch' => 'Gen-15',
+ 'ids' => '7d41|7d51|7d67|7dd1',
+ 'code' => '',
+ 'process' => 'TSMC 3nm?',
+ 'years' => '2025+',
+ },
];
}
@@ -18380,13 +18394,14 @@ sub set_nv_data {
'1f07|1f08|1f0a|1f0b|1f10|1f11|1f12|1f14|1f15|1f36|1f42|1f47|1f50|1f51|1f54|' .
'1f55|1f76|1f82|1f83|1f91|1f95|1f96|1f97|1f98|1f99|1f9c|1f9d|1f9f|1fa0|1fb0|' .
'1fb1|1fb2|1fb6|1fb7|1fb8|1fb9|1fba|1fbb|1fbc|1fdd|1ff0|1ff2|1ff9|2182|2184|' .
- '2187|2188|2189|2191|2192|21c4|21d1|25a6|25a7|25a9|25aa|25ad|25ed|28b8|28f8',
+ '2187|2188|2189|2191|2192|21c4|21d1|25a6|25a7|25a9|25aa|25ad|25ed|28b0|28b8|' .
+ '28f8',
'code' => 'TUxxx',
'kernel' => '',
'legacy' => 0,
'process' => 'TSMC 12nm FF',
'release' => '',
- 'series' => '545.xx+',
+ 'series' => '550.xx+',
'status' => main::message('nv-current-eol',$date,'2026-12-xx'),
'xorg' => '',
'years' => '2018-2022',
@@ -18396,21 +18411,21 @@ sub set_nv_data {
'2204|2206|2207|2208|220a|220d|2216|2230|2231|2232|2233|2235|2236|2237|2238|' .
'2414|2420|2438|2460|2482|2484|2486|2487|2488|2489|248a|249c|249d|24a0|24b0|' .
'24b1|24b6|24b7|24b8|24b9|24ba|24bb|24c7|24c9|24dc|24dd|24e0|24fa|2503|2504|' .
- '2507|2508|2520|2521|2523|2531|2544|2560|2563|2571|2582|25a0|25a2|25a5|25ab|' .
- '25ac|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|25f9|25fa|25fb|' .
- '2838',
+ '2507|2508|2520|2521|2523|2531|2544|2560|2563|2571|2582|2584|25a0|25a2|25a5|' .
+ '25ab|25ac|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|25f9|25fa|' .
+ '25fb|2838',
'code' => 'GAxxx',
'kernel' => '',
'legacy' => 0,
'process' => 'TSMC n7 (7nm)',
'release' => '',
- 'series' => '545.xx+',
+ 'series' => '550.xx+',
'status' => main::message('nv-current-eol',$date,'2026-12-xx'),
'xorg' => '',
'years' => '2020-2023',
},
{'arch' => 'Hopper',
- 'ids' => '2321|2322|2324|2330|2331|2339|233a|2342',
+ 'ids' => '2321|2322|2324|2329|2330|2331|2339|233a|2342',
'code' => 'GH1xx',
'kernel' => '',
'legacy' => 0,
@@ -18422,15 +18437,15 @@ sub set_nv_data {
'years' => '2022+',
},
{'arch' => 'Lovelace',
- 'ids' => '2684|2685|26b1|26b2|26b3|26b5|26b9|26ba|2704|2705|2717|2730|2757|' .
- '2770|2782|2783|2786|27a0|27b0|27b1|27b2|27b6|27b8|27ba|27bb|27e0|27fb|2803|' .
- '2805|2820|2860|2882|28a0|28a1|28e0|28e1',
+ 'ids' => '2684|2685|26b1|26b2|26b3|26b5|26b9|26ba|2702|2704|2705|2709|2717|' .
+ '2730|2757|2770|2782|2783|2786|2788|27a0|27b0|27b1|27b2|27b6|27b8|27ba|27bb|' .
+ '27e0|27fb|2803|2805|2808|2820|2860|2882|28a0|28a1|28b9|28ba|28bb|28e0|28e1',
'code' => 'AD1xx',
'kernel' => '',
'legacy' => 0,
'process' => 'TSMC n4 (5nm)',
'release' => '',
- 'series' => '545.xx+',
+ 'series' => '550.xx+',
'status' => $status_current,
'xorg' => '',
'years' => '2022+',
@@ -20751,7 +20766,6 @@ sub info_data {
my $j = scalar @$rows;
my $num = 0;
my $services;
- PsData::set_cmd() if !$loaded{'ps-cmd'};
PsData::set_network();
if (@{$ps_data{'network-services'}}){
main::make_list_value($ps_data{'network-services'},\$services,',','sort');
@@ -20759,7 +20773,6 @@ sub info_data {
else {
$services = main::message('network-services');
}
-
push(@$rows,{
main::key($num++,1,1,'Info') => '',
main::key($num++,0,2,'services') => $services,
@@ -21372,6 +21385,7 @@ sub set_partitions {
# $file = "$fake_data_dir/block-devices/df/df-kT-wrapped-1.txt";
# @partitions_working = main::reader($file);
}
+ # NOTE: add push(@partitions_working,'data') here to emulate item; match unmounted
# print Data::Dumper::Dumper \@partitions_working;
# Determine positions
if (@partitions_working){
@@ -21459,6 +21473,7 @@ sub set_partitions {
($b_fs && ($row[2] == 0 || $row[1] =~ /^(autofs|devtmpfs|iso9660|tmpfs)$/))){
next;
}
+ # print "row 0:", $row[0],"\n";
# cygwin C:\cygwin passes this test so has to be handled later
if ($row[0] =~ /^\/dev\/|:\/|\/\//){
# this could point to by-label or by-uuid so get that first. In theory, abs_path should
@@ -21480,6 +21495,15 @@ sub set_partitions {
$temp =~ s|^/.*/||;
$dev_mapped = $dmmapper{$temp};
}
+ elsif ($bsd_type && $row[0] =~ m|^/dev/gpt[^/]*/|){
+ my $temp1 = $row[0];
+ $temp1 =~ s|^/dev/||;
+ my $temp2 = GlabelData::get($temp1);
+ if ($temp2 && $temp2 ne $temp1){
+ $dev_mapped = $row[0];
+ $row[0] = $temp2;
+ }
+ }
$dev_base = $row[0];
$dev_base =~ s|^/.*/||;
$part = LsblkData::get($dev_base) if @lsblk;
@@ -21664,7 +21688,7 @@ sub swap_data {
}
else {
if ($path = main::check_program('swapctl')){
- # output in in KB blocks
+ # output in in KB blocks$mount
@working = main::grabber("$path -l -k 2>/dev/null");
}
($size_id,$used_id) = (1,2);
@@ -21674,16 +21698,16 @@ sub swap_data {
# now add the swap partition data, don't want to show swap files, just partitions,
# though this can include /dev/ramzswap0. Note: you can also use /proc/swaps for this
# data, it's the same exact output as swapon -s
- foreach (@working){
+ foreach my $line (@working){
#next if ! /^\/dev/ || /^\/dev\/(ramzwap|zram)/;
- next if /^(Device|Filename|no swap)/;
+ next if $line =~ /^(Device|Filename|no swap)/;
($block_size,$dev_base,$dev_mapped,$dev_type,$label,$maj_min,$mount,
$swap_type,$uuid) = ('','','','','','','','partition','');
($priority,$zram_comp_avail,$zram_comp,$zram_mcs) = ();
- @data = split(/\s+/, $_);
+ @data = split(/\s+/, $line);
# /dev/zramX; ramzswapX == compcache, legacy version of zram.
# /run/initramfs/dev/zram0; /dev/ramzswap0
- if (/^\/(dev|run).*?\/((compcache|ramzwap|zram)\d+)/i){
+ if ($line =~ /^\/(dev|run).*?\/((compcache|ramzwap|zram)\d+)/i){
$dev_base = $2;
$swap_type = 'zram';
$dev_type = 'dev';
@@ -21694,7 +21718,7 @@ sub swap_data {
elsif ($data[1] && $data[1] eq 'ram'){
$swap_type = 'ram';
}
- elsif (m|^/dev|){
+ elsif ($line =~ m|^/dev|){
$swap_type = 'partition';
$dev_base = $data[0];
$dev_base =~ s|^/dev/||;
@@ -21710,8 +21734,17 @@ sub swap_data {
}
}
else {
+ my $part_id = $dev_base;
+ if ($dev_base =~ m|^gpt[^/]*/|){
+ my $temp = GlabelData::get($dev_base);
+ if ($temp && $temp ne $dev_base){
+ $dev_mapped = '/dev/' . $dev_base;
+ $part_id = $dev_base = $temp;
+ $mount = '/dev/' . $temp;
+ }
+ }
if ($show{'label'} || $show{'uuid'}){
- my $temp = DiskDataBSD::get($data[0]);
+ my $temp = DiskDataBSD::get($part_id);
$block_size = $temp->{'logical-block-size'};
$label = $temp->{'label'};
$uuid = $temp->{'uuid'};
@@ -21727,7 +21760,7 @@ sub swap_data {
# swpaon -s: /dev/sdb1 partition 16383996 109608 -2
# swapctl -l -k: /dev/label/swap0.eli 524284 154092
# users could have space in swapfile name
- if (/^($pattern2)\s+($pattern1)\s+/){
+ if (!$mount && $line =~ /^($pattern2)\s+($pattern1)\s+/){
$mount = main::trimmer($1);
}
$size = $data[$size_id];
@@ -23233,50 +23266,50 @@ sub soft_data {
sub zfs_data {
eval $start if $b_log;
my ($zpool) = @_;
- my (@components,@zfs);
+ my (@data,@zfs);
my ($allocated,$free,$size,$size_holder,$status,$zfs_used,$zfs_avail,
- $zfs_size,@working);
+ $zfs_size);
my $b_v = 1;
my ($i,$j,$k) = (0,0,0);
if ($fake{'raid-zfs'}){
- # my $file;
+ my $file;
# $file = "$fake_data_dir/raid-logical/zfs/zpool-list-1-mirror-main-solestar.txt";
# $file = "$fake_data_dir/raid-logical/zfs/zpool-list-2-mirror-main-solestar.txt";
# $file = "$fake_data_dir/raid-logical/zfs/zpool-list-v-tank-1.txt";
# $file = "$fake_data_dir/raid-logical/zfs/zpool-list-v-gojev-1.txt";
# $file = "$fake_data_dir/raid-logical/zfs/zpool-list-v-w-spares-1.txt";
- #@working = main::reader($file);$zpool = '';
+ $file = "$fake_data_dir/raid-logical/zfs/zpool-list-v-freebsd-linear-1.txt";
+ @data = main::reader($file);$zpool = '';
}
else {
- @working = main::grabber("$zpool list -v 2>/dev/null");
+ @data = main::grabber("$zpool list -v 2>/dev/null");
}
# bsd sed does not support inserting a true \n so use this trick
# some zfs does not have -v
- if (!@working){
- @working = main::grabber("$zpool list 2>/dev/null");
+ if (!@data){
+ @data = main::grabber("$zpool list 2>/dev/null");
$b_v = 0;
}
my $zfs_path = main::check_program('zfs');
- # print Data::Dumper::Dumper \@working;
- main::log_data('dump','@working',\@working) if $b_log;
- if (!@working){
+ # print 'zpool @data: ', Data::Dumper::Dumper \@data;
+ main::log_data('dump','@data',\@data) if $b_log;
+ if (!@data){
main::log_data('data','no zpool list data') if $b_log;
eval $end if $b_log;
return ();
}
my ($status_i) = (0);
# NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
- my $test = shift @working; # get rid of first header line
+ my $test = shift @data; # get rid of first header line
if ($test){
foreach (split(/\s+/, $test)){
last if $_ eq 'HEALTH';
$status_i++;
}
}
- foreach (@working){
+ foreach (@data){
my @row = split(/\s+/, $_);
if (/^[\S]+/){
- @components = ();
$i = 0;
$size = ($row[1] && $row[1] ne '-') ? main::translate_size($row[1]): '';
$allocated = ($row[2] && $row[2] ne '-')? main::translate_size($row[2]): '';
@@ -23332,6 +23365,8 @@ sub zfs_data {
# A single device not in an array:
# ada0s2 25.9G 14.6G 11.3G - 0% 56%
# gptid/3838f796-5c46-11e6-a931-d05099ac4dc2 - - - - - -
+ # A single device not in an array:
+ # ada0p4 5G 3.88G 633M - - 49% 86.3% - ONLINE
# Using /dev/disk/by-id:
# ata-VBOX_HARDDISK_VB5b6350cd-06618d58
# Using /dev/disk/by-partuuid:
@@ -23340,29 +23375,41 @@ sub zfs_data {
# /home/fred/zvol/hdd-2-3 - - - - - - - - INUSE
elsif ($row[1] =~ /^(sd[a-z]+|[a-z0-9]+[0-9]+|([\S]+)\/.*|(ata|mmc|nvme|pci|scsi|wwn)-\S+|[a-f0-9]{4,}(-[a-f0-9]{4,}){3,})$/ &&
($row[2] eq '-' || $row[2] =~ /^[0-9\.]+[MGTPE]$/)){
+ shift @row if !$row[0]; # get rid of empty first column
+ # print Data::Dumper::Dumper \@row;
+ # print 'status-i: ', $row[$status_i], ' row0: ', $row[0], "\n";
+ my ($maj_min,$real,$part_size,$state,$working);
#print "r1:$row[1]",' :: ', Cwd::abs_path('/dev/disk/by-id/'.$row[1]), "\n";
- $row[1] =~ /^(sd[a-z]+|[a-z0-9]+[0-9]+|([\S]+)\/.*|(ata|mmc|nvme|pci|scsi|wwn)-\S+|[a-f0-9]{4,}(-[a-f0-9]{4,}){3,})\s.*?(DEGRADED|FAULTED|INUSE|OFFLINE)?$/;
- #my $working = '';
- my $working = ($1) ? $1 : ''; # note: the negative case can never happen
- my $state = ($4) ? $4 : '';
- my ($maj_min,$real,$part_size);
- if ($bsd_type && $working =~ /[\S]+\//){
- $working = GlabelData::get($working);
- }
- elsif (!$bsd_type && $row[1] =~ /^(ata|mmc|nvme|scsi|wwn)-/ &&
- -e "/dev/disk/by-id/$row[1]" && ($real = Cwd::abs_path('/dev/disk/by-id/'.$row[1]))){
- $real =~ s|/dev/||;
- $working = $real;
- }
- elsif (!$bsd_type && $row[1] =~ /^(pci)-/ &&
- -e "/dev/disk/by-path/$row[1]" && ($real = Cwd::abs_path('/dev/disk/by-path/'.$row[1]))){
- $real =~ s|/dev/||;
- $working = $real;
- }
- elsif (!$bsd_type && $row[1] =~ /^[a-f0-9]{4,}(-[a-f0-9]{4,}){3,}$/ &&
- -e "/dev/disk/by-partuuid/$row[1]" && ($real = Cwd::abs_path('/dev/disk/by-partuuid/'.$row[1]))){
- $real =~ s|/dev/||;
- $working = $real;
+ if ($row[0] =~ /^(sd[a-z]+|[a-z0-9]+[0-9]+|([\S]+)\/.*|(ata|mmc|nvme|pci|scsi|wwn)-\S+|[a-f0-9]{4,}(-[a-f0-9]{4,}){3,})$/){
+ $working = $1; # note: the negative case can never happen
+ }
+ # We only care about non ONLINE states for components
+ if ($status_i && $row[$status_i] &&
+ $row[$status_i] =~ /^(DEGRADED|FAULTED|INUSE|OFFLINE)$/){
+ $state = $1;
+ }
+ if ($bsd_type){
+ if ($working =~ /[\S]+\//){
+ my $temp = GlabelData::get($working);
+ $working = $temp if $temp;
+ }
+ }
+ elsif (!$bsd_type){
+ if ($row[0] =~ /^(ata|mmc|nvme|scsi|wwn)-/ &&
+ -e "/dev/disk/by-id/$row[0]" && ($real = Cwd::abs_path('/dev/disk/by-id/'.$row[0]))){
+ $real =~ s|/dev/||;
+ $working = $real;
+ }
+ elsif ($row[0] =~ /^(pci)-/ &&
+ -e "/dev/disk/by-path/$row[0]" && ($real = Cwd::abs_path('/dev/disk/by-path/'.$row[0]))){
+ $real =~ s|/dev/||;
+ $working = $real;
+ }
+ elsif ($row[0] =~ /^[a-f0-9]{4,}(-[a-f0-9]{4,}){3,}$/ &&
+ -e "/dev/disk/by-partuuid/$row[0]" && ($real = Cwd::abs_path('/dev/disk/by-partuuid/'.$row[0]))){
+ $real =~ s|/dev/||;
+ $working = $real;
+ }
}
# kind of a hack, things like cache may not show size/free
# data since they have no array row, but they might show it in
@@ -23370,18 +23417,18 @@ sub zfs_data {
# ada0s2 25.9G 19.6G 6.25G - 0% 75%
# ec399377-c03c-e844-a876-8c8b044124b8 1.88G 397M 1.49G - - 0% 20.7% - ONLINE
# keys were size/allocated/free but those keys don't exist, assume failed to add raw-
- if (!$zfs[$j]->{'raw-size'} && $row[2] && $row[2] ne '-'){
- $size = ($row[2]) ? main::translate_size($row[2]): '';
+ if (!$zfs[$j]->{'raw-size'} && $row[1] && $row[1] ne '-'){
+ $size = ($row[1]) ? main::translate_size($row[1]): '';
$size_holder = 0;
$zfs[$j]->{'arrays'}[$k]{'raw-size'} = $size;
$raw_logical[0] += $size if $size;
}
- if (!$zfs[$j]->{'raw-allocated'} && $row[3] && $row[3] ne '-'){
- $allocated = ($row[3]) ? main::translate_size($row[3]) : '';
+ if (!$zfs[$j]->{'raw-allocated'} && $row[2] && $row[2] ne '-'){
+ $allocated = ($row[2]) ? main::translate_size($row[2]) : '';
$zfs[$j]->{'arrays'}[$k]{'raw-allocated'} = $allocated;
}
- if (!$zfs[$j]->{'raw-free'} && $row[4] && $row[4] ne '-'){
- $free = ($row[4]) ? main::translate_size($row[4]) : '';
+ if (!$zfs[$j]->{'raw-free'} && $row[3] && $row[3] ne '-'){
+ $free = ($row[3]) ? main::translate_size($row[3]) : '';
$zfs[$j]->{'arrays'}[$k]{'raw-free'} = $free;
}
if ((!$maj_min || !$part_size) && $working && @proc_partitions){
@@ -23400,6 +23447,10 @@ sub zfs_data {
my $temp = DiskDataBSD::get($working);
$part_size = $temp->{'size'} if $temp->{'size'};
}
+ # with linear zfs, can show full partition size data
+ if (!$part_size && $working && $row[1] && $row[1] ne '-'){
+ $part_size = main::translate_size($row[1]);
+ }
$raw_logical[1] += $part_size if $part_size;
$zfs[$j]->{'arrays'}[$k]{'components'}[$i] = [$working,$part_size,$maj_min,$state];
$i++;
@@ -26837,7 +26888,7 @@ sub load_lm_sensors {
$type = 'network';
}
# put last just in case some other sensor type above had intel in name
- elsif ($adapter =~ /^(amdgpu|intel|nouveau|radeon)-/){
+ elsif ($adapter =~ /^(amdgpu|intel|nova|nouveau|radeon)-/){
$type = 'gpu';
}
elsif ($adapter =~ /^(acpitz)-/ && $adapter !~ /^(acpitz-virtual)-/ ){
@@ -26937,7 +26988,7 @@ sub load_sys_data {
$type = 'network';
}
# put last just in case some other sensor type above had intel in name
- elsif ($name =~ /^(amdgpu|intel|nouveau|radeon)/){
+ elsif ($name =~ /^(amdgpu|intel|nova|nouveau|radeon)/){
$type = 'gpu';
}
# not confirmed in /sys that name will be acpitz-virtual, verify
@@ -27459,7 +27510,7 @@ sub gpu_sensor_data {
foreach my $adapter (keys %{$sensors_raw->{'gpu'}}){
$j = scalar @$gpu_data;
$gpu_data->[$j]{'type'} = $adapter;
- $gpu_data->[$j]{'type'} =~ s/^(amdgpu|intel|nouveau|radeon)-.*/$1/;
+ $gpu_data->[$j]{'type'} =~ s/^(amdgpu|intel|nouveau|nova|radeon)-.*/$1/;
# print "ad: $adapter\n";
foreach (@{$sensors_raw->{'gpu'}{$adapter}}){
# print "val: $_\n";
@@ -27899,7 +27950,9 @@ sub create_output {
$rows->[$j]{main::key($num++,0,3,'max-streams')} = $row->{'zram-max-comp-streams'};
}
}
- $row->{'mount'} =~ s|/home/[^/]+/(.*)|/home/$filter_string/$1| if $row->{'mount'} && $use{'filter'};
+ if ($row->{'mount'} && $use{'filter'}){
+ $row->{'mount'} =~ s|/home/[^/]+/(.*)|/home/$filter_string/$1|;
+ }
$rows->[$j]{main::key($num++,1,2,$dev)} = ($row->{'mount'}) ? $row->{'mount'} : 'N/A';
if ($b_admin && $row->{'maj-min'}){
$rows->[$j]{main::key($num++,0,3,'maj-min')} = $row->{'maj-min'};
@@ -28053,6 +28106,7 @@ sub proc_data {
PartitionItem::set_partitions() if !$loaded{'set-partitions'};
RaidItem::raid_data() if !$loaded{'raid'};
my $mounted = get_mounted();
+ # NOTE: add push(@$mounted,'data') here to emulate item, match partition data
# print join("\n",(@filters,@$mounted)),"\n";
foreach my $row (@proc_partitions){
($dev_mapped,$fs,$label,$maj_min,$uuid,$size) = ('','','','','','');
@@ -28069,13 +28123,16 @@ sub proc_data {
# remove from list. this only works for sdxx drives, but is better than no fix
# This logic may also end up working for btrfs partitions, and maybe hammer?
# In arm/android seen /dev/block/mmcblk0p12
+ # @filters test separate since it contains regex list, @$mounted can contain
+ # regex special characters like GDRIVE{6Cm8i}:
# print "mount: $row->[-1]\n";
if ($row->[-1] !~ /^(nvme[0-9]+n|mmcblk|mtdblk|mtdblock)[0-9]+$/ &&
$row->[-1] =~ /[a-z][0-9]+$|dm-[0-9]+$/ &&
$row->[-1] !~ /\bloop/ &&
- !(grep {$row->[-1] =~ /$_$/} (@filters,@$mounted)) &&
+ !(grep {$row->[-1] =~ /$_$/} @filters) &&
+ !(grep {$row->[-1] =~ /\Q$_\E$/} @$mounted) &&
!(grep {$_ =~ /(block\/)?$row->[-1]$/} @$mounted) &&
- !(grep {$_ =~ /^sd[a-z]+$/ && $row->[-1] =~ /^$_[0-9]+/} @$mounted)){
+ !(grep {$_ =~ /^sd[a-z]+$/ && $row->[-1] =~ /^\Q$_\E[0-9]+/} @$mounted)){
$dev_mapped = $dmmapper{$row->[-1]} if $dmmapper{$row->[-1]};
if (@lsblk){
my $id = ($dev_mapped) ? $dev_mapped: $row->[-1];
@@ -31124,7 +31181,7 @@ sub set_dboot_disks {
}
}
}
- print Data::Dumper::Dumper \%disks_bsd if $dbg[34];
+ print 'dboot disk: ', Data::Dumper::Dumper \%disks_bsd if $dbg[34];
main::log_data('dump','%disks_bsd',\%disks_bsd) if $b_log;
eval $end if $b_log;
}
@@ -31216,7 +31273,7 @@ sub set_disklabel_data {
}
}
}
- print Data::Dumper::Dumper \%disks_bsd if $dbg[34];
+ print 'disklabel: ', Data::Dumper::Dumper \%disks_bsd if $dbg[34];
main::log_data('dump', '%disks_bsd', \%disks_bsd) if $b_log;
eval $end if $b_log;
}
@@ -31311,7 +31368,7 @@ sub set_gpart_data {
}
}
}
- print Data::Dumper::Dumper \%disks_bsd if $dbg[34];
+ print 'gpart: ', Data::Dumper::Dumper \%disks_bsd if $dbg[34];
main::log_data('dump', '%disks_bsd', \%disks_bsd) if $b_log;
eval $end if $b_log;
}
@@ -31888,8 +31945,8 @@ sub system_base_linux {
$base_distro_arch .= '|talkingarch|theshell|ubos|velt|xero';
my $base_file_debian_version = 'sidux';
# detect debian steamos before arch steamos
- my $base_osr_debian_version = '\belive|lmde|neptune|nitrux|parrot|pureos|';
- $base_osr_debian_version .= 'rescatux|septor|sparky|steamos|tails';
+ my $base_osr_debian_version = '\belive|blankon|lmde|neptune|nitrux|parrot|';
+ $base_osr_debian_version .= 'pureos|rescatux|septor|solyd|sparky|steamos|tails';
my $base_osr_devuan_version = 'crowz|dowse|etertics|\bexe\b|fluxuan|gnuinos|';
$base_osr_devuan_version .= 'gobmis|heads|miyo|refracta|\bstar\b|virage';
# osr has base ids
@@ -31897,7 +31954,7 @@ sub system_base_linux {
# base only found in issue
my $base_issue = 'bunsen';
# synthesize, no direct data available
- my $base_manual = 'blankon|deepin|kali';
+ my $base_manual = 'deepin|kali';
# osr base, distro id in list of distro files
my $base_osr = 'aptosid|bodhi|grml|q4os|siduction|slax|zenwalk';
# osr base, distro id in issue
@@ -31984,7 +32041,7 @@ sub system_base_linux {
if (!$distro->{'base'} && $lc_issue && $lc_issue =~ /($base_manual)/){
my $id = $1;
my %manual = (
- 'blankon' => 'Debian unstable',
+ # 'blankon' => 'Debian unstable', # use /etc/debian_version
'deepin' => 'Debian unstable',
'kali' => 'Debian testing',
);
@@ -32517,18 +32574,19 @@ sub get_driver_modules {
return $modules;
}
-## GlabelData: public methods: set(), get()
-# Used only to get RAID ZFS gptid path standard name, like ada0p1
+## GlabelData: public methods: get()
+# Used to partitions, swap, RAID ZFS gptid path standard name, like ada0p1
{
package GlabelData;
# gptid/c5e940f1-5ce2-11e6-9eeb-d05099ac4dc2 N/A ada0p1
+# gpt/efiesp N/A ada0p2
sub get {
eval $start if $b_log;
- my ($gptid) = @_;
+ my $gptid = $_[0];
set() if !$loaded{'glabel'};
return if !@glabel || !$gptid;
- my ($dev_id) = ('');
+ my $dev_id = '';
foreach (@glabel){
my @temp = split(/\s+/, $_);
my $gptid_trimmed = $gptid;
@@ -32548,7 +32606,7 @@ sub set {
eval $start if $b_log;
$loaded{'glabel'} = 1;
if (my $path = main::check_program('glabel')){
- @glabel = main::grabber("$path status 2>/dev/null");
+ @glabel = main::grabber("$path status 2>/dev/null",'','strip');
}
main::log_data('dump','@glabel:with Headers',\@glabel) if $b_log;
# get rid of first header line
@@ -35186,6 +35244,8 @@ sub set_values {
'dawn' => ['^dawn',1,'-v','dawn',0,1,1,'^dawn-',''], # to stderr, not verified
'dcompmgr' => ['^dcompmgr',0,'0','dcompmgr',0,1,0,'',''], # unverified
'deepin' => ['^Version',2,'file','Deepin',0,100,'=','','/etc/deepin-version'], # special
+ 'deepin-kwin_wayland' => ['^deepin-kwin',2,'--version','deepin-kwin_wayland',0,1,0,'',''],#
+ 'deepin-kwin_x11' => ['^deepin-kwin',2,'--version','deepin-kwin_x11',0,1,0,'',''],#
'deepin-metacity' => ['^metacity',2,'--version','Deepin-Metacity',0,1,0,'',''],
'deepin-mutter' => ['^mutter',2,'--version','Deepin-Mutter',0,1,0,'',''],
'deepin-wm' => ['^gala',0,'0','DeepinWM',0,1,0,'',''], # no version
@@ -35193,7 +35253,7 @@ sub set_values {
'dusk' => ['^dusk',1,'-v','dusk',0,1,1,'^dusk-',''], # to stderr, not verified
'dtwm' => ['^dtwm',0,'0','dtwm',0,1,0,'',''],# no version
'dwc' => ['^dwc',0,'0','dwc',0,1,0,'',''], # unverified
- 'dwl' => ['^dwl',0,'0','dwl',0,1,0,'',''], # unverified
+ 'dwl' => ['^dwl',1,'-v','dwl',0,1,0,'^dwl-',''], # assume same as dwm
'dwm' => ['^dwm',1,'-v','dwm',0,1,1,'^dwm-',''],
'echinus' => ['^echinus',1,'-v','echinus',0,1,1,'',''], # echinus-0.4.9 (c)...
# only listed here for compositor values, version data comes from xprop
@@ -35264,7 +35324,7 @@ sub set_values {
'lxqt-session' => ['^lxqt-session',2,'--version','LXQt',0,1,0,'',''],
'lxqt-variant' => ['^lxqt-panel',0,'0','LXQt-Variant',0,1,0,'',''],
'lxsession' => ['^lxsession',0,'0','lxsession',0,1,0,'',''],
- 'mahogany' => ['^mahogany',0,'0','Mahogany',0,1,0,'',''], # unverified
+ 'mahogany' => ['^mahogany',0,'0','Mahogany',0,1,0,'',''], # unverified, from stumpwm
'manokwari' => ['^manokwari',0,'0','Manokwari',0,1,0,'',''],
'marina' => ['^marina',0,'0','Marina',0,1,0,'',''], # unverified
'marco' => ['^marco',2,'--version','marco',0,1,0,'',''],
@@ -35667,17 +35727,18 @@ sub version_pkg {
## PsData
# public methods:
-# set_cmd(): sets @ps_aux, @ps_cmd
+# set(): sets @ps_aux, @ps_cmd
# set_dm(): sets $ps_data{'dm-active'}
# set_de_wm(): sets -S/-G de/wm/comp/tools items
+# set_network(): sets -na network services
# set_power(): sets -I $ps_data{'power-services'}
{
package PsData;
-sub set_cmd {
+sub set {
eval $start if $b_log;
my ($b_busybox,$header,$ps,@temp);
- $loaded{'ps-cmd'} = 1;
+ $loaded{'ps-data'} = 1;
my $args = 'wwaux';
my $path = main::check_program('ps');
my $link = readlink($path);
@@ -35699,11 +35760,15 @@ sub set_cmd {
}
$ps_data{'header'}->[0] = $#temp; # the indexes, not the scalar count
for (my $i = 0; $i <= $#temp; $i++){
- if ($temp[$i] eq 'PID'){$ps_data{'header'}->[1] = $i;}
- elsif ($temp[$i] eq '%CPU'){$ps_data{'header'}->[2] = $i;}
+ if ($temp[$i] eq 'PID'){
+ $ps_data{'header'}->[1] = $i;}
+ elsif ($temp[$i] eq '%CPU'){
+ $ps_data{'header'}->[2] = $i;}
# note: %mem is percent used
- elsif ($temp[$i] eq '%MEM'){$ps_data{'header'}->[3] = $i;}
- elsif ($temp[$i] eq 'RSS'){$ps_data{'header'}->[4] = $i;}
+ elsif ($temp[$i] eq '%MEM'){
+ $ps_data{'header'}->[3] = $i;}
+ elsif ($temp[$i] eq 'RSS'){
+ $ps_data{'header'}->[4] = $i;}
}
# we want more data from ps busybox, to get TinyX screen res
my $cols_use = ($b_busybox) ? 7 : 2;
@@ -35725,6 +35790,8 @@ sub set_cmd {
# should NOT be happening, except on busybox ps, which has no ww.
next if !defined $split[$ps_data{'header'}->[0]];
# we don't want zombie/system/kernel processes, or servers, browsers.
+ # but we do want network kernel process servers [nfsd]
+ $split[$ps_data{'header'}->[0]] =~ s/^\[(mld|nfsd)\]/$1/;
if ($split[$ps_data{'header'}->[0]] !~ /^([\[\(]|(\S+\/|)($pattern))/i){
push(@ps_cmd,join(' ', @split[$ps_data{'header'}->[0] .. $final]));
}
@@ -35786,9 +35853,9 @@ sub set_de_wm {
}
if ($b_de_wm_comp){
process_items(\@{$ps_data{'de-wm-compositors'}},join('|',qw(budgie-wm compiz
- deepin-wm enlightenment gala gnome-shell twin kwin_wayland kwin_x11 kwinft kwin
- marco deepin-metacity metacity metisse mir moksha muffin deepin-mutter mutter
- ukwm xfwm[345]?)));
+ deepin-kwin_wayland deepin-kwin_x11 deepin-wm enlightenment gala gnome-shell
+ twin kwin_wayland kwin_x11 kwinft kwin marco deepin-metacity metacity
+ metisse mir moksha muffin deepin-mutter mutter ukwm xfwm[345]?)));
}
if ($b_wm_comp){
# x11: 3dwm, qtile [originally], rest wayland
@@ -35823,8 +35890,9 @@ sub set_de_wm {
# Generate tools: power manager daemons, then screensavers/lockers.
# Note that many lockers may not be services
@{$ps_data{'tools-test'}}=qw(away boinc-screensaver budgie-screensaver
- cinnamon-screensaver gnome-screensaver gsd-screensaver-proxy gtklock i3lock
- kscreenlocker light-locker lockscreen lxlock mate-screensaver nwg-lock
+ cinnamon-screensaver gnome-screensaver gsd-screensaver-proxy gtklock
+ hyprlock i3lock kscreenlocker light-locker lockscreen lxlock
+ mate-screensaver nwg-lock
physlock rss-glx slock swayidle swaylock ukui-screensaver unicode-screensaver
xautolock xfce4-screensaver xlock xlockmore xscreensaver
xscreensaver-systemd xsecurelock xss-lock xtrlock);
@@ -35848,7 +35916,7 @@ sub set_network {
eval $start if $b_log;
process_items(\@{$ps_data{'network-services'}},join('|', qw(apache\d?
cC]onn[mM]and? dhcpd dhcpleased fingerd ftpd gated httpd inetd ircd iwd
- [mM]odem[mM]nager named networkd-dispatcher [nN]etwork[mM]anager nfsd nginx
+ mld [mM]odem[mM]nager named networkd-dispatcher [nN]etwork[mM]anager nfsd nginx
ntpd proftpd routed smbd sshd systemd-networkd systemd-timesyncd tftpd
wicd wpa_supplicant xinetd xntpd)));
print '$ps_data{network-daemons}: ', Data::Dumper::Dumper $ps_data{'network-services'} if $dbg[5];
@@ -37734,13 +37802,12 @@ my ($items,$subs);
sub generate {
eval $start if $b_log;
my ($item,%checks);
- PsData::set_cmd() if !$loaded{'ps-cmd'};
+ PsData::set() if !$loaded{'ps-data'};
main::set_sysctl_data() if $use{'sysctl'};
main::set_dboot_data() if $bsd_type && !$loaded{'dboot'};
# note: ps aux loads before logging starts, so create debugger data here
if ($b_log){
# With logging, we already get ps wwwaux so no need to get it again here
- # main::log_data('dump','@ps_aux',\@ps_aux);
main::log_data('dump','@ps_cmd',\@ps_cmd);
}
print Data::Dumper::Dumper \@ps_cmd if $dbg[61];