diff options
Diffstat (limited to 'inxi')
| -rwxr-xr-x | inxi | 560 |
1 files changed, 388 insertions, 172 deletions
@@ -49,8 +49,8 @@ use POSIX qw(ceil uname strftime ttyname); ## INXI INFO ## my $self_name='inxi'; -my $self_version='3.3.34'; -my $self_date='2024-04-13'; +my $self_version='3.3.35'; +my $self_date='2024-06-18'; my $self_patch='00'; ## END INXI INFO ## @@ -566,9 +566,9 @@ sub set_path { # Extra path variable to make execute failures less likely, merged below my (@path); # NOTE: recent Xorg's show error if you try /usr/bin/Xorg -version but work - # if you use the /usr/lib/xorg-server/Xorg path. + # if you use the /usr/lib/xorg-server/Xorg path. Some distros fail to add TDE my @test = qw(/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin - /usr/X11R6/bin); + /usr/X11R6/bin /opt/trinity/bin); foreach (@test){ push(@paths,$_) if -d $_; } @@ -1995,11 +1995,13 @@ sub display_data { ['kded5','--version'], ['kded6','--version'], ['kded7','--version'], + ['kdesktop','--version'],# TDE ['kf-config','--version'], ['kf4-config','--version'], ['kf5-config','--version'], ['kf6-config','--version'], ['kf7-config','--version'], + ['kwin_wayland','--version'], ['kwin_x11','--version'], # ['locate','/Xorg'], # for Xorg.wrap problem ['loginctl','--no-pager list-sessions'], @@ -2016,6 +2018,7 @@ sub display_data { ['swaymsg','-t get_tree'], ['swaymsg','-t get_workspaces -p'], ['swaymsg','-t get_workspaces -r'], + ['twin','--version'], # TDE ['vainfo',''], ['vdpauinfo',''], ['vulkaninfo',''], @@ -5480,8 +5483,8 @@ sub show_options { mounted ${partition_string}s."], ['1', '-r', '--repos', "Distro repository data. Supported repo types: APK, APT, CARDS, EOPKG, NETPKG, NIX, PACMAN, PACMAN-G2, PISI, PKG (BSDs), PORTAGE, - PORTS (BSDs), SBOPKG, SBOUI, SCRATCHPKG, SLACKPKG, SLAPT_GET, SLPKG, TCE, - TAZPKG, URPMQ, XBPS, YUM/ZYPP."], + PORTS (BSDs), SBOPKG, SBOUI, SCRATCHPKG, SLACKPKG, SLAPT_GET, SLPKG, + T2-EMERGE, TCE, TAZPKG, URPM, XBPS, YUM/ZYPP."], ['1', '-R', '--raid', "RAID data. Shows RAID devices, states, levels, array sizes, and components. md-raid: If device is resyncing, also shows resync progress line."], @@ -5876,8 +5879,8 @@ sub show_options { ['1', '', '--no-sudo', "Skip internal program use of sudo features (not related to starting $self_name with sudo)."], ['1', '', '--rpm', "Force use of disabled package manager counts for packages - feature with -rx/-Ix. RPM disabled by default due to slow to massive rpm - package query times."], + feature with -rx/-Ix. RPM disabled by default due to unacceptably slow rpm + package count query times."], ['1', '', '--sensors-default', "Removes configuration item SENSORS_USE and SENSORS_EXCLUDE. Same as default behavior."], ['1', '', '--sensors-exclude', "[sensor[s] name, comma separated] Exclude @@ -6381,16 +6384,17 @@ sub clean_arm { return $item; } +# This is used only in distro name strings. +# arg: 0: name string to clean by reference sub clean_characters { - my ($data) = @_; # newline, pipe, brackets, + sign, with space, then clear doubled # spaces and then strip out trailing/leading spaces. - # etc/issue often has junk stuff like (\l) \n \l - return if !$data; - $data =~ s/[:\47]|\\[a-z]|\n|,|\"|\*|\||\+|\[\s\]|n\/a|\s\s+/ /g; - $data =~ s/\(\s*\)//; - $data =~ s/^\s+|\s+$//g; - return $data; + # etc/issue often has junk stuff like (\l) \n \l. Removed + because can be + # part of distro name, like Slackware 15.0+ + return if !${$_[0]}; # should not be needed since tests for not empty on use + ${$_[0]} =~ s/[:\47]|\\[a-z]|\n|,|\"|\*|\||\[\s\]|n\/a|\s\s+/ /g; + ${$_[0]} =~ s/\(\s*\)//; + ${$_[0]} =~ s/^\s+|\s+$//g; } sub clean_disk { @@ -6701,6 +6705,7 @@ sub message { 'pci-card-data-root' => 'PCI device data requires root.', 'pci-slot-data' => 'No PCI Slot data found.', 'pm-disabled' => "see --$id", + 'pm-no-repos' => "[$id list repo query]", 'ps-data-null' => 'No process data available.', 'raid-data' => 'No RAID data found.', 'ram-data' => "No RAM data found using $id.", @@ -9522,6 +9527,9 @@ sub cpuinfo_data { # print "p0:\n"; } } + elsif ($cpu->{'model_name'} =~ /loongson|godson/i){ + $cpu->{'type'} = 'loongson'; + } elsif ($risc{'mips'} || $cpu->{'model_name'} =~ /mips/i){ $cpu->{'type'} = 'mips'; } @@ -9546,6 +9554,10 @@ sub cpuinfo_data { if ($temp =~ /^\d+$/){ $cpu->{'stepping'} = uc(sprintf("%x",$temp)); } + # loongson, hex: 0x11 + elsif ($temp =~ /^0x[0-9a-f]{1,2}$/){ + $cpu->{'stepping'} = $temp; + } } # PPC revision is a string, but elbrus revision is hex elsif (defined $block->{'revision'}){ @@ -10171,6 +10183,9 @@ sub set_fake_data { # $ci = "$fake_data_dir/cpu/elbrus/4xE8C-7.txt"; # $ci = "$fake_data_dir/cpu/elbrus/4xE2CDSP-4.txt"; # $ci = "$fake_data_dir/cpu/elbrus/cpuinfo.e8c2.txt"; + ## Loongson + # $cpu_type = 'elbrus'; # uncomment to test loongson + $ci = "$fake_data_dir/cpu/loongson/3A5000M-4-core-4.19.0.txt"; ## CPU CPUINFO/SYS PAIRS DATA FILES ## # $ci = "$fake_data_dir/cpu/sys-ci-pairs/android-pocom3-fake-cpuinfo.txt"; @@ -10195,8 +10210,8 @@ sub set_fake_data { # $sys = "$fake_data_dir/cpu/sys-ci-pairs/amd-threadripper-1x12-5945wx-sys-1.txt"; # $ci = "$fake_data_dir/cpu/sys-ci-pairs/intel-i7-1165G7-4-core-no-smt-cpuinfo.txt"; # $sys = "$fake_data_dir/cpu/sys-ci-pairs/intel-i7-1165G7-4-core-no-smt-sys.txt"; - $ci = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-cpuinfo.txt"; - $sys = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-sys.txt"; + # $ci = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-cpuinfo.txt"; + # $sys = "$fake_data_dir/cpu/sys-ci-pairs/elbrus-e16c-1-sys.txt"; $fake_data{'cpuinfo'} = $ci; $fake_data{'sys'} = $sys; } @@ -10706,6 +10721,8 @@ sub cpu_properties { ); my $topology = {}; cp_cpu_topology($counts,$topology); + # print "$cpu->{'type'}\n"; + # print Data::Dumper::Dumper $cpu; my $arch = cp_cpu_arch( $cpu->{'type'}, $cpu->{'family'}, @@ -10713,6 +10730,7 @@ sub cpu_properties { $cpu->{'stepping'}, $cpu->{'model_name'}, ); + # print Data::Dumper::Dumper $arch; # arm cpuinfo case only; confirm on bsds, not sure all get family/ids if ($arch->[0] && !$cpu->{'arch'}){ ($cpu->{'arch'},$cpu->{'arch-note'},$cpu->{'process'},$cpu->{'gen'}, @@ -11221,7 +11239,7 @@ sub cp_cpu_arch { # we can get various random strings for rev/stepping, particularly for arm,ppc # but we want stepping to be integer for math comparisons, so convert, or set # to 0 so it won't break anything. - if (defined $stepping && $stepping =~ /^[A-F0-9]{1,3}$/i){ + if (defined $stepping && $stepping =~ /^(0x)?[A-F0-9]{1,3}$/i){ $stepping = hex($stepping); } else { @@ -11229,6 +11247,7 @@ sub cp_cpu_arch { } $family ||= ''; $model = '' if !defined $model; # model can be 0 + $name = '' if !defined $name; my ($arch,$gen,$note,$process,$year); my $check = main::message('note-check'); # See: docs/inxi-cpu.txt @@ -12109,6 +12128,68 @@ sub cp_cpu_arch { } } } + # Note: their cpu family value is either missing for early, or generic + # No model: [id]/family: [id]. Just cpu family: [string], model name: [string] + elsif ($type eq 'loongson'){ + # can't safely match model 1, but nobody will run inxi on that + # Not certain when SMIC took over from STM, which is a swiss firm. + if ($name =~ /\b2[BCE]\b/){ + $arch = 'Godson'; + $process = 'STM 180nm'; + $year = '2003-2006';} + elsif ($name =~ /\b1[ABCD]\b/){ + $arch = 'Loongson-1'; + $process = 'STM 130nm'; + $year = '2010-2014';} + elsif ($name =~ /\b1C101/){ + $arch = 'Loongson-1'; + $process = 'STM 130nm'; + $year = '2018';} + elsif ($name =~ /\b2F\b/){ + $arch = 'Loongson-2'; + $process = 'STM 90nm'; + $year = '2007';} + elsif ($name =~ /\b2[GIH]\b/){ + $arch = 'Loongson-2'; + $process = 'STM 65nm'; + $year = '2012-2013';} + elsif ($name =~ /\b2K(1000)?\b/){ + $arch = 'Loongson-2'; + $process = 'STM 40nm'; + $year = '2017';} + elsif ($name =~ /3A1000/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 65nm'; + $year = '2009';} + elsif ($name =~ /3B1000/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 65nm'; + $year = '2010';} + elsif ($name =~ /3B1500/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 32nm'; + $year = '2012';} + elsif ($name =~ /3A1500-I|3[AB]2000/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 40nm'; + $year = '2015';} + elsif ($name =~ /3[AB]3000/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 28nm'; + $year = '2016';} + elsif ($name =~ /3[AB]4000/){ + $arch = 'Godson-3/Loongson-3'; + $process = 'SMIC 28nm'; + $year = '2019';} + elsif ($name =~ /3[A-C]5000/){ + $arch = 'Loongson-3/LoongArch'; + $process = 'SMIC 12-14nm'; + $year = '2021+';} + elsif ($name =~ /3[A-C]6000/){ + $arch = 'Loongson-3/LoongArch'; + $process = 'SMIC 12-14nm'; + $year = '2023+';} + } eval $end if $b_log; return [$arch,$note,$process,$gen,$year]; } @@ -12492,11 +12573,11 @@ sub cp_test_types { } ## CPU UTILITIES ## -# only elbrus ID is actually used live +# args: 0: vendor_id,like GenuineIntel, AuthenticAMD sub cpu_vendor { eval $start if $b_log; - my ($string) = @_; - my ($vendor) = (''); + my $string = $_[0]; + my $vendor = ''; $string = lc($string); if ($string =~ /intel/){ $vendor = "intel"; @@ -14768,7 +14849,7 @@ sub drive_speed { package GraphicItem; my ($b_primary,$b_wayland_data,%graphics,%mesa_drivers, $monitor_ids,$monitor_map); -my ($gpu_amd,$gpu_intel,$gpu_nv); +my ($gpu_amd,$gpu_intel,$gpu_loongson,$gpu_nv); sub get { eval $start if $b_log; @@ -14782,7 +14863,7 @@ sub get { } else { device_output($rows); - ($gpu_amd,$gpu_intel,$gpu_nv) = (); + ($gpu_amd,$gpu_intel,$gpu_loongson,$gpu_nv) = (); if (!@$rows){ my $key = 'Message'; my $message = ''; @@ -14856,9 +14937,10 @@ sub device_output { $rows->[$j]{main::key($num++,0,3,'alternate')} = $row->[10] if $row->[10]; } if ($extra > 0 && $row->[5] && $row->[6] && - $row->[5] =~ /^(1002|10de|12d2|8086)$/){ + $row->[5] =~ /^(0014|1002|10de|12d2|8086)$/){ # legacy: 1180 0df7 0029 current: 13bc 1c8d 24b1 regex: H100, RTX 4000 # ($row->[5],$row->[6],$row->[4]) = ('12de','0029',''); + # ($row->[5],$row->[6],$row->[4]) = ('0014','7a25',''); # loongson my ($gpu_data,$b_nv) = gpu_data($row->[5],$row->[6],$row->[4]); if (!$bsd_type && $b_nv && $b_admin){ if ($gpu_data->{'legacy'}){ @@ -15889,6 +15971,7 @@ sub gl_data { # $file = "$fake_data_dir/graphics/glxinfo/glxinfo-intel-atom-dell_studio-bm.txt"; # $file = "$fake_data_dir/graphics/glxinfo/glxinfo-asus_1025c-atom-bm.txt"; # $file = "$fake_data_dir/graphics/glxinfo/glxinfo-2011-nvidia-glx1.4.txt"; + # $file = "$fake_data_dir/graphics/glxinfo/glxinfo-amd-dz-mesa-git.txt"; $gl_data= main::reader($file,'','ref'); } } @@ -15905,7 +15988,7 @@ sub gl_data { # $file = "$fake_data_dir/graphics/egl-es/eglinfo-intel-atom-dell_studio-bm.txt"; # $file = "$fake_data_dir/graphics/egl-es/eglinfo-asus_1025c-atom-bm.txt"; # $file = "$fake_data_dir/graphics/egl-es/eglinfo-x11-amd-raphael-1.txt"; - $file = "$fake_data_dir/graphics/egl-es/eglinfo-x11-vm-version-odd.txt"; + # $file = "$fake_data_dir/graphics/egl-es/eglinfo-x11-vm-version-odd.txt"; $gl_data = main::reader($file,'','ref'); } } @@ -16129,15 +16212,18 @@ sub gl_data { if ($working[1]){ # first grab the actual gl version # non free drivers like nvidia may only show their driver version info + # $working[1] = '4.5 (Compatibility Profile) Mesa 22.3.6'; if ($working[1] =~ /^(\S+)(\s|$)/){ push(@{$gl->{'glx'}{'opengl'}{'versions'}}, $1); } - # handle legacy format: 1.2 (1.5 Mesa 6.5.1) as well as more current: + # handle legacy format: 1.2 (1.5 Mesa 6.5.1) + # as well as more current: # 4.5 (Compatibility Profile) Mesa 22.3.6 # Note: legacy: fglrx starting adding compat strings but they don't # change this result: # 4.5 Compatibility Profile Context Mesa 15.3.6 - if ($working[1] =~ /(Mesa|NVIDIA)\s(\S+?)\)?$/i){ + # 4.6 (Core Profile) Mesa 24.2.0-devel (git-92f0620dae) + if ($working[1] =~ /(Mesa|NVIDIA)\s(\S+?)\)?(\s.*)?$/i){ if ($1 && $2 && !$gl->{'glx'}{'opengl'}{'driver'}){ $gl->{'glx'}{'opengl'}{'driver'}{'vendor'} = lc($1); $gl->{'glx'}{'opengl'}{'driver'}{'version'} = $2; @@ -16158,6 +16244,7 @@ sub gl_data { if ($b_opengl){ if ($working[0] =~ /^OpenGL (compatibility|core) profile version( string)?$/){ $value = lc($1); + # $working[1] = '4.6 (Core Profile) Mesa 24.2.0-devel (git-92f0620dae)'; # note: no need to apply empty message here since we don't have the data # anyway if ($working[1]){ @@ -16167,7 +16254,9 @@ sub gl_data { } # fglrx started appearing with this extra string, does not appear # to communicate anything of value - if ($working[1] =~ /\s+(Mesa|NVIDIA)\s+(\S+)$/){ + # 4.6 (Core Profile) Mesa 24.2.0-devel + # 4.6 (Core Profile) Mesa 24.2.0-devel (git-92f0620dae) + if ($working[1] =~ /\s+(Mesa|NVIDIA)\s+(\S+)(\s.*)?$/){ if ($1 && $2 && !$gl->{'glx'}{'opengl'}{$value}{'vendor'}){ $gl->{'glx'}{'opengl'}{$value}{'driver'}{'vendor'} = lc($1); $gl->{'glx'}{'opengl'}{$value}{'driver'}{'version'} = $2; @@ -18073,51 +18162,44 @@ sub set_intel_data { 'process' => 'Intel 10nm', 'years' => '2019-21', }, - {'arch' => 'Gen-12.1', - 'ids' => '4905|4907|4908|4c80|4c8a|4c8b|4c8c|4c90|4c9a|9a40|9a49|9a59|9a60|' . - '9a68|9a70|9a78|9ac0|9ac9|9ad9|9af8', + {'arch' => 'Gen-12.1', + 'ids' => '4905|4907|4908|4909|4c8a|4c8b|4c90|4c9a|9a40|9a49|9a59|9a60|9a68|' . + '9a70|9a78|9ac0|9ac9|9ad9|9af8', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2020-21', }, {'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|' . - '46d3|46d4', + 'ids' => '4626|4628|462a|4636|4638|463a|4680|4682|4688|468a|468b|4690|4692|' . + '4693|46a0|46a1|46a2|46a3|46a6|46a8|46aa|46b0|46b1|46b2|46b3|46b6|46b8|46ba|' . + '46c0|46c1|46c2|46c3|46d0|46d1|46d2|46d3|46d4', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2021-22+', }, {'arch' => 'Gen-12.5', - 'ids' => '0bd0|0bd5|0bd6|0bd7|0bd9|0bda|0bdb', + 'ids' => '0bd5|0bda', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2021-23+', }, - # Jupiter Sound cancelled? {'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|56be|56bf', + '5694|5696|5697|5698|56a0|56a1|56a2|56a3|56a4|56a5|56a6|56a7|56a8|56a9|56b0|' . + '56b1|56b2|56b3|56ba|56bb|56bc|56bd|56be|56bf|56c0|56c1', 'code' => 'Alchemist', 'process' => 'TSMC n6 (7nm)', 'years' => '2022+', }, - {'arch' => 'Gen-12.7', - 'ids' => '56c0|56c1', - 'code' => '', - 'process' => 'TSMC n6 (7nm)', - 'years' => '2022+', - }, {'arch' => 'Gen-13', - 'ids' => 'a70d|a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a0|' . - 'a7a1|a7a8|a7a9|a7aa|a7ab|a7ac|a7ad', + 'ids' => 'a70d|a719|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-13', - 'ids' => '7d40|7d45|7d55|7d60|7dd5', + 'ids' => '7d40|7d41|7d45|7d51|7d55|7d60|7d67|7dd1|7dd5', 'code' => '', 'process' => 'Intel 4 (7nm+)', 'years' => '2023+', @@ -18134,6 +18216,18 @@ sub set_intel_data { 'process' => 'TSMC 3nm?', 'years' => '2025+', }, + + ]; +} + +sub set_loongson_data { + $gpu_loongson = [ + {'arch' => '?', + 'ids' => '7a25', + 'code' => '', + 'process' => '12-14nm (STM)', + 'years' => '2023+', + }, ]; } @@ -18412,8 +18506,8 @@ sub set_nv_data { '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|2584|25a0|25a2|25a5|' . - '25ab|25ac|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|25f9|25fa|' . - '25fb|2838', + '25ab|25ac|25b0|25b2|25b6|25b8|25b9|25ba|25bb|25bc|25bd|25e0|25e2|25e5|25ec|' . + '25f9|25fa|25fb|2838', 'code' => 'GAxxx', 'kernel' => '', 'legacy' => 0, @@ -18437,9 +18531,10 @@ sub set_nv_data { 'years' => '2022+', }, {'arch' => 'Lovelace', - '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', + 'ids' => '2684|2685|2689|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|28b0|28b9|28ba|28bb|' . + '28e0|28e1', 'code' => 'AD1xx', 'kernel' => '', 'legacy' => 0, @@ -18465,6 +18560,10 @@ sub gpu_data { set_intel_data() if !$gpu_intel; $gpu = $gpu_intel; } + elsif ($v_id eq '0014'){ + set_loongson_data() if !$gpu_loongson; + $gpu = $gpu_loongson; + } else { set_nv_data() if !$gpu_nv; $gpu = $gpu_nv; @@ -25160,7 +25259,7 @@ sub get { sub get_repos_linux { eval $start if $b_log; my $rows = $_[0]; - my (@content,$data,@data2,@data3,@files,$repo,@repos); + my (@content,$data,@data2,@data3,@files,$pm_query,$repo,@repos); my ($key,$path); my $apk = '/etc/apk/repositories'; my $apt = '/etc/apt/sources.list'; @@ -25185,6 +25284,7 @@ sub get_repos_linux { my $slackpkg_plus = '/etc/slackpkg/slackpkgplus.conf'; my $slapt_get = '/etc/slapt-get/'; my $slpkg = '/etc/slpkg/repositories.toml'; + my $t2_src = '/usr/src/t2-src'; my $tazpkg = '/etc/slitaz/tazpkg.conf'; my $tazpkg_mirror = '/var/lib/tazpkg/mirror'; my $tce_app = '/usr/bin/tce'; @@ -25358,6 +25458,7 @@ sub get_repos_linux { } ## sbopkg, sboui, slackpkg, slackpkg+, slapt_get, slpkg: Slackware + derived # $slpkg = "$fake_data_dir/repo/slackware/slpkg-2.toml"; + # $slpkg = "$fake_data_dir/repo/slackware/slpkg-new-format-1.toml"; # $sbopkg = "$fake_data_dir/repo/slackware/sbopkg-2.conf"; # $sboui_backend = "$fake_data_dir/repo/slackware/sboui-backend-1.conf"; if (-f $slackpkg || -f $slackpkg_plus || -d $slapt_get || -f $slpkg || @@ -25477,38 +25578,58 @@ sub get_repos_linux { @content = (); } if (-f $slpkg){ - my ($active,$name,$repo); - my $holder = ''; - @data2 = main::reader($slpkg); - # We can't rely on the presence of empty lines as block separator. - push(@data2,'-eof-') if @data2; + my ($b_legacy,$b_new,$name,%repos); + @data2 = main::reader($slpkg,'strip'); # print Data::Dumper::Dumper \@data2; # old: "https://download.salixos.org/x86_64/slackware-15.0/" - # new: ["https://slac...nl/people/alien/sbrepos/", "15.0/", "x86_64/"] + # old, new syntax: ["https://slac...nl/people/alien/sbrepos/", "15.0/", "x86_64/"] + # newest: each block starts with name, eg: [DEFAULT], [ALIEN] foreach (@data2){ - next if /^\s*([#\[]|$)/; $_ = lc($_); - if (/^\s*(\S+?)_(repo(|_name|_mirror))\s*=\s*[\['"]{0,2}(.*?)[\]'"]{0,2}\s*$/ || - $_ eq '-eof-'){ - my ($key,$value) = ($2,$4); - if (($1 && $holder ne $1) || $_ eq '-eof-'){ - $holder = $1; - if ($name && $repo){ - if (!$active || $active =~ /^(true|1|yes)$/i){ - push(@content,"$name ~ $repo"); - } - ($active,$name,$repo) = (); - } - } - if ($key){ - if ($key eq 'repo'){ - $active = $value;} - elsif ($key eq 'repo_name'){ - $name = $value;} - elsif ($key eq 'repo_mirror'){ - # map new form to a real url - $value =~ s/['"],\s*['"]//g; - $repo = $value;} + # first legacy line should be [REPO...] + if (!$b_legacy && !$b_new && /\[repositories\]/){ + $b_legacy = 1; + next; + } + # otherwise [...] is repo name + if (!$b_legacy && /^\[(\S+)\]/){ + $name = $1; + $b_new = 1; + next; + } + my ($key,$value) = split(/\s*=\s*/,$_); + next if !$key || !defined $value; + $value =~ s/^\[?["']|["']\]?$//g; + if ($b_legacy){ + next if $key !~ /^(\S+?)_(repo(|_name|_mirror))$/; + $name = $1; + $key = $2; + if ($key eq 'repo'){ + $repos{$name}->{'active'} = $value;} + elsif ($key eq 'repo_mirror'){ + # map new form to a real url + $value =~ s/['"],\s*['"]//g; + $repos{$name}->{'repo'} = $value;} + } + elsif ($b_new){ + if ($key eq 'repo' && $name eq 'default'){ + $repos{'default'} = $value; + $name = ''; + next;} + elsif ($key eq 'enable'){ + $repos{$name}{'active'} = $value;} + elsif ($key eq 'mirror'){ + $repos{$name}{'repo'} = $value;} + } + } + # print Data::Dumper::Dumper \%repos; + if (%repos){ + foreach my $item (sort keys %repos){ + next if ref $repos{$item} ne 'HASH'; + if (!$repos{$item}->{'active'} || + $repos{$item}->{'active'} =~ /^(true|1|yes)$/i){ + my $default = ($repos{'default'} && $item eq $repos{'default'}) ? ' (default)' : ''; + push(@content,$item . $default . ' ~ ' . $repos{$item}->{'repo'}); } } } @@ -25734,6 +25855,30 @@ sub get_repos_linux { push(@$rows,@$data); } } + ## T2 Emerge + if (-d $t2_src){ + if ($path = main::check_program('svn')){ + @data2 = main::grabber("$path info $t2_src 2>/dev/null","\n",'strip'); + main::writer("$debugger_dir/system-repo-data-t2-svn.txt",\@data2) if $debugger_dir; + if (@data2){ + $repo = main::awk(\@data2,'URL:',2); + push(@content,$repo) if $repo; + } + } + if (!@content){ + $key = repo_data('missing','t2-emerge'); + } + else { + clean_url(\@content); + $key = repo_data('active','t2-emerge'); + $pm_query = ''; + } + push(@$rows, + {main::key($num++,1,1,$key) => $t2_src}, + [@content], + ); + (@content,$pm_query,$repo) = (); + } ## xbps: Void if (-d $xbps_dir_1 || -d $xbps_dir_2){ @files = main::globber("$xbps_dir_1*.conf"); @@ -25750,6 +25895,8 @@ sub get_repos_linux { if ($path = main::check_program('urpmq')){ @data2 = main::grabber("$path --list-media active --list-url 2>/dev/null","\n",'strip'); main::writer("$debugger_dir/system-repo-data-urpmq.txt",\@data2) if $debugger_dir; + # my $file = "$ENV{HOME}/bin/scripts/inxi/data/repo/urpmq/system-mrmazda-1.txt"; + # @data2 = main::reader($file,'strip'); # Now we need to create the structure: repo info: repo path. We do that by # looping through the lines of the output and then putting it back into the # <data>:<url> format print repos expects to see. Note this structure in the @@ -25765,30 +25912,37 @@ sub get_repos_linux { $_ =~ s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g; $_ =~ s/\e\[([0-9];)?[0-9]+m//g; # urpmq output is the same each line, repo name space repo url, can be: - # rsync://, ftp://, file://, http:// OR repo is locally mounted on FS in some cases - if (/(.+)\s([\S]+:\/\/.+)/){ + # rsync://, ftp://, file://, http:// OR repo is locally mounted on /var FS in some cases + if (/(.+)\s(\S+:\/\/.+|\/var\/\S+)/){ # pack the repo url - push(@content, $1); - clean_url(\@content); - # get the repo - $repo = $2; - push(@$rows, - {main::key($num++,1,1,'urpm repo') => $repo}, - [@content], - ); - @content = (); + push(@content, $1 . ' ~ ' . $2); } } + if (!@content){ + $key = repo_data('missing','urpm'); + $pm_query = main::message('pm-no-repos','urpmq'); + } + else { + clean_url(\@content); + $key = repo_data('active','urpm'); + $pm_query = ''; + } + push(@$rows, + {main::key($num++,1,1,$key) => $pm_query}, + [@content], + ); + @content = (); } # pisi: Pardus, Solus if ((-d $pisi_dir && ($path = main::check_program('pisi'))) || - (-d $eopkg_dir && ($path = main::check_program('eopkg')))){ - #$path = 'eopkg'; + (-d $eopkg_dir && ($path = main::check_program('eopkg')))){ + # $path = 'eopkg'; my $which = ($path =~ /pisi$/) ? 'pisi': 'eopkg'; - my $cmd = ($which eq 'pisi') ? "$path list-repo": "$path lr"; + my $cmd = ($which eq 'pisi') ? "$path list-repo" : "$path lr"; # my $file = "$ENV{HOME}/bin/scripts/inxi/data/repo/solus/eopkg-2.txt"; # @data2 = main::reader($file,'strip'); @data2 = main::grabber("$cmd 2>/dev/null","\n",'strip'); + push(@data2,'END') if @data2; main::writer("$debugger_dir/system-repo-data-$which.txt",\@data2) if $debugger_dir; # Now we need to create the structure: repo info: repo path # We do that by looping through the lines of the output and then putting it @@ -25804,36 +25958,34 @@ sub get_repos_linux { foreach (@data2){ next if /^\s*$/; # need to dump leading/trailing spaces and clear out color codes for irc output - $_ =~ s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g; - $_ =~ s/\e\[([0-9];)?[0-9]+m//g; - if (/^\/|:\/\//){ - push(@content, $_) if $repo; - } - # Local [inactive] Unstable [active] - elsif (/^(.*)\s\[([\S]+)\]/){ - $repo = $1; - $repo = ($2 =~ /^activ/i) ? $repo : ''; - } - if ($repo && @content){ - clean_url(\@content); - $key = repo_data('active',$which); - push(@$rows, - {main::key($num++,1,1,$key) => $repo}, - [@content], - ); - $repo = ''; - @content = (); + if ($_ ne 'END'){ + $_ =~ s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g; + $_ =~ s/\e\[([0-9];)?[0-9]+m//g; + if (/^\/|:\/\// && $repo){ + push(@content, $repo . ' ~ ' . $_); + $repo = ''; + } + # Local [inactive] Unstable [active] + elsif (/^(.*)\s\[([\S]+)\]/){ + $repo = $1; + $repo = ($2 =~ /^activ/) ? $repo : ''; + } } } - # last one if present - if ($repo && @content){ + if (!@content){ + $key = repo_data('missing',$which); + $pm_query = main::message('pm-no-repos',$which); + } + else { clean_url(\@content); $key = repo_data('active',$which); - push(@$rows, - {main::key($num++,1,1,$key) => $repo}, - [@content], - ); + $pm_query = ''; } + push(@$rows, + {main::key($num++,1,1,$key) => $pm_query}, + [@content], + ); + (@content,$repo) = (); } ## nix: General pm for Linux/Unix if (-f $nix && ($path = main::check_program('nix-channel'))){ @@ -26010,7 +26162,7 @@ sub set_repo_keys { 'cards-missing' => 'No active CARDS collections in', 'dnf-active' => 'Active dnf repos in', 'dnf-missing' => 'No active dnf repos in', - 'eopkg-active' => 'Active eopkg repo', + 'eopkg-active' => 'Active eopkg repos', 'eopkg-missing' => 'No active eopkg repos found', 'files-missing' => 'No repo files found in', 'freebsd-active' => 'FreeBSD update server', @@ -26034,7 +26186,7 @@ sub set_repo_keys { 'pacman-missing' => 'No active pacman repos in', 'pacman-g2-active' => 'Active pacman-g2 repo servers in', 'pacman-g2-missing' => 'No active pacman-g2 repos in', - 'pisi-active' => 'Active pisi repo', + 'pisi-active' => 'Active pisi repos', 'pisi-missing' => 'No active pisi repos found', 'portage-active' => 'Enabled portage sources in', 'portage-missing' => 'No enabled portage sources in', @@ -26055,10 +26207,14 @@ sub set_repo_keys { 'slaptget-missing' => 'No active slapt-get repos in', 'slpkg-active' => 'Active slpkg repos in', 'slpkg-missing' => 'No active slpkg repos in', + 't2-emerge-active' => 'Active T2 Emerge URL in', + 't2-emerge-missing' => 'No active T2 Emerge URLs in', 'tazpkg-active' => 'tazpkg mirrors in', 'tazpkg-missing' => 'No tazpkg mirrors in', 'tce-active' => 'tce mirrors in', 'tce-missing' => 'No tce mirrors in', + 'urpm-active' => 'Active urpm repos', + 'urpm-missing' => 'No active urpm repos found', 'xbps-active' => 'Active xbps repos in', 'xbps-missing' => 'No active xbps repos in', 'yum-active' => 'Active yum repos in', @@ -26077,6 +26233,7 @@ sub repo_data { return $repo_keys{$type . '-' . $status}; } +# Args: 0: repo file; 1: pm type; 2: repo line search, 3: split; 4: count sub repo_builder { eval $start if $b_log; my ($file,$type,$search,$split,$count) = @_; @@ -29643,7 +29800,9 @@ sub de_kde_tde_data { if ($desktop_session eq 'trinity' || $xdg_desktop eq 'trinity' || (!$desktop_session && !$xdg_desktop && @{$ps_data{'de-ps-detect'}} && (grep {/^tde/} @{$ps_data{'de-ps-detect'}}))){ - if ($program = main::check_program('kdesktop')){ + # 14.2 moved kdesktop to location not in PATH in some distros, so either of these will fail + if (($program = main::check_program('kdesktop')) || + ($program = main::check_program('twin'))){ ($desktop->[0],$desktop->[1],$v_data) = ProgramData::full('kdesktop-trinity',$program,0,'raw'); } if ($extra > 1 && $v_data && @$v_data){ @@ -31440,8 +31599,9 @@ sub get_dm_lm { udm wdm x3dm xdm xdmctl xenodm); } # greetd frontends: agreety dlm gtkgreet qtgreet tuigreet wlgreet + # slick, elephant greeters for lightdm so aren't really lm else { - @dms = qw(elogind greetd seatd tbsm); + @dms = qw(elogind greetd qtgreet seatd tbsm); } # print Data::Dumper::Dumper \@glob; # used to test for .pid/lock type file or directory, now just see if the @@ -31614,6 +31774,7 @@ sub get_distro_linux { siduction-version sidux-version slax-version slint-version slitaz-release solusos-release turbolinux-release zenwalk-version); my $derived_str = join('|', @derived); + # if t2 ever adds a standard distro file name, add here. Ideally it adds os-release my @primary = qw(altlinux-release arch-release gentoo-release redhat-release slackware-version SuSE-release); my $primary_str = join('|', @primary); @@ -31637,20 +31798,29 @@ sub get_distro_linux { $etc_issue = main::reader($issue,'strip',0) if -r $issue; # debian issue can end with weird escapes like \n \l # antergos: Antergos Linux \r (\l) - $etc_issue = main::clean_characters($etc_issue) if $etc_issue; + main::clean_characters(\$etc_issue) if $etc_issue; # Note: always exceptions, so wild card after release/version: # /etc/lsb-release-crunchbang # Wait to handle since crunchbang file is one of the few in the world that # uses this method - @{$distro->{'files'}} = main::globber('/etc/{*[-_]{[rR]elease,[vV]ersion}*,issue}'); - push(@{$distro->{'files'}}, '/etc/bodhibuilder.conf') if -r '/etc/bodhibuilder.conf'; # legacy + @{$distro->{'files'}} = main::globber('/etc/{*[-_]{[rR]elease,[vV]ersion}*,VERSION,issue}'); @osr = main::reader($os_release) if -r $os_release; + # a few with custom distro file locations + if (-r '/etc/bodhibuilder.conf'){ + push(@{$distro->{'files'}}, '/etc/bodhibuilder.conf'); # legacy + } if (-f '/etc/bodhi/info'){ $lsb_release = '/etc/bodhi/info'; $distro->{'file'} = $lsb_release; $distro->{'issue-skip'} = 1; push(@{$distro->{'files'}}, $lsb_release); } + # their issue is full of ascii art, and they use irregular distro file name + elsif (-d '/usr/src/t2-src' && -s '/etc/VERSION'){ + $distro->{'file'} = '/etc/VERSION'; + push(@{$distro->{'files'}}, $distro->{'file'}); + $distro->{'issue-skip'} = 1; + } $distro->{'issue'} = $issue if -f $issue; $distro->{'lsb'} = $lsb_release if -f $lsb_release; if (!$distro->{'issue-skip'} && $etc_issue){ @@ -31696,7 +31866,8 @@ sub get_distro_linux { # Special case, to force manjaro/antergos which also have arch-release # manjaro should use lsb, which has the full info, arch uses os release # antergos should use /etc/issue. We've already checked os-release above - if ($distro->{'id'} eq 'antergos' || (grep {/antergos|chakra|manjaro/} @{$distro->{'files'}})){ + if ($distro->{'id'} eq 'antergos' || + (grep {/antergos|chakra|manjaro/} @{$distro->{'files'}})){ @{$distro->{'files'}} = grep {!/arch-release/} @{$distro->{'files'}}; } my $dist_files_str = join('|', @{$distro->{'files'}}); @@ -31727,7 +31898,7 @@ sub get_distro_linux { if (-r '/etc/antiX'){ @working = main::reader('/etc/antiX'); $distro->{'name'} = main::awk(\@working,'antix.*\.iso') if @working; - $distro->{'name'} = main::clean_characters($distro->{'name'}) if $distro->{'name'}; + main::clean_characters(\$distro->{'name'}) if $distro->{'name'}; push(@{$distro->{'method'}},'file: /etc/antiX'); } # This handles case where only one release/version file was found, and it's lsb-release. @@ -31773,9 +31944,7 @@ sub get_distro_linux { } push(@{$distro->{'method'}},'default: distro file'); } - if ($distro->{'name'}){ - $distro->{'name'} = main::clean_characters($distro->{'name'}); - } + main::clean_characters(\$distro->{'name'}) if $distro->{'name'}; } # Otherwise try the default debian/ubuntu/distro /etc/issue file elsif ($distro->{'issue'}){ @@ -31803,8 +31972,14 @@ sub get_distro_linux { push(@{$distro->{'method'}},'issue-id; from program version'); } else { - $distro->{'name'} = $etc_issue; - push(@{$distro->{'method'}},'issue: source'); + # make sure it has letters in name! + if (($lc_issue =~ tr/[a-z]/[a-z]/) > 3){ + $distro->{'name'} = $etc_issue; + push(@{$distro->{'method'}},'issue: source'); + } + else { + push(@{$distro->{'method'}},'issue: invalid distro value'); + } # This handles an arch bug where /etc/arch-release is empty and /etc/issue # is corrupted only older arch installs that have not been updated should # have this fallback required, new ones use os-release @@ -32063,7 +32238,7 @@ sub system_base_linux { foreach my $key (keys %base_version){ if (-r $base_version{$key} && $distro->{'name'} =~ /($key)/i){ $distro->{'base'} = main::reader($base_version{$key},'strip',0); - $distro->{'base'} = main::clean_characters($distro->{'base'}) if $distro->{'base'}; + main::clean_characters(\$distro->{'base'}) if $distro->{'base'}; push(@{$distro->{'base-method'}},"base_version: file: $key"); last; } @@ -34060,6 +34235,7 @@ sub package_counts { ['guix-sys','guix','p','package -p "/run/current-system/profile" -I',1,0,''], ['guix-usr','guix','p','package -I',1,0,''], ['kiss','kiss','p','list',1,0,''], + ['mine','mine','p','-q',1,0,'','',['gasgui','gastone']], ['mport','mport','p','list',1,0,''], # netpkg puts packages in same place as slackpkg, only way to tell apart ['netpkg','netpkg','d','/var/lib/pkgtools/packages/*',1,5,'\\/', @@ -34089,14 +34265,11 @@ sub package_counts { ['sbopkg','sboui','slackpkg','slapt-get','slpkg','swaret']], # rpm way too slow without nodigest/sig!! confirms packages exist # but even with, MASSIVELY slow in some cases, > 20, 30 seconds!!!! - # find another way to get rpm package counts or don't show this feature for rpm!! - ['rpm','rpm','force','-qa --nodigest --nosignature',1,0,'', - 'main::check_program(\'apt-get\') && main::check_program(\'dpkg\')', + # Find another way to get rpm package counts to get rid of --rpm requirement! + ['rpm','rpm','force','-qa --nodigest --nosignature',1,0,'','skip_pm($pm)', ['dnf','packagekit','up2date','urpmi','yast','yum','zypper']], - # uncommon case where apt-get frontend for rpm, w/o dpkg, like AltLinux did - ['rpm-apt','rpm','p','-qa',1,0,'', - 'main::check_program(\'apt-get\') && !main::check_program(\'dpkg\')', - ['apt-get','rpm']], + # uncommon case where apt-get frontend for rpm, w/o dpkg, eg AltLinux + ['rpm-apt','rpm','p','-qa',1,0,'','skip_pm($pm)',['apt-get','rpm']], # scratch is a programming language too, with software called scratch ['scratch','pkgbuild','d','/var/lib/scratchpkg/index/*/.pkginfo',1,5,'\\/', '-d \'/var/lib/scratchpkg\''], @@ -34106,8 +34279,6 @@ sub package_counts { # ['spkg','spkg','p','--installed',1,0,''], ['tazpkg','tazpkg','p','list',1,0,'','',['tazpkgbox','tazpanel']], ['tce','tce-status','p','-i',1,0,'','',['apps','tce-load']], - # note: I believe mageia uses rpm internally but confirm - # ['urpmi','urpmq','p','??',1,0,''], ['xbps','xbps-query','p','-l',1,1,''], # ['xxx-brew','brew','p','--cellar',0,0,''], # verify how this works ['zzz-flatpak','flatpak','p','list',0,0,''], @@ -34116,9 +34287,11 @@ sub package_counts { my ($program); foreach my $pm (@pkg_managers){ if ($program = main::check_program($pm->[1])){ + print "0: test: $pm->[0]: $pm->[1]\n" if $dbg[67]; next if $pm->[7] && !eval $pm->[7]; - my ($disabled,$libs,@list,$pmts); - if ($pm->[2] eq 'p' || ($pm->[2] eq 'force' && check_run($pm))){ + print "1: use: $pm->[0]: $pm->[1]\n" if $dbg[67]; + my ($disabled,$libs,@list,$pm_tools); + if ($pm->[2] eq 'p' || ($pm->[2] eq 'force' && use_pm($pm))){ chomp(@list = qx($program $pm->[3] 2>/dev/null)) if $pm->[3]; } elsif ($pm->[2] eq 'd'){ @@ -34154,14 +34327,14 @@ sub package_counts { } } if (@tools){ - main::make_list_value(\@tools,\$pmts,',','sort'); + main::make_list_value(\@tools,\$pm_tools,',','sort'); } } $pms{$pm->[0]} = { 'disabled' => $disabled, 'pkgs' => $count, 'libs' => $libs, - 'tools' => $pmts, + 'tools' => $pm_tools, }; $pms{'total'} += $count if defined $count; # print Data::Dumper::Dumper \%pms; @@ -34184,20 +34357,51 @@ sub appimage_counts { } } -sub check_run { +# skip is if false, so skip conditions must be false, non skip true. +# args: 0: $pm ref, used directly +sub skip_pm { + my $b_use; + # print Data::Dumper::Dumper $_[0]; + if (${_[0]}->[1] eq 'rpm'){ + # use only if not urpmi and not rpm-apt, this covers most cases, and use_pm + # fine tunes the coverage. + if (${_[0]}->[0] eq 'rpm'){ + if (!(main::check_program('apt-get') && !main::check_program('dpkg'))){ + $b_use = 1; + } + } + # this covers corner case of alt linux, that has apt-get but not dpkg + elsif (${_[0]}->[0] eq 'rpm-apt'){ + if (main::check_program('apt-get') && !main::check_program('dpkg')){ + $b_use = 1; + } + } + } + return $b_use; +} + +# args: 0: $pm ref, use directly +sub use_pm { if ($force{'pkg'}){ + print " use_pm: --rpm force\n" if $dbg[67]; return 1; } elsif (${_[0]}->[1] eq 'rpm'){ # testing for core wrappers for rpm, these should not be present in non - # redhat/suse based systems. mageia has urpmi, dnf, yum + # mageia/redhat/suse based systems. mageia has urpmi, dnf, yum foreach my $tool (('dnf','up2date','urpmi','yum','zypper')){ - return 0 if main::check_program($tool); + if (main::check_program($tool)){ + print " use_pm: $tool match\n" if $dbg[67]; + return 0; + } } - # Note: test fails: apt-rpm (pclinuxos,alt linux), unknown how to detect + # Note: test fails: apt-rpm (pclinuxos,alt linux), but apt-rpm should pass # Add pm test if known to have rpm available. foreach my $tool (('dpkg','pacman','pkgtool','tce-load')){ - return 1 if main::check_program($tool); + if (main::check_program($tool)){ + print " use_pm: $tool match\n" if $dbg[67]; + return 1; + } } } } @@ -35301,7 +35505,7 @@ sub set_values { 'kded2' => ['^KDE( Development Platform)?:',2,'--version','KDE',0,0,0,'\sDevelopment Platform',''], 'kded3' => ['^KDE( Development Platform)?:',2,'--version','KDE',0,0,0,'\sDevelopment Platform',''], 'kded4' => ['^KDE( Development Platform)?:',2,'--version','KDE Plasma',0,0,0,'\sDevelopment Platform',''], - 'kdesktop-trinity' => ['^TDE:',2,'--version','TDE (Trinity)',0,0,0], + 'kdesktop-trinity' => ['^TDE:',2,'--version','TDE (Trinity)',0,0,0], # kdesktop/twin 'kiwmi' => ['^kwimi',0,'0','kiwmi',0,1,0,'',''], # unverified 'ksmcon' => ['^ksmcon',0,'0','ksmcon',0,1,0,'',''],# no version 'kwin' => ['^kwin',0,'0','kwin',0,1,0,'',''],# no version, same as kde @@ -35324,6 +35528,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,'',''], + 'magmawm' => ['^magma',0,'0','MagmaWM',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 @@ -35333,6 +35538,7 @@ sub set_values { 'mate-about' => ['^MATE[[:space:]]DESKTOP',-1,'--version','MATE',0,1,0,'',''], # note, mate-session when launched with full path returns full path in version string 'mate-session' => ['mate-session',-1,'--version','MATE',0,1,0,'',''], + 'maxx' => ['^maxx',0,'0','MaXX',0,1,0,'',''], # unverified, 5Dwm recreation 'maynard' => ['^maynard',0,'0','maynard',0,1,0,'',''], # unverified 'maze' => ['^maze',0,'0','Maze',0,1,0,'',''], # unverified 'mcompositor' => ['^mcompositor',0,'0','MCompositor',0,1,0,'',''], # unverified @@ -35354,6 +35560,8 @@ sub set_values { 'mwm' => ['^mwm',0,'0','MWM',0,1,0,'',''],# no version 'nawm' => ['^nawm',0,'0','nawm',0,1,0,'',''],# unverified 'newm' => ['^newm',0,'0','newm',0,1,0,'',''], # unverified + 'newm-atha' => ['^newm',0,'0','new-atha',0,1,0,'',''], # unverified + 'niri' => ['^niri',0,'0','niri',0,1,0,'',''], # unverified 'notion' => ['^.',1,'--version','Notion',0,1,0,'',''], 'nscde' => ['^(fvwm|nscde)',2,'--version','NsCDE',0,1,0,'',''], 'nucleus' => ['^nucleus',0,'0','Nucleus',0,1,0,'',''], # unverified @@ -35367,6 +35575,7 @@ sub set_values { 'perceptia' => ['^perceptia',0,'0','perceptia',0,1,0,'',''], 'phoc' => ['^phoc',0,'0','phoc',0,1,0,'',''], # unverified 'picom' => ['^\S',1,'--version','Picom',0,1,0,'^v',''], + 'pinnacle' => ['^pinnacle',0,'0','Pinnacle',0,1,0,'',''], # unverified 'plasmashell' => ['^plasmashell',2,'--version','KDE Plasma',0,1,0,'',''], 'polonium' => ['^polonium',0,'0','polonium',0,1,0,'',''], # unverified 'pywm' => ['^pywm',0,'0','pywm',0,1,0,'',''], # unverified @@ -35389,9 +35598,9 @@ sub set_values { # out of stump, 2 --version, but in tries to start new wm instance endless hang 'stumpwm' => ['^SBCL',0,'--version','StumpWM',0,1,0,'',''], # hangs when run in wm 'subtle' => ['^subtle',2,'--version','subtle',0,1,0,'',''], - 'surfaceflinger' => ['surfaceflinger^',0,'0','SurfaceFlinger',0,1,0,'',''], # Android, unverified + 'surfaceflinger' => ['surfaceflinger^',0,'0','SurfaceFlinger',0,1,0,'',''], # unverified, Android 'sway' => ['^sway',3,'-v','Sway',0,1,0,'',''], - 'swayfx' => ['^swayfx',0,'0','SwayFX',0,1,0,'',''], # probably same as sway, unverified + 'swayfx' => ['^swayfx',0,'0','SwayFX',0,1,0,'',''], # unverified, probably same as sway 'swayfx' => ['^sway',3,'-v','SwayFX',0,1,0,'',''], # not sure if safe 'swc' => ['^swc',0,'0','swc',0,1,0,'',''], # unverified 'swvkc' => ['^swvkc',0,'0','swvkc',0,1,0,'',''], # unverified @@ -35402,7 +35611,7 @@ sub set_values { 'tinywm' => ['^tinywm',0,'0','TinyWM',0,1,0,'',''], # no version 'trinkster' => ['^trinkster',0,'0','Trinkster',0,1,0,'',''], # unverified 'tvtwm' => ['^tvtwm',0,'0','tvtwm',0,1,0,'',''], # unverified - 'twin' => ['^Twin:',2,'--version','Twin',0,0,0,'',''], + 'twin' => ['^Twin:',2,'--version','Twin',0,0,0,'',''], 'twm' => ['^twm',0,'0','TWM',0,1,0,'',''], # no version 'ukui' => ['^ukui-session',2,'--version','UKUI',0,1,0,'',''], 'ukwm' => ['^ukwm',2,'--version','ukwm',0,1,0,'',''], @@ -35415,7 +35624,7 @@ sub set_values { 'vimway' => ['^vimway',0,'0','vimway',0,1,0,'',''], # unverified 'vivarium' => ['^vivarium',0,'0','Vivarium',0,1,0,'',''], # unverified 'vtwm' => ['^vtwm',0,'0','vtwm',0,1,0,'',''], # no version - 'w9wm' => ['^w9wm',3,'-version','w9wm',0,1,0,'',''], # fork of 9wm, unverified + 'w9wm' => ['^w9wm',3,'-version','w9wm',0,1,0,'',''], # unverified, fork of 9wm 'wavy' => ['^wavy',0,'0','wavy',0,1,0,'',''], # unverified 'waybox' => ['^way',0,'0','waybox',0,1,0,'',''], # unverified 'waycooler' => ['^way',3,'--version','way-cooler',0,1,0,'',''], @@ -35440,7 +35649,7 @@ sub set_values { 'wmx' => ['^wmx',0,'0','wmx',0,1,0,'',''], # no version 'wxrc' => ['^wx',0,'0','',0,1,0,'WXRC',''], # unverified 'wxrd' => ['^wx',0,'0','',0,1,0,'WXRD',''], # unverified - 'x9wm' => ['^x9wm',3,'-version','x9wm',0,1,0,'',''], # fork of 9wm, unverified + 'x9wm' => ['^x9wm',3,'-version','x9wm',0,1,0,'',''], # unverified, fork of 9wm 'xcompmgr' => ['^xcompmgr',0,'0','xcompmgr',0,1,0,'',''], # no version 'xfce-panel' => ['^xfce-panel',2,'--version','Xfce',0,1,0,'',''], 'xfce4-panel' => ['^xfce4-panel',2,'--version','Xfce',0,1,0,'',''], @@ -35471,6 +35680,7 @@ sub set_values { 'cdm' => ['^cdm',0,'0','CDM',0,1,0,'',''], # might be xlogin, unknown output for -V 'clogin' => ['^clogin',0,'-V','clogin',0,1,0,'',''], # unverified, cysco router + 'elephant-greeter' => ['^elephant',0,'0','elephant-greeter',0,1,0,'',''], # unverified, lightdm greeter 'elogind' => ['^elogind',0,'0','elogind',0,1,0,'',''], # no version 'emptty' => ['^emptty',0,'0','EMPTTY',0,1,0,'',''], # unverified 'entranced' => ['^entrance',0,'0','Entrance',0,1,0,'',''], @@ -35487,12 +35697,14 @@ sub set_values { 'lxdm' => ['^lxdm',0,'0','LXDM',0,1,0,'',''], 'ly' => ['^ly',3,'--version','Ly',0,1,0,'',''], 'mdm' => ['^mdm',0,'0','MDM',0,1,0,'',''], - 'mlogind' => ['^mlogind',3,'-v','mlogind',0,1,0,'',''], # guess, unverified, BSD SLiM fork + 'mlogind' => ['^mlogind',3,'-v','mlogind',0,1,0,'',''], # unverified, guess. BSD SLiM fork 'nodm' => ['^nodm',0,'0','nodm',0,1,0,'',''], 'pcdm' => ['^pcdm',0,'0','PCDM',0,1,0,'',''], 'qingy' => ['^qingy',0,'0','qingy',0,1,0,'',''], # unverified + 'qtgreet' => ['^qtgreet',0,'0','qtgreet',0,1,0,'',''], # unverified 'seatd' => ['^seatd',3,'-v','seatd',0,1,0,'',''], 'sddm' => ['^sddm',0,'0','SDDM',0,1,0,'',''], + 'slick-greeter' => ['^slick',0,'0','slick-greeter',0,1,0,'',''], # unverified, , lightdm greeter 'slim' => ['slim version',3,'-v','SLiM',0,1,0,'',''], 'slimski' => ['slimski version',3,'-v','slimski',0,1,0,'',''], # slim fork 'tbsm' => ['^tbsm',0,'0','tbsm',0,1,0,'',''], # unverified @@ -35508,7 +35720,6 @@ sub set_values { ## See ShellData::shell_test() for unhandled but known shells 'ash' => ['',3,'pkg','ash',1,0,0,'',''], # special; dash precursor 'bash' => ['^GNU[[:space:]]bash',4,'--version','Bash',1,1,0,'',''], - 'busybox' => ['^busybox',0,'0','BusyBox',1,0,0,'',''], # unverified, hush/ash likely 'cicada' => ['^\s*version',2,'cmd','cicada',1,1,0,'',''], # special 'csh' => ['^tcsh',2,'--version','csh',1,1,0,'',''], # mapped to tcsh often 'dash' => ['',3,'pkg','DASH',1,0,0,'',''], # no version, pkg query @@ -35540,7 +35751,9 @@ sub set_values { 'pulseaudio' => ['^pulseaudio',2,'--version','PulseAudio',0,1,0,'',''], 'roaraudio' => ['^roaraudio',0,'0','RoarAudio',0,1,0,'',''], # no version/unknown? ## Tools: Compilers ## - 'clang' => ['clang',3,'--version','clang',1,1,0,'',''], + # T2 SED clang version 18.1 + # clang version 18.1 + 'clang' => ['clang',2,'--version','clang',1,1,0,'^.*clang',''], # gcc (Debian 6.3.0-18) 6.3.0 20170516 # gcc (GCC) 4.2.2 20070831 prerelease [FreeBSD] 'gcc' => ['^gcc',2,'--version','GCC',1,0,0,'\([^\)]*\)',''], @@ -35833,7 +36046,7 @@ sub set_de_wm { dawn dtwm dusk dwm echinus evilwm flwm flwm_topside fvwm.*-crystal\S* fvwm1 fvwm2 fvwm3 fvwm95 fvwm hackedbox herbstluftwm i3 instantwm ion3 jbwm jwm larswm leftwm lwm - matchbox-window-manager mcwm mini miwm mlvwm monsterwm musca mvwm mwm + matchbox-window-manager maxx mcwm mini miwm mlvwm monsterwm musca mvwm mwm nawm notion openbox nscde pekwm penrose qvwm ratpoison sapphire sawfish scrotwm snapwm spectrwm stumpwm subtle tinywm tvtwm twm uwm vtwm windowlab [wW]indo[mM]aker w9wm wingo wm2 wmfs wmfs2 wmii2 wmii @@ -35865,8 +36078,9 @@ sub set_de_wm { cage cagebreak cardboard chameleonwm clayland comfc dwl dwc epd-wm fireplace feathers fenestra glass gamescope greenfield grefson hikari hopalong [Hh]yprland inaban japokwm kiwmi labwc laikawm lipstick liri - mahogany marina maze maynard motorcar newm nucleus - orbital orbment perceptia phoc polonium pywm qtile river rootston rustland + magmawm mahogany marina maze maynard motorcar newm(-atha)? niri nucleus + orbital orbment perceptia phoc pinnacle polonium pywm + qtile river rootston rustland simulavr skylight smithay sommelier sway swayfx swc swvkc tabby taiwins tinybox tinywl trinkster velox vimway vivarium wavy waybox way-?cooler wayfire wayhouse waymonad westeros westford @@ -35878,15 +36092,17 @@ sub set_de_wm { albert alltray awesomebar awn bar barpanel bbdock bbpager bemenu bipolarbar bmpanel bmpanel2 budgie-panel cairo-dock dde-dock deskmenu dmenu(-wayland)? dockbarx docker docky dzen dzen2 - fbpanel fspanel fuzzel glx-dock gnome-panel hpanel + fbpanel fspanel fuzzel gmenu glx-dock gnome-panel hpanel hybridbar i3bar i3-status(-rs|-rust)? icewmtray jgmenu kdocker kicker krunner ksmoothdock - latte lavalauncher latte-dock lemonbar ltpanel luastatus lxpanel lxqt-panel + latte latte-dock lavalauncher lemonbar ltpanel luastatus + lxpanel lxqt-panel matchbox-panel mate-panel mauncher mopag nwg-(bar|dock|launchers|panel) - openbox-menu ourico perlpanel plank polybar pypanel razor(qt)?-panel rofi rootbar + onagre openbox-menu ourico perlpanel plank polybar pypanel + razor(qt)?-panel rofi rootbar sfwbar simplepanel sirula some_sorta_bar stalonetray swaybar - taffybar taskbar tint2 tofi trayer ukui-panel vala-panel - wapanel waybar wbar wharf wingpanel witray wldash wmdocker wmsystemtray wofi - xfce[45]?-panel xmobar yambar yabar yofi))); + taffybar taskbar tint2 tofi trayer ukui-panel ulauncher vala-panel + wapanel waybar wbar wharf wingpanel witray wldash wmdocker wmenu + wmsystemtray wofi xfce[45]?-panel xmobar yambar yabar yofi))); # 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 @@ -35894,7 +36110,7 @@ sub set_de_wm { 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 + waylock xautolock xfce4-screensaver xlock xlockmore xscreensaver xscreensaver-systemd xsecurelock xss-lock xtrlock); process_items(\@{$ps_data{'tools-active'}},join('|',@{$ps_data{'tools-test'}})); } |
