diff options
| author | 2025-01-14 07:09:37 -0500 | |
|---|---|---|
| committer | 2025-01-14 07:09:37 -0500 | |
| commit | 1babf25b0c42874c4cdbe2760cd284706ac17e76 (patch) | |
| tree | 7f54b4f1e7230a5e795765098b2e8175d4f972d8 | |
| parent | 60482b1f42c34afb71d736d8406c4c4092301d49 (diff) | |
| parent | 4d80aa82167fdef4cb54a02c1e75f0ee19ebb540 (diff) | |
Update upstream source from tag 'upstream/3.3.37-1'
Update to upstream version '3.3.37-1'
with Debian dir eb6c9a802655196634cd0b9eeb9f9db72783b2e8
| -rwxr-xr-x | inxi | 807 | ||||
| -rw-r--r-- | inxi.1 | 483 | ||||
| -rw-r--r-- | inxi.changelog | 356 | ||||
| -rw-r--r-- | inxi.metainfo.xml | 37 |
4 files changed, 1223 insertions, 460 deletions
@@ -1,6 +1,6 @@ #!/usr/bin/env perl ## infobash: Copyright (C) 2005-2007 Michiel de Boer aka locsmif -## inxi: Copyright (C) 2008-2024 Harald Hope +## inxi: Copyright (C) 2008-2025 Harald Hope ## Additional features (C) Scott Rogers - kde, cpu info ## Parse::EDID (C): 2005-2010 by Mandriva SA, Pascal Rigaux, Anssi Hannula ## Further fixes (listed as known): Horst Tritremmel <hjt at sidux.com> @@ -49,8 +49,8 @@ use POSIX qw(ceil uname strftime ttyname); ## INXI INFO ## my $self_name='inxi'; -my $self_version='3.3.36'; -my $self_date='2024-09-04'; +my $self_version='3.3.37'; +my $self_date='2025-01-06'; my $self_patch='00'; ## END INXI INFO ## @@ -674,7 +674,7 @@ sub set_user_paths { $user_data_dir="$ENV{'HOME'}/.$self_name"; } # note, this used to be created/checked in specific instance, but we'll just - # do it universally so it's done at script start. + # do it universally so it's done at start. if (! -d $user_data_dir){ mkdir $user_data_dir; # system "echo", "Made: $user_data_dir"; @@ -1982,11 +1982,14 @@ sub display_data { ['clinfo',''], ['clinfo','--list'], ['clinfo','--raw'], # machine friendly - ['eglinfo',''], - ['eglinfo','-B'], + # ['eglinfo',''], # egl is set below to allow --no-egl flag use for old Intel + # ['eglinfo','-B'], ['es2_info',''], + ['gnome-randr',''], ['glxinfo',''], ['glxinfo','-B'], + ['kscreen-console','outputs'], # this may create a screen type session + ['kscreen-doctor','--outputs'], ['kded','--version'], ['kded1','--version'], ['kded2','--version'], @@ -2018,6 +2021,7 @@ sub display_data { ['swaymsg','-t get_tree'], ['swaymsg','-t get_workspaces -p'], ['swaymsg','-t get_workspaces -r'], + ['swaymsg','--version'], ['switcherooctl','list'], ['twin','--version'], # TDE ['vainfo',''], @@ -2029,7 +2033,7 @@ sub display_data { ['weston-info',''], ['wmctrl','-m'], ['weston','--version'], - ['wlr-randr',''], + ['wlr-randr',''], # no --version ['xdpyinfo',''], ['xdriinfo',''], ['Xfbdev','-version'], @@ -2042,6 +2046,9 @@ sub display_data { ['Xvesa','-listmodes'], ['Xwayland','-version'], ); + if (!$force{'no-egl'}){ + push(@cmds,['eglinfo',''],['eglinfo','-B']); + } run_commands(\@cmds,'display'); } @@ -2780,7 +2787,7 @@ sub get_file_http_tiny { my %headers = ($ua) ? ('agent' => $ua) : (); my $tiny = HTTP::Tiny->new(%headers); # note: default is no verify, so default here actually is to verify unless overridden - $tiny->verify_SSL => 1 if !$use{'no-ssl'}; + $tiny->verify_SSL => 1 if !$force{'no-ssl'}; my $response = $tiny->get($url); my $return = 1; my $debug = 0; @@ -2895,7 +2902,7 @@ sub set_downloader { $dl{'dl'} = ''; } # $use{'no-ssl' is set to 1 with --no-ssl, when false, unset to '' - $dl{'no-ssl'} = '' if !$use{'no-ssl'}; + $dl{'no-ssl'} = '' if !$force{'no-ssl'}; eval $end if $b_log; } @@ -3128,13 +3135,13 @@ sub check_items { } elsif ($type eq 'recommended display information programs'){ if ($bsd_type){ - @data = qw(eglinfo glxinfo vulkaninfo wayland-info wmctrl xdpyinfo xprop - xdriinfo xrandr); + @data = qw(eglinfo glxinfo vulkaninfo wayland-info wlr-randr wmctrl + xdpyinfo xprop xdriinfo xrandr); $info_os = 'info-bsd'; } else { - @data = qw(eglinfo glxinfo vulkaninfo wayland-info wmctrl xdpyinfo xprop - xdriinfo xrandr); + @data = qw(eglinfo glxinfo vulkaninfo wayland-info wlr-randr wmctrl + xdpyinfo xprop xdriinfo xrandr); } $b_program = 1; $item = 'Program'; @@ -3706,6 +3713,14 @@ sub set_item_data { 'pkgtool' => 'wayland-utils', 'rpm' => 'wayland-utils', }, + 'wlr-randr' => { + 'info' => '-G (Wayland, wlroots based) monitors(s) data', + 'info-bsd' => '-G (Wayland, wlroots based) monitors(s) data', + 'apt' => 'wlr-randr', + 'pacman' => 'wlr-randr', + 'pkgtool' => 'wlr-randr (?)', + 'rpm' => 'wlr-randr', + }, 'wmctrl' => { 'info' => '-S active window manager (fallback)', 'info-bsd' => '-S active window manager (fallback)', @@ -4254,7 +4269,7 @@ sub update_me { update_man($self_download,$download_id); } else { - print "Skipping man download because branch version is being used.\n"; + print "Skipping man download.\n"; } exit 0; } @@ -4448,21 +4463,8 @@ sub get { 'D|disk' => sub { $show{'short'} = 0; $show{'disk'} = 1;}, - 'E|bluetooth' => sub { - $show{'short'} = 0; - $show{'bluetooth'} = 1; - $show{'bluetooth-forced'} = 1;}, - 'edid' => sub { - $b_admin = 1; - $show{'short'} = 0; - $show{'edid'} = 1; - $show{'graphic'} = 1; - $show{'graphic-full'} = 1;}, - 'f|flags|flag' => sub { - $show{'short'} = 0; - $show{'cpu'} = 1; - $show{'cpu-flag'} = 1;}, - 'F|full' => sub { + # Note: to show deprecation warnings will need to create separate F|full item. + 'e|F|expanded|full' => sub { $show{'short'} = 0; $show{'audio'} = 1; $show{'battery'} = 1; @@ -4481,6 +4483,20 @@ sub get { $show{'sensor'} = 1; $show{'swap'} = 1; $show{'system'} = 1;}, + 'E|bluetooth' => sub { + $show{'short'} = 0; + $show{'bluetooth'} = 1; + $show{'bluetooth-forced'} = 1;}, + 'edid' => sub { + $b_admin = 1; + $show{'short'} = 0; + $show{'edid'} = 1; + $show{'graphic'} = 1; + $show{'graphic-full'} = 1;}, + 'f|flags|flag' => sub { + $show{'short'} = 0; + $show{'cpu'} = 1; + $show{'cpu-flag'} = 1;}, 'gpu|nvidia|nv' => sub { main::error_handler('option-removed', '--gpu/--nvidia/--nv','-Ga');}, 'G|graphics|graphic' => sub { @@ -4940,7 +4956,7 @@ sub get { 'debug-width|debug-y:i' => sub { my ($opt,$arg) = @_; $arg ||= 80; - if ($arg =~ /^\d+$/ && ($arg == 1 || $arg >= 80)){ + if ($arg =~ /^\d+$/ && ($arg == 1 || $arg >= 50)){ $debugger{'width'} = $arg; } else { @@ -4949,7 +4965,7 @@ sub get { 'debug-zy|debug-yz:i' => sub { my ($opt,$arg) = @_; $arg ||= 80; - if ($arg =~ /^\d+$/ && ($arg == 1 || $arg >= 80)){ + if ($arg =~ /^\d+$/ && ($arg == 1 || $arg >= 50)){ $debugger{'width'} = $arg; $debugger{'filter'} = 1; } @@ -4957,7 +4973,7 @@ sub get { main::error_handler('bad-arg', $opt, $arg); }}, 'dig' => sub { - $force{'no-dig'} = 0;}, + $force{'dig'} = 0;}, 'display:s' => sub { my ($opt,$arg) = @_; if ($arg =~ /^:?([0-9\.]+)?$/){ @@ -4995,11 +5011,14 @@ sub get { else { main::error_handler('bad-arg', $opt, $arg); }}, + 'egl' => sub { + $force{'egl'} = 1;}, 'fake:s' => sub { my ($opt,$arg) = @_; if ($arg){ my $wl = 'bluetooth|compiler|cpu|dboot|dmidecode|egl|elbrus|glx|'; - $wl .= 'iomem|ip-if|ipmi|logical|lspci|partitions|pciconf|pcictl|pcidump|'; + $wl .= 'iomem|ip-if|ipmi|kscreen|logical|lspci|'; + $wl .= 'partitions|pciconf|pcictl|pcidump|'; $wl .= 'raid-btrfs|raid-hw|raid-lvm|raid-md|raid-soft|raid-zfs|'; $wl .= 'sensors|sensors-sys|swaymsg|sys-mem|sysctl|'; $wl .= 'udevadm|uptime|usbconfig|usbdevs|vmstat|vulkan|wl-info|wlr-randr|'; @@ -5027,10 +5046,11 @@ sub get { 'force:s' => sub { my ($opt,$arg) = @_; if ($arg){ - my $wl = 'bluetoothctl|bt-adapter|btmgmt|colors|cpuinfo|display|dmidecode|'; - $wl .= 'hciconfig|hddtemp|ip|ifconfig|lsusb|man|meminfo|'; - $wl .= 'no-dig|no-doas|no-html-wan|no-sudo|pkg|rfkill|rpm|sensors-sys|'; - $wl .= 'udevadm|usb-sys|vmstat|wayland|wmctrl'; + my $wl = 'bluetoothctl|bt-adapter|btmgmt|colors|cpuinfo|dig|display|dmidecode|'; + $wl .= 'egl|hciconfig|hddtemp|html-wan|ip|ifconfig|kscreen|lsusb|man|meminfo|'; + $wl .= 'no-dig|no-doas|no-egl|no-graphics-api|no-html-wan|no-man|no-opengl|'; + $wl .= 'no-ssl|no-sudo|no-vulkan|pkg|rfkill|rpm|sensors-sys|swaymsg|udevadm|'; + $wl .= 'usb-sys|vmstat|wayland|wl-info|wlr-randr|wmctrl'; for (split(',',$arg)){ if ($_ =~ /\b($wl)\b/){ $force{lc($1)} = 1; @@ -5058,7 +5078,7 @@ sub get { $show{'host'} = 1; $show{'no-host'} = 0;}, 'html-wan' => sub { - $force{'no-html-wan'} = 0;}, + $force{'html-wan'} = 1;}, 'ifconfig' => sub { $force{'ifconfig'} = 1;}, 'indent:i' => sub { @@ -5080,7 +5100,7 @@ sub get { 'irc' => sub { $b_irc = 1;}, 'man' => sub { - $use{'yes-man'} = 1;}, + $force{'man'} = 1;}, 'max-wrap|wrap-max|indent-min:i' => sub { my ($opt,$arg) = @_; if ($arg >= 0){ @@ -5095,19 +5115,27 @@ sub get { $risc{'mips'} = 1;}, 'no-dig' => sub { $force{'no-dig'} = 1;}, + 'no-egl' => sub { + $force{'no-egl'} = 1;}, 'no-doas' => sub { $force{'no-doas'} = 1;}, + 'no-graphics-api' => sub { + $force{'no-graphics-api'} = 1;}, 'no-host|no-hostname' => sub { $show{'host'} = 0; $show{'no-host'} = 1;}, 'no-html-wan' => sub { $force{'no-html-wan'}= 1;}, 'no-man' => sub { - $use{'no-man'} = 0;}, + $force{'no-man'} = 1;}, + 'no-opengl' => sub { + $force{'no-opengl'} = 1;}, 'no-ssl' => sub { - $use{'no-ssl'} = 1;}, + $force{'no-ssl'} = 1;}, 'no-sudo' => sub { $force{'no-sudo'} = 1;}, + 'no-vulkan' => sub { + $force{'no-vulkan'} = 1;}, 'output|export:s' => sub { my ($opt,$arg) = @_; if ($arg =~ /^(json|screen|xml)$/){ @@ -5232,7 +5260,10 @@ sub post_process { if ($use{'downloader'} || $wan_url || ($force{'no-dig'} && $show{'ip'})){ main::set_downloader(); } - $use{'man'} = 0 if (!$use{'yes-man'} || $use{'no-man'}); + # setting some where internal switches test opposite value only + $use{'man'} = 0 if (!$force{'man'} || $force{'no-man'}); + $force{'no-html-wan'} = 0 if $force{'html-man'}; + $force{'no-dig'} = 0 if $force{'dig'}; main::update_me($self_download,$download_id) if $use{'update-trigger'}; main::set_xorg_log() if $show{'graphic'}; set_pledge() if $b_pledge; @@ -5371,9 +5402,9 @@ sub process_updater { $download_id = 'alt server'; $self_download = $arg; } - if ($self_download && $self_name eq 'inxi'){ + if ($self_download && $self_name eq 'inxi' && !$force{'no-man'}){ $use{'man'} = 1; - $use{'yes-man'} = 1; + $force{'man'} = 1; } if (!$self_download){ main::error_handler('bad-arg', $opt, $arg); @@ -5424,25 +5455,27 @@ sub show_options { it will display a short system summary."], ['0', '', '', ''], ['0', '', '', "You can use these options alone or together, - to show or add the item(s) you want to see: A, B, C, d, D, E, f, G, i, I, j, +# to show or add the item(s) you want to see: A, B, C, d, D, E, f, G, i, I, j, J, l, L, m, M, n, N, o, p, P, r, R, s, S, t, u, w, --edid, --mm, --ms, - --slots. If you use them with -v [level], -b or -F, $self_name will add the - requested lines to the output."], + --slots. If you use them with -b, -e, or -v [level], $self_name will add the + requested lines to the report."], ['0', '', '', '' ], ['0', '', '', "Examples:^$self_name^-v4^-c6 OR $self_name^-bDc^6 OR - $self_name^-FzjJxy^80"], + $self_name^-ezjJxy^85"], ['0', '', '', $line ], ['0', '', '', "See Filter Options for output filtering, Output Control Options - for colors, sizing, output changes, Extra Data Options to extend Main output, + for colors, sizing, output changes, Extra Data Options to extend Main report, Additional Options and Advanced Options for less common situations."], ['0', '', '', $line ], ['0', '', '', "Main Feature Options:"], ['1', '-A', '--audio', "Audio/sound devices(s), driver; active sound APIs and servers."], - ['1', '-b', '--basic', "Basic output, short form. Same as $self_name^-v^2."], + ['1', '-b', '--basic', "Basic report: System (-S); basic CPU; Machine (-M); + Battery (-B) (if found); Graphics (-G); Network devices (-N); basic Disk; + Info (-I). Same as $self_name^-v2. See -e for expanded report."], ['1', '-B', '--battery', "System battery info, including charge, condition voltage (if critical), plus extra info (if battery present/detected)."], - ['1', '-C', '--cpu', "CPU output (if each item available): basic topology, + ['1', '-C', '--cpu', "CPU report (if each item available): basic topology, model, type (see man for types), cache, average CPU speed, min/max speeds, per core clock speeds."], ['1', '-d', '--disk-full, --optical', "Optical drive data (and floppy disks, @@ -5450,22 +5483,24 @@ sub show_options { ['1', '-D', '--disk', "Hard Disk info, including total storage and details for each disk. Disk total used percentage includes swap ${partition_string} size(s)."], + ['1', '-e', '--expanded', "(formerly -F/--full) Expands -b basic report. + Includes all Upper Case options (except -J) plus --swap, -s and -n. Does not + show extra verbose options such as -d -f -i -J -l -m -o -p -r -t -u -x, unless + specified."], ['1', '-E', '--bluetooth', "Show bluetooth device data and report, if available. Shows state, address, IDs, version info."], ['1', '', '--edid', "Full graphics data, triggers -a, -G. Add monitor chroma, full modelines (if > 2), EDID errors and warnings, if present."], ['1', '-f', '--flags', "All CPU $flags. Triggers -C. Not shown with -F to avoid spamming."], - ['1', '-F', '--full', "Full output. Includes all Upper Case line letters - (except -J, -W) plus --swap, -s and -n. Does not show extra verbose options - such as -d -f -i -J -l -m -o -p -r -t -u -x, unless specified."], + ['1', '-F', '--full', "Deprecated. See -e/--expanded."], ['1', '-G', '--graphics', "Graphics info (devices(s), drivers, display protocol (if available), display server/Wayland compositor, resolution, X.org: renderer, basic EGL, OpenGL, Vulkan API data; Xvesa API: VBE info."], ['1', '-i', '--ip', "WAN IP address and local interfaces (requires ifconfig or ip network tool). Triggers -n. Not shown with -F for user security reasons. You shouldn't paste your local/WAN IP."], - ['1', '', '--ip-limit, --limit', "[-1; 1-x] Set max output limit of IP + ['1', '', '--ip-limit, --limit', "[-1; 1-x] Set max report limit of IP addresses for -i (default 10; -1 removes limit)."], ['1', '-I', '--info', "General info, including processes, uptime, memory (if -m/-tm not used), IRC client or shell type, $self_name version."], @@ -5499,7 +5534,7 @@ sub show_options { all other detected ${partition_string}s)."], ['1', '', '--partitions-sort, --ps', " [dev-base|fs|id|label|percent-used|size|uuid|used] Change sort order of - ${partition_string} output. See man page for specifics."], + ${partition_string} report. See man page for specifics."], ['1', '-P', '--partitions', "Basic $partition_string info. Shows, if detected: / /boot /home /opt /tmp /usr /usr/home /var /var/log /var/tmp. Swap ${partition_string}s show if --swap is not used. Use -p to see all @@ -5511,7 +5546,7 @@ sub show_options { ['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."], - ['1', '-s', '--sensors', "Sensors output (if sensors installed/configured): + ['1', '-s', '--sensors', "Sensors report (if sensors installed/configured): mobo/CPU/GPU temp; detected fan speeds. Nvidia shows screen number for > 1 screen. IPMI sensors if present."], ['1', '', '--slots', "PCI slots: type, speed, status. Requires root."], @@ -5524,28 +5559,25 @@ sub show_options { numbers (e.g.^-t^cm10)."], ['1', '-u', '--uuid', "$partition_string_u, system board UUIDs. Use with -j, -M, -o, -p, -P."], - ['1', '-v', '--verbosity', "Set $self_name verbosity level (0-8). - Should not be used with -b or -F. Example: $self_name^-v^4"], - ['2', '0', '', "Same as: $self_name"], - ['2', '1', '', "Basic verbose, -S + basic CPU + -G + basic Disk + -I."], - ['2', '2', '', "Networking device (-N), Machine (-M), Battery (-B; if - present), and, if present, basic RAID (devices only; notes if inactive). Same - as $self_name^-b"], - ['2', '3', '', "Advanced CPU (-C), battery (-B), network (-n); - triggers -x. "], - ['2', '4', '', "$partition_string_u size/used data (-P) for - (if present) /, /home, /var/, /boot. Shows full disk data (-D). "], - ['2', '5', '', "Audio device (-A), sensors (-s), memory/RAM (-m), - bluetooth (if present), $partition_string label^(-l), full swap (-j), - UUID^(-u), short form of optical drives, RAID data (if present)."], - ['2', '6', '', "Full $partition_string (-p), - unmounted $partition_string (-o), optical drive (-d), USB (-J), - full RAID; triggers -xx."], - ['2', '7', '', "Network IP data (-i), bluetooth, logical (-L), - RAID forced, full CPU $flags; triggers -xxx."], - ['2', '8', '', "Everything available, including advanced gpu EDID (--edid) - data, repos (-r), processes (-tcm), PCI slots (--slots); triggers - admin (-a)."], + ['1', '-v', '--verbosity', "Set $self_name report verbosity level (0-8). + Should not be used with -b or -e. Example: $self_name^-v^4"], + ['2', '0', '', "Simple report. Same as: $self_name"], + ['2', '1', '', "Basic report: System (-S); basic CPU; Graphics (-G); basic + Disk; Info (-I)."], + ['2', '2', '', "Adds: Machine (-M); Battery (-B) (if present); Networking + devices (-N). Same as $self_name^-b."], + ['2', '3', '', "Adds: Full CPU (-C); advanced network (-n); triggers -x."], + ['2', '4', '', "Adds: full disk data (-D); $partition_string_u size/used data + (-P) for (if present) /, /home, /var/, /boot."], + ['2', '5', '', "Adds: memory/RAM (-m); Audio (-A); bluetooth (-E) (if present); + RAID (-R) (if present); $partition_string label^(-l) and UUID^(-u); full swap + (-j); sensors (-s)."], + ['2', '6', '', "Adds: optical drives (-d); full $partition_string (-p); + unmounted $partition_string (-o); USB (-J); triggers -xx."], + ['2', '7', '', "Adds: full CPU $flags (-f); logical devices (-L); Network IP + (-i); forces Battery (-B), Bluetooth (-E), RAID (-R); triggers -xxx."], + ['2', '8', '', "Adds: PCI slots (--slots); GPU EDID (--edid); Repos (-r); + Processes (-tcm); triggers -a. -v8 is all the system info available."], ); # if distro maintainers don't want the weather feature disable it if ($use{'weather'}){ @@ -5569,7 +5601,7 @@ sub show_options { [0, '', '', "$line"], ['0', '', '', "Filter Options:"], ['1', '', '--host', "Turn on hostname for -S. Overrides -z."], - ['1', '', '--no-host', "Turn off hostname for -S. Useful if showing output + ['1', '', '--no-host', "Turn off hostname for -S. Useful if showing report from servers etc. Activated by -z as well."], ['1', '-z', '--filter', "Adds security filters for IP/MAC addresses, serial numbers, location (-w), user home directory name, host name. Default on for @@ -5676,10 +5708,10 @@ sub show_options { ['2', '-w', '', "Wind speed and direction, humidity, pressure, and time zone, if available."]); } - push(@$rows, + push(@$rows, ['0', '', '', ''], ['1', '-xx', '--extra 2', "Show extra, extra data (only works with verbose - or line output, not short form):"], + or line item reports, not short form):"], ['2', '-A', '', "Chip vendor:product ID for each audio device; PCIe speed, lanes (if found); USB rev, speed, lanes (if found); sound server/api helper daemons/plugins."], @@ -5694,7 +5726,7 @@ sub show_options { found); Xorg: Xorg compositor; alternate Xorg drivers (if available. Alternate means driver is on automatic driver check list of Xorg for the device vendor, but is not installed on system); Xorg Screen data: ID, s-res, dpi; Monitors: - ID, position (if > 1), resolution, dpi, model, diagonal; APIs: EGL: per + ID, position (if > 1), resolution, hz, dpi, model, diagonal; APIs: EGL: per platform report; OpenGL: ES version, device-ID, display-ID (if not found in Display line); Vulkan: per device report."], ['2', '-I', '', "Adds Power: with children uptime, wakeups (from suspend); @@ -5729,10 +5761,10 @@ sub show_options { cover, wind chill, dew point, heat index, if available."] ); } - push(@$rows, + push(@$rows, ['0', '', '', ''], ['1', '-xxx', '--extra 3', "Show extra, extra, extra data (only works - with verbose or line output, not short form):"], + with verbose or line reports, not short form):"], ['2', '-A', '', "Serial number, class ID."], ['2', '-B', '', "Chemistry, cycles, location (if available)."], ['2', '-C', '', "CPU voltage, external clock speed (if root and dmidecode @@ -5742,7 +5774,8 @@ sub show_options { ['2', '-E', '', "Serial number, class ID, bluetooth device class ID, HCI version and revision."], ['2', '-G', '', "Device serial number, class ID; Xorg Screen size, diag; - Monitors: hz, size, modes, serial, scale, modes (max/min); APIs: EGL: hardware + Monitors: resolution details (mode, hz, scale, scaled to if scale != 1), + size, modes, serial, scale, modes (max/min); APIs: EGL: hardware driver info; Vulkan: layer count, device hardware vendor."], ['2', '-I', '', "For Power:, adds states, suspend/hibernate active type; For 'Shell:' adds ([doas|su|sudo|login]) to shell name if present; adds @@ -5769,10 +5802,10 @@ sub show_options { altitude, sunrise/sunset, if available."] ); } - push(@$rows, + push(@$rows, ['0', '', '', ''], ['1', '-a', '--admin', "Adds advanced sys admin data (only works with - verbose or line output, not short form); check man page for explanations!; + verbose or line reports, 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); PCIe lanes-max: gen, speed, lanes (if relevant); USB mode (if @@ -5793,7 +5826,8 @@ sub show_options { relevant); USB mode (if found); list of alternate kernel modules/drivers for device(s) (if available); Monitor built year, gamma, screen ratio (if available); APIs: OpenGL: device memory, unified memory status; Vulkan: adds - full device report, device name, driver version, surfaces."], + full device report, device name, driver version, surfaces; Info: Tools: added, + shows installed tools from types: api, de, gpu, wl, x11."], ['2', '-I', '', "Adds to Power suspend/hibernate available non active states, hibernate image size, suspend failed totals (if not 0), active power services; Packages total number of lib files found for each package manager and pm tools @@ -5846,7 +5880,7 @@ sub show_options { ^$self_name^-U^https://myserver.com/inxi"], ); } - push(@$rows, + push(@$rows, ['1', '', '--version, --vf', "Prints full $self_name version info then exits."], ['1', '', '--version-short,--vs', "Prints 1 line $self_name version info. Can be used with other line options."], @@ -5865,14 +5899,19 @@ sub show_options { ['1', '', '--display', "[:[0-9]] Try to get display data out of X (default: display 0)."], ['1', '', '--dmidecode', "Force use of dmidecode data instead of /sys where - relevant - (e.g. -M, -B)."], + relevant (e.g. -M, -B)."], ['1', '', '--downloader', "Force $self_name to use [curl fetch perl wget] for downloads."], - ['1', '', '--force', "[bt-adapter btmgmt dmidecode hciconfig hddtemp ip - ifconfig lsusb meminfo rfkill usb-sys vmstat wmctrl]. + ['1', '', '--egl', "Force use of EGL graphics API even if blocked internally."], + ['1', '', '--force', "[bluetoothctl bt-adapter btmgmt colors cpuinfo display + dmidecode hciconfig hddtemp html-wan ifconfig ip kscreen lsusb man meminfo + no-dig no-doas no-egl no-graphics-api no-html-wan no-man no-opengl no-ssl + no-sudo no-vulkan pkg rfkill rpm sensors-sys swaymsg udevadm usb-sys vmstat + wayland wl-info wlr-randr wmctrl]. 1 or more in comma separated list. Force use of item(s). - See --hddtemp, --dmidecode, --wm, --usb-tool, --usb-sys."], + See --bt-tool, --hddtemp,--html-wan, --dmidecode, --no-dig, --no-doas, + --no-egl, --no-graphics-api, --no-html-wan, --no-man, --no-opengl, --no-ssl, + --no-sudo, --no-vulkan, --wm, --usb-tool, --usb-sys."], ['1', '', '--hddtemp', "Force use of hddtemp for disk temps."], ['1', '', '--html-wan', "Overrides configuration item NO_HTML_WAN (resets to default)."], @@ -5884,10 +5923,12 @@ sub show_options { pinxi using -U."], ); } - push(@$rows, + push(@$rows, ['1', '', '--no-dig', "Skip dig for WAN IP checks, use downloader program."], ['1', '', '--no-doas', "Skip internal program use of doas features (not related to starting $self_name with doas)."], + ['1', '', '--no-egl', "Skip EGL API data for graphics."], + ['1', '', '--no-graphics-api', "Skip all API data for graphics."], ['1', '', '--no-html-wan', "Skip HTML IP sources for WAN IP checks, use dig only, or nothing if --no-dig."], ); @@ -5896,20 +5937,22 @@ sub show_options { ['1', '', '--no-man', "Disable man install for all -U update actions."], ); } - push(@$rows, + push(@$rows, + ['1', '', '--no-opengl', "Skip OpenGL API data for graphics."], ['1', '', '--no-ssl', "Skip SSL certificate checks for all downloader actions (Wget/Fetch/Curl/Perl-HTTP::Tiny)."], ['1', '', '--no-sudo', "Skip internal program use of sudo features (not related to starting $self_name with sudo)."], + ['1', '', '--no-vulkan', "Skip Vulkan API data for graphics."], ['1', '', '--rpm', "Force use of disabled package manager counts for packages 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 - supplied sensor array[s] for -s output (lm-sensors, /sys. Linux only)."], + supplied sensor array[s] for -s report (lm-sensors, /sys. Linux only)."], ['1', '', '--sensors-use', "[sensor[s] name, comma separated] Use only - supplied sensor array[s] for -s output (lm-sensors, /sys. Linux only)."], + supplied sensor array[s] for -s report (lm-sensors, /sys. Linux only)."], ['1', '', '--sleep', "[0-x.x] Change CPU sleep time, in seconds, for -C (default:^$cpu_sleep). Allows system to catch up and show a more accurate CPU use. Example:^$self_name^-Cxxx^--sleep^0.15"], @@ -5924,7 +5967,7 @@ sub show_options { ['1', '', '--usb-tool', "Force USB data to use lsusb as data source [default] (Linux only)."], ['1', '', '--wan-ip-url', "[URL] Skips dig, uses supplied URL for WAN IP (-i). - URL output must end in the IP address. See man. + URL HTML must end in the IP address. See man. Example:^$self_name^-i^--wan-ip-url^https://yoursite.com/remote-ip"], ['1', '', '--wm', "Force wm: to use wmctrl as data source. Default uses ps."], ['0', '', '', $line ], @@ -5937,10 +5980,10 @@ sub show_options { ['2', '10', '', "Basic logging."], ['2', '11', '', "Full file/system info logging."], ['1', '', ,'', "The following create a tar.gz file of system data, plus - $self_name output. To automatically upload debugger data tar.gz file to + $self_name report. To automatically upload debugger data tar.gz file to ftp.smxi.org: $self_name^--debug^21"], ['2', '20', '', "Full system data collection: /sys; xorg conf and log data, - xrandr, xprop, xdpyinfo, glxinfo etc.; data from dev, disks, + display tool data, etc.; data from dev, disks, ${partition_string}s, etc."], ['2', '21', '', "Upload debugger dataset to $self_name debugger server automatically, removes debugger data directory, leaves tar.gz debugger file."], @@ -6200,11 +6243,13 @@ sub get_client_version { } # NOTE: these must be empirically determined, not all events that # show no tty are actually IRC. tmux is not a vt, but runs inside one + # kate/dolphin etc have embedded terminals if (!$client{'name-print'}){ - my $wl_terms = 'alacritty|altyo|\bate\b|black-screen|conhost|doas|evilvte|'; - $wl_terms .= 'foot|germinal|guake|havoc|hyper|kate|kgx|kitty|kmscon|konsole|'; - $wl_terms .= 'login|macwise|minicom|putty|rxvt|sakura|securecrt|'; - $wl_terms .= 'shellinabox|^st$|sudo|term|tilda|tilix|tmux|tym|wayst|xiki|'; + my $wl_terms = '(alacri|ghos|ki|min|pu)tty|altyo|\bate\b|black-screen|'; + $wl_terms .= 'conemu|conhost|contour|doas|dolphin|evilvte|foot|'; + $wl_terms .= 'germinal|guake|havoc|hyper|kate|kgx|kmscon|konsole|'; + $wl_terms .= 'login|macwise|minicom|phyxis|\brio\b|rxvt|sakura|securecrt|'; + $wl_terms .= 'shellinabox|^st$|sudo|term|tilda|tilix|tmux|tym|warp|wayst|xiki|'; $wl_terms .= 'yaft|yakuake|\bzoc\b'; my $wl_clients = 'ansible|chef|run-parts|slurm|sshd'; my $whitelist = "$wl_terms|$wl_clients"; @@ -6487,7 +6532,8 @@ sub clean_regex { sub clean_unset { my ($string,$extra) = @_; my $cleaner = '^(\.)+$|Bad Index|default string|\[?empty\]?|\bnone\b|N\/A|^not |'; - $cleaner .= 'not set|OUT OF SPEC|To be filled|O\.?E\.?M|undefine|unknow|unspecif'; + $cleaner .= 'not set|\bnull\b|OUT OF SPEC|To be filled|O\.?E\.?M|'; + $cleaner .= 'undefine|unknow|unspecif'; $cleaner .= '|' . $extra if $extra; $string =~ s/.*($cleaner).*//i; return $string; @@ -6681,6 +6727,8 @@ sub message { 'file-unreadable' => 'File not readable (permissions?)', 'gfx-api' => 'No display API data available.', 'gfx-api-console' => 'No API data available in console. Headless machine?', + 'gfx-api-unsafe' => "Unreliable API tool+hardware. Override with --$id.", + 'gfx-tools' => 'No graphics tools found.', 'glx-console-root' => 'GL data unavailable in console for root.', 'glx-console-try' => 'GL data unavailable in console. Try -G --display', 'glx-display-root' => 'GL data unavailable for root.', @@ -14247,7 +14295,7 @@ sub set_disk_vendors { ['^ANACOMDA','^ANACOMDA','ANACOMDA',''], ['^Android','^Android','Android',''], ['^ANK','^Anker','Anker',''], - ['^Ant[\s_-]?Esports','^Ant[\s_-]?Esports','Ant Esports',''], + ['^(Ant[\s_-]?Esports|\d+\sNEO)','^Ant[\s_-]?Esports','Ant Esports',''], ['^Anucell','^Anucell','Anucell',''], ['^Aoluska','^Aoluska','Aoluska',''], ['^(Aotec|AOK)','^Aotec','Aotec',''], @@ -14516,7 +14564,7 @@ sub set_disk_vendors { ['^(KLEVV|NEO\sN|CRAS)','^KLEVV','KLEVV',''], ['^(KNUP|KP\b)','^KNUP','KNUP',''], ['^(Kodak|Memory\s?Saver)','^Kodak','Kodak',''], - ['^(KOOTION)','^KOOTION','KOOTION',''], + ['^(KOOTION|X12)','^KOOTION','KOOTION',''], ['^(KUAIKAI|MSAM)','^KUAIKAI','KuaKai',''], ['(KUIJIA|DAHUA)','^KUIJIA','KUIJIA',''], ['^KUNUP','^KUNUP','KUNUP',''], @@ -14707,6 +14755,7 @@ sub set_disk_vendors { ['^Sundisk','^Sundisk','Sundisk',''], ['^SUNEAST','^SUNEAST','SunEast',''], ['^Suntrsi','^Suntrsi','Suntrsi',''], + ['^(Sunwind|SW)','^Sunwind','Sunwind',''], ['^SuperMicro','^SuperMicro','SuperMicro',''], ['^Supersonic','^Supersonic','Supersonic',''], ['^SuperSSpeed','^SuperSSpeed','SuperSSpeed',''], @@ -15069,7 +15118,7 @@ sub drive_speed { ## GraphicItem ## { package GraphicItem; -my ($b_primary,$b_wayland_data,%graphics,%mesa_drivers, +my ($b_primary,$b_wayland_data,%gfx_ids,%graphics,%mesa_drivers, $monitor_ids,$monitor_map); my ($gpu_amd,$gpu_intel,$gpu_loongson,$gpu_nv); @@ -15107,7 +15156,8 @@ sub get { # note: not perfect, but we need usb gfx to show for all types, soc, pci, etc usb_output($rows); display_output($rows); - display_api($rows); + display_api($rows) if !$force{'no-graphics-api'}; + info_output($rows); (%graphics,$monitor_ids,$monitor_map) = (); eval $end if $b_log; return $rows; @@ -15146,6 +15196,8 @@ sub device_output { my $item = main::get_pci_vendor($row->[4],$row->[12]); $rows->[$j]{main::key($num++,0,2,'vendor')} = $item if $item; } + # used to detect bad gpu generations for APIs + push(@{$gfx_ids{$row->[5]}},$row->[6]) if $row->[5] && $row->[6]; push(@{$graphics{'gpu-drivers'}},$row->[9]) if $row->[9]; my $driver = ($row->[9]) ? $row->[9]:'N/A'; $rows->[$j]{main::key($num++,1,2,'driver')} = $driver; @@ -15331,7 +15383,7 @@ sub port_output { } ## DISPLAY OUTPUT ## -sub display_output(){ +sub display_output { eval $start if $b_log; my $rows = $_[0]; my ($num,$j) = (0,scalar @$rows); @@ -15660,7 +15712,26 @@ sub monitors_output_full { $resolution = $monitors->{$key}{'res-x'} . 'x' . $monitors->{$key}{'res-y'}; } $resolution ||= 'N/A'; - $rows->[$$j]{main::key($$num++,0,$m2,'res')} = $resolution; + # if we have scaling-calc we have res-x,y and log-x,y + if ($extra > 2 && $monitors->{$key}{'scale-used'}){ + $rows->[$$j]{main::key($$num++,1,$m2,'res')} = ''; + $rows->[$$j]{main::key($$num++,0,$m2+1,'mode')} = $resolution; + if ($monitors->{$key}{'hz'}){ + $rows->[$$j]{main::key($$num++,0,$m2+1,'hz')} = $monitors->{$key}{'hz'}; + } + my $scale = $monitors->{$key}{'scale-percent'} . '% (' . $monitors->{$key}{'scale-used'}. ')'; + $rows->[$$j]{main::key($$num++,1,$m2+1,'scale')} = $scale; + if ($monitors->{$key}{'scale-used'} != 1){ + my $scaled = $monitors->{$key}{'log-x'} . 'x' . $monitors->{$key}{'log-y'}; + $rows->[$$j]{main::key($$num++,0,$m2+2,'to')} = $scaled; + } + } + else { + $rows->[$$j]{main::key($$num++,1,$m2,'res')} = $resolution; + if ($monitors->{$key}{'hz'}){ + $rows->[$$j]{main::key($$num++,0,$m2,'hz')} = $monitors->{$key}{'hz'}; + } + } } else { if ($b_display){ @@ -15672,9 +15743,6 @@ sub monitors_output_full { $b_no_size = 1; $rows->[$$j]{main::key($$num++,0,$m2,'size-res')} = $resolution; } - if ($extra > 2 && $monitors->{$key}{'hz'}){ - $rows->[$$j]{main::key($$num++,0,$m2,'hz')} = $monitors->{$key}{'hz'}; - } if ($monitors->{$key}{'dpi'}){ $rows->[$$j]{main::key($$num++,0,$m2,'dpi')} = $monitors->{$key}{'dpi'}; } @@ -15696,9 +15764,6 @@ sub monitors_output_full { $rows->[$$j]{main::key($$num++,0,$m4,'x')} = $monitors->{$key}{'colors'}{'white_x'}; $rows->[$$j]{main::key($$num++,0,$m4,'y')} = $monitors->{$key}{'colors'}{'white_y'}; } - if ($extra > 2 && $monitors->{$key}{'scale'}){ - $rows->[$$j]{main::key($$num++,0,$m2,'scale')} = $monitors->{$key}{'scale'}; - } if ($extra > 2 && $monitors->{$key}{'size-x'} && $monitors->{$key}{'size-y'}){ my $size = $monitors->{$key}{'size-x'} . 'x' . $monitors->{$key}{'size-y'} . 'mm ('. $monitors->{$key}{'size-x-i'} . 'x' . $monitors->{$key}{'size-y-i'} . '")'; @@ -15775,11 +15840,19 @@ sub display_api { } my ($b_egl,$b_egl_print,$b_glx,$b_glx_print,$b_vulkan,$api,$program,$type); my $gl = {}; - if ($fake{'egl'} || ($program = main::check_program('eglinfo'))){ - gl_data('egl',$program,$rows,$gl); + if (!$force{'no-egl'} && + ($fake{'egl'} || ($program = main::check_program('eglinfo')))){ + if (!$fake{'glx'} && !$force{'egl'} && $bits_sys && $bits_sys == 32 && + unsafe_api_device('egl')){ + $gl->{'egl'}{'unsafe'} = 1; + } + else { + gl_data('egl',$program,$rows,$gl); + } $b_egl = 1; } - if ($fake{'glx'} || ($program = main::check_program('glxinfo'))){ + if (!$force{'no-opengl'} && + ($fake{'glx'} || ($program = main::check_program('glxinfo')))){ gl_data('glx',$program,$rows,$gl) if $b_display; $b_glx = 1; } @@ -15802,8 +15875,9 @@ sub display_api { $b_glx_print = 1; } # if ($fake{'vulkan'} || ($program = main::check_program('vulkaninfo'))){ - if (($fake{'vulkan'} || ($program = main::check_program('vulkaninfo'))) && - ($show{'graphic-full'} || (!$b_egl_print && !$b_glx_print))){ + if (!$force{'no-vulkan'} && + (($fake{'vulkan'} || ($program = main::check_program('vulkaninfo'))) && + ($show{'graphic-full'} || (!$b_egl_print && !$b_glx_print)))){ vulkan_output($program,$rows); $b_vulkan = 1; } @@ -15811,40 +15885,42 @@ sub display_api { # remember, sudo/root usually has empty $DISPLAY as well if ($b_display){ # first do positive tests, won't be set for sudo/root - if (!$b_glx && $graphics{'protocol'} eq 'x11'){ + if (!$force{'no-opengl'} && !$b_glx && $graphics{'protocol'} eq 'x11'){ $api = 'OpenGL'; $type = 'glx-missing'; } - elsif (!$b_egl && $graphics{'protocol'} eq 'wayland'){ + elsif (!$force{'no-egl'} && !$b_egl && $graphics{'protocol'} eq 'wayland'){ $api = 'EGL'; # /GBM $type = 'egl-missing'; } - elsif (!$b_glx && + elsif (!$force{'no-opengl'} && !$b_glx && (main::check_program('X') || main::check_program('Xorg'))){ $api = 'OpenGL'; $type = 'glx-missing'; } - elsif (!$b_egl && main::check_program('Xwayland')){ + elsif (!$force{'no-egl'} && !$b_egl && main::check_program('Xwayland')){ $api = 'EGL'; $type = 'egl-missing'; } - elsif (!$b_egl && !$b_glx && !$b_vulkan) { + elsif (!$force{'no-egl'} && !$force{'no-opengl'} && + !$force{'no-vulkan'} && !$b_egl && !$b_glx && !$b_vulkan) { $api = 'N/A'; $type = 'gfx-api'; } } else { - if (!$b_glx && + if (!$force{'no-opengl'} && !$b_glx && (main::check_program('X') || main::check_program('Xorg'))){ $api = 'OpenGL'; $type = 'glx-missing-console'; } - elsif (!$b_egl && main::check_program('Xwayland')){ + elsif (!$force{'no-egl'} && !$b_egl && main::check_program('Xwayland')){ $api = 'EGL'; $type = 'egl-missing-console'; } # we don't know what it is, headless system, non xwayland wayland - elsif (!$b_egl && !$b_glx && !$b_vulkan) { + elsif (!$force{'no-egl'} && !$force{'no-opengl'} && + !$force{'no-vulkan'} && !$b_egl && !$b_glx && !$b_vulkan) { $api = 'N/A'; $type = 'gfx-api-console'; } @@ -15856,22 +15932,49 @@ sub display_api { sub no_data_output { eval $start if $b_log; - my ($api,$type,$rows) = @_; + my ($api,$type,$rows,$extra) = @_; my $num = 0; push(@$rows, { main::key($num++,1,1,'API') => $api, - main::key($num++,0,2,'Message') => main::message($type) + main::key($num++,0,2,'Message') => main::message($type,$extra) }); eval $end if $b_log; } +sub unsafe_api_device { + eval $start if $b_log; + my $api = $_[0]; + my %test = ( + 'egl' => { + '8086' => '1132|3577|7120|7121|7122|7123|7124|7125|7126|7128|712a|7800|' . + '2562|2572|2582|3577|3582|358e', + # '1002' => '68f9', + }, + ); + return if !$test{$api}; + foreach my $vendor (keys %{$test{$api}}){ + next if !$gfx_ids{$vendor}; + foreach my $id (@{$gfx_ids{$vendor}}){ + return 1 if $id =~ /^($test{$api}->{$vendor})$/; + } + } + eval $end if $b_log; +} + sub egl_output { eval $start if $b_log; my ($rows,$gl) = @_; - if (!$gl->{'egl'}){ + if (!$gl->{'egl'} || $gl->{'egl'}{'unsafe'}){ my $api = 'EGL'; - my $type = 'egl-null'; - no_data_output($api,$type,$rows); + my ($extra,$type); + if (!$gl->{'egl'}){ + $type = 'egl-null'; + } + else { + $type = 'gfx-api-unsafe'; + $extra = 'egl'; + } + no_data_output($api,$type,$rows,$extra); return 0; } my ($i,$j,$num) = (0,scalar @$rows,0); @@ -16162,7 +16265,27 @@ sub xvesa_output { eval $end if $b_log; } -# API Data # +## INFO OUTPUT ## +sub info_output { + eval $start if $b_log; + my $rows = $_[0]; + my ($num,$j) = (0,scalar @$rows); + my ($list,$space,$tools) = ('','',{}); + tools_data($tools); + $list = main::message('gfx-tools') if !%$tools; + $rows->[$j]{main::key($num++,1,1,'Info')} = ''; + $rows->[$j]{main::key($num++,1,2,'Tools')} = $list; + foreach my $key (sort keys %$tools){ + $space = (scalar @{$tools->{$key}} > 2) ? ' ' : ''; + $list = join(','. $space, @{$tools->{$key}}); + $rows->[$j]{main::key($num++,0,3,$key)} = $list; + } + eval $end if $b_log; +} + +## DATA ################## + +## API Data ## sub gl_data { eval $start if $b_log; my ($source,$program,$rows,$gl) = @_; @@ -16856,7 +16979,56 @@ sub vulkan_data { eval $end if $b_log; } -## DISPLAY DATA WAYLAND ## +## DISPLAY DATA ## +sub display_protocol { + eval $start if $b_log; + $graphics{'protocol'} = ''; + if ($ENV{'XDG_SESSION_TYPE'}){ + $graphics{'protocol'} = $ENV{'XDG_SESSION_TYPE'}; + } + if (!$graphics{'protocol'} && $ENV{'WAYLAND_DISPLAY'}){ + $graphics{'protocol'} = $ENV{'WAYLAND_DISPLAY'}; + } + # can show as wayland-0 + if ($graphics{'protocol'} && $graphics{'protocol'} =~ /wayland/i){ + $graphics{'protocol'} = 'wayland'; + } + # yes, I've seen this in 2019 distros, sigh + elsif ($graphics{'protocol'} eq 'tty'){ + $graphics{'protocol'} = ''; + } + # If no other source, get user session id, then grab session type. + # loginctl also results in the session id + # undef $graphics{'protocol'}; + if (!$graphics{'protocol'}){ + if (my $program = main::check_program('loginctl')){ + my $id = ''; + # $id = $ENV{'XDG_SESSION_ID'}; # returns tty session in console + my @data = main::grabber("$program --no-pager --no-legend 2>/dev/null",'','strip'); + foreach (@data){ + # some systems show empty or ??? for TTY field, but whoami should do ok + next if /(ttyv?\d|pts\/)/; # freebsd: ttyv3 + # in display, root doesn't show in the logins + next if $client{'whoami'} && $client{'whoami'} ne 'root' && !/\b$client{'whoami'}\b/; + $id = (split(/\s+/, $_))[0]; + # multiuser? too bad, we'll go for the first one that isn't a tty/pts + last; + } + if ($id){ + my $temp = (main::grabber("$program show-session $id -p Type --no-pager --no-legend 2>/dev/null"))[0]; + $temp =~ s/Type=// if $temp; + # ssh will not show /dev/ttyx so would have passed the first test + $graphics{'protocol'} = $temp if $temp && $temp ne 'tty'; + } + } + } + $graphics{'protocol'} = lc($graphics{'protocol'}) if $graphics{'protocol'}; + eval $end if $b_log; +} + +## DISPLAY DATA: WAYLAND ## +# NOTE: have added gnome-randr and kscreen-console/kscreen-doctor to debugger +# but need many samples before using those as data sources if below are absent. sub display_data_wayland { eval $start if $b_log; my ($b_skip_pos,$program); @@ -16865,17 +17037,24 @@ sub display_data_wayland { # return as wayland-0 or 0? $graphics{'display-id'} =~ s/wayland-?//i; } - if ($fake{'swaymsg'} || ($program = main::check_program('swaymsg'))){ + if (!$force{'kscreen'} && !$force{'wl-info'} && !$force{'wlr-randr'} && + ($fake{'swaymsg'} || ($program = main::check_program('swaymsg')))){ swaymsg_data($program); } # until we get data proving otherwise, assuming these have same output - elsif ($fake{'wl-info'} || (($program = main::check_program('wayland-info')) || - ($program = main::check_program('weston-info')))){ + elsif (!$force{'kscreen'} && !$force{'wlr-randr'} && ($fake{'wl-info'} || + (($program = main::check_program('wayland-info')) || + ($program = main::check_program('weston-info'))))){ wlinfo_data($program); } - elsif ($fake{'wlr-randr'} || ($program = main::check_program('wlr-randr'))){ + elsif (!$force{'kscreen'} && ($fake{'wlr-randr'} || + ($program = main::check_program('wlr-randr')))){ wlrrandr_data($program); } + elsif (($fake{'kscreen'} || + ($program = main::check_program('kscreen-console')))){ + kscreen_data($program); + } # make sure we got enough for advanced position data, might be from /sys if ($extra > 1 && $monitor_ids){ $b_skip_pos = check_wayland_data(); @@ -16972,7 +17151,31 @@ sub wayland_data_advanced { eval $end if $b_log; } -## WAYLAND COMPOSITOR DATA TOOLS ## +# WAYLAND TOOLS DATA # +# Note: not used yet because it's hard to know what is controlling the desktop +sub kscreen_data { + eval $start if $b_log; + my ($program) = @_; + my ($data,%mon,@temp,$ref); + my ($b_iwlo,$b_izxdg,$file,$hz,$id,$pos_x,$pos_y,$res_x,$res_y,$scale); + if (!$fake{'kscreen'}){ + $data = main::grabber("$program outputs 2>/dev/null",'','strip','ref'); + } + else { + undef $monitor_ids; + $file = "$fake_data_dir/graphics/wayland/kscreen-console-laptop-1-monitor-1.txt"; + $data = main::reader($file,'strip','ref'); + } + print 'kscreen-console raw: ', Data::Dumper::Dumper $data if $dbg[46]; + main::log_data('dump','@$data', $data) if $b_log; + foreach (@$data){ + + } + print '%mon: ', Data::Dumper::Dumper \%mon if $dbg[46]; + main::log_data('dump','%mon', \%mon) if $b_log; + print 'kscreen-console: monitor_ids: ', Data::Dumper::Dumper $monitor_ids if $dbg[46]; + eval $end if $b_log; +} # NOTE: These patterns are VERY fragile, and depend on no changes at all to # the data structure, and more important, the order. Something I would put # almost no money on being able to count on. @@ -16982,26 +17185,34 @@ sub wlinfo_data { my ($data,%mon,@temp,$ref); my ($b_iwlo,$b_izxdg,$file,$hz,$id,$pos_x,$pos_y,$res_x,$res_y,$scale); if (!$fake{'wl-info'}){ - undef $monitor_ids; $data = main::grabber("$program 2>/dev/null",'','strip','ref'); } else { - $file = "$fake_data_dir/graphics/wayland/weston-info-2-mon-1.txt"; - $file = "$fake_data_dir/graphics/wayland/wayland-info-weston-vm-sparky.txt"; + undef $monitor_ids; + # $file = "$fake_data_dir/graphics/wayland/weston-info-2-mon-1.txt"; + # $file = "$fake_data_dir/graphics/wayland/wayland-info-weston-vm-sparky.txt"; + $file = "$fake_data_dir/graphics/wayland/wayland-info-3-monitors-1.txt"; + # $file = "$fake_data_dir/graphics/wayland/wayland-info-1-monitor-laptop-1.txt"; $data = main::reader($file,'strip','ref'); } print 'wayland/weston-info raw: ', Data::Dumper::Dumper $data if $dbg[46]; main::log_data('dump','@$data', $data) if $b_log; foreach (@$data){ # print 'l: ', $_,"\n"; - if (/^interface: 'wl_output', version: \d+, name: (\d+)$/){ + if (/^interface:\s+'wl_output',\s+version:\s+\d+,\s+name:\s+(\d+)$/){ $b_iwlo = 1; + $b_izxdg = 0; $id = $1; } elsif (/^interface: 'zxdg_output/){ $b_izxdg = 1; $b_iwlo = 0; } + elsif (/^interface: '(?!(wl_output|zxdg_output))'/){ + $b_izxdg = 0; + $b_iwlo = 0; + } + next if !$b_izxdg && !$b_iwlo; if ($b_iwlo){ if (/^x: (\d+), y: (\d+), scale: ([\d\.]+)/){ $mon{$id}->{'pos-x'} = $1; @@ -17030,6 +17241,7 @@ sub wlinfo_data { $mon{$id}->{'model'} = main::clean_dmi($mon{$id}->{'model'}); } } + # this is physical px width/height, not scaled, though may be same elsif (/^width: (\d+) px, height: (\d+) px, refresh: ([\d\.]+) Hz,/){ $mon{$id}->{'res-x'} = $1; $mon{$id}->{'res-y'} = $2; @@ -17054,9 +17266,6 @@ sub wlinfo_data { $mon{$id}->{'log-y'} = $2; } } - if ($b_izxdg && /^interface: '(?!zxdg_output)/){ - last; - } } # now we need to map %mon back to $monitor_ids if (%mon){ @@ -17065,6 +17274,7 @@ sub wlinfo_data { next if !$mon{$key}->{'monitor'}; # no way to know what it is, sorry $id = $mon{$key}->{'monitor'}; $monitor_ids->{$id}{'monitor'} = $id; + $monitor_ids->{$id}{'connector-id'} = $key; $monitor_ids->{$id}{'log-x'} = $mon{$key}->{'log-x'} if defined $mon{$key}->{'log-x'}; $monitor_ids->{$id}{'log-y'} = $mon{$key}->{'log-y'} if defined $mon{$key}->{'log-y'}; $monitor_ids->{$id}{'pos-x'} = $mon{$key}->{'pos-x'} if defined $mon{$key}->{'pos-x'}; @@ -17074,9 +17284,15 @@ sub wlinfo_data { $monitor_ids->{$id}{'size-x'} = $mon{$key}->{'size-x'} if defined $mon{$key}->{'size-x'}; $monitor_ids->{$id}{'size-y'} = $mon{$key}->{'size-y'} if defined $mon{$key}->{'size-y'}; $monitor_ids->{$id}{'hz'} = $mon{$key}->{'hz'} if defined $mon{$key}->{'hz'}; + if ($mon{$key}->{'log-x'} && $mon{$key}->{'res-x'}){ + $monitor_ids->{$id}{'scale-type'} = 'wl'; + $monitor_ids->{$id}{'scale-used'} = sprintf('%0.2f',($mon{$key}->{'res-x'}/$mon{$key}->{'log-x'})) + 0; + $monitor_ids->{$id}{'scale-percent'} = int($monitor_ids->{$id}{'scale-used'} * 100); + } if (defined $mon{$key}->{'model'} && !$monitor_ids->{$id}{'model'}){ $monitor_ids->{$id}{'model'} = $mon{$key}->{'model'}; } + # note, this value seems nonsensical, seen actual scale 0.8 show 2 $monitor_ids->{$id}{'scale'} = $mon{$key}->{'scale'} if defined $mon{$key}->{'scale'}; # fallbacks in case wl_output block is not present, which happens if (!defined $mon{$key}->{'pos-x'} && defined $mon{$key}->{'log-pos-x'}){ @@ -17105,7 +17321,8 @@ sub swaymsg_data { eval $start if $b_log; my ($program) = @_; my (@data,%json,@temp,$ref); - my ($b_json,$file,$hz,$id,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial); + my ($b_json,$file,$hz,$id,$log_x,$log_y,$model,$pos_x,$pos_y,$res_x,$res_y, + $scale,$serial); if (!$fake{'swaymsg'}){ main::load_json() if !$loaded{'json'}; if ($use{'json'}){ @@ -17122,7 +17339,8 @@ sub swaymsg_data { } else { undef $monitor_ids; - $file = "$fake_data_dir/graphics/wayland/swaymsg-2-monitor-1.txt"; + # $file = "$fake_data_dir/graphics/wayland/swaymsg-2-monitor-1.txt"; + $file = "$fake_data_dir/graphics/wayland/swaymsg-1-monitor-laptop-1.txt"; @data = main::reader($file,'strip'); } print 'swaymsg: ', Data::Dumper::Dumper \@data if $dbg[46]; @@ -17167,11 +17385,15 @@ sub swaymsg_data { $monitor_ids->{$id}{'res-y'} = $mon->{'current_mode'}{'height'}; } if ($mon->{'rect'}){ + $monitor_ids->{$id}{'log-x'} = $mon->{'rect'}{'width'}; + $monitor_ids->{$id}{'log-y'} = $mon->{'rect'}{'height'}; $monitor_ids->{$id}{'pos-x'} = $mon->{'rect'}{'x'}; $monitor_ids->{$id}{'pos-y'} = $mon->{'rect'}{'y'}; } if ($mon->{'scale'}){ - $monitor_ids->{$id}{'scale'} =$mon->{'scale'}; + $monitor_ids->{$id}{'scale-type'} = 'swaymsg'; + $monitor_ids->{$id}{'scale-percent'} = int(100*$mon->{'scale'}); + $monitor_ids->{$id}{'scale-used'} = (sprintf('%.2f',$mon->{'scale'})) + 0; } } } @@ -17186,16 +17408,24 @@ sub swaymsg_data { $b_wayland_data = 1 if scalar @data > 8; foreach (@data){ if ($_ eq '~~' && $id){ + if ($scale && $res_x){ + $log_x = int(($res_x/$scale)); + $log_y = int(($res_y/$scale)); + } $monitor_ids->{$id}{'hz'} = $hz; + $monitor_ids->{$id}{'log-x'} = $log_x; + $monitor_ids->{$id}{'log-y'} = $log_y; $monitor_ids->{$id}{'model'} = $model if $model; $monitor_ids->{$id}{'monitor'} = $id; $monitor_ids->{$id}{'pos-x'} = $pos_x; $monitor_ids->{$id}{'pos-y'} = $pos_y; $monitor_ids->{$id}{'res-x'} = $res_x; $monitor_ids->{$id}{'res-y'} = $res_y; - $monitor_ids->{$id}{'scale'} = $scale; + $monitor_ids->{$id}{'scale-type'} = 'wl'; + $monitor_ids->{$id}{'scale-percent'} = int(100*$scale) if $scale; + $monitor_ids->{$id}{'scale-used'} = $scale; $monitor_ids->{$id}{'serial'} = $serial if $serial; - ($hz,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial) = (); + ($hz,$log_x,$log_y,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial) = (); $b_wayland_data = 1; } # Output VGA-1 '<Unknown> <Unknown> ' (focused) @@ -17209,7 +17439,7 @@ sub swaymsg_data { elsif (/^Current mode:\s+(\d+)x(\d+)\s+\@\s+([\d\.]+)\s+Hz/i){ $res_x = $1; $res_y = $2; - $hz = (sprintf('%.0f',($3/1000)) + 0) if $3; + $hz = sprintf('%.0f',$3) if $3; } elsif (/^Position:\s+(\d+),(\d+)/i){ $pos_x = $1; @@ -17229,14 +17459,16 @@ sub swaymsg_data { sub wlrrandr_data { eval $start if $b_log; my ($program) = @_; - my ($file,$hz,$id,$info,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial); + my ($file,$hz,$id,$info,$log_x,$log_y,$model,$pos_x,$pos_y,$res_x,$res_y, + $scale,$serial); my ($data,@temp); if (!$fake{'wlr-randr'}){ $data = main::grabber("$program 2>/dev/null",'','strip','ref'); } else { undef $monitor_ids; - $file = "$fake_data_dir/graphics/wayland/wlr-randr-2-monitor-1.txt"; + # $file = "$fake_data_dir/graphics/wayland/wlr-randr-2-monitor-1.txt"; + $file = "$fake_data_dir/graphics/wayland/wlr-randr-1-monitor-1.txt"; $data = main::reader($file,'strip','ref'); } foreach (@$data){ @@ -17250,16 +17482,25 @@ sub wlrrandr_data { main::log_data('dump','@$data', $data) if $b_log; foreach (@$data){ if ($_ eq '~~' && $id){ + if ($scale && $res_x){ + $log_x = int($res_x/$scale); + $log_y = int($res_y/$scale); + $scale = sprintf('%.2f',$scale) + 0; + } $monitor_ids->{$id}{'hz'} = $hz; + $monitor_ids->{$id}{'log-x'} = $log_x; + $monitor_ids->{$id}{'log-y'} = $log_y; $monitor_ids->{$id}{'model'} = $model if $model && !$monitor_ids->{$id}{'model'}; $monitor_ids->{$id}{'monitor'} = $id; $monitor_ids->{$id}{'pos-x'} = $pos_x; $monitor_ids->{$id}{'pos-y'} = $pos_y; $monitor_ids->{$id}{'res-x'} = $res_x; $monitor_ids->{$id}{'res-y'} = $res_y; - $monitor_ids->{$id}{'scale'} = $scale; + $monitor_ids->{$id}{'scale-type'} = 'wlr-randr'; + $monitor_ids->{$id}{'scale-percent'} = int($scale*100) if $scale; + $monitor_ids->{$id}{'scale-used'} = $scale; $monitor_ids->{$id}{'serial'} = $serial if $serial && !$monitor_ids->{$id}{'serial'}; - ($hz,$info,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial) = (); + ($hz,$info,$log_x,$log_y,$model,$pos_x,$pos_y,$res_x,$res_y,$scale,$serial) = (); $b_wayland_data = 1; } # Output: VGA-1 '<Unknown> <Unknown> ' (focused) @@ -17284,6 +17525,9 @@ sub wlrrandr_data { elsif (/^Scale:\s+([\d\.]+)/i){ $scale = $1 + 0; } + elsif (/^Serial:\s+(\S+)/i){ + $serial = main::clean_dmi($1); + } } print 'wlr-randr: ', Data::Dumper::Dumper $monitor_ids if $dbg[46]; eval $end if $b_log; @@ -17311,7 +17555,7 @@ sub get_model_serial { return ($model,$serial); } -# DISPLAY DATA X.org ## +## DISPLAY DATA: X11 ## sub display_data_x { eval $start if $b_log; my ($prog_xdpyinfo,$prog_xdriinfo,$prog_xrandr); @@ -17484,7 +17728,7 @@ sub xrandr_data { eval $end if $b_log; my ($program) = @_; my ($diagonal,$diagonal_m,$dpi,$monitor_id,$pos_x,$pos_y,$primary); - my ($res_x,$res_x_max,$res_y,$res_y_max); + my ($log_x,$log_y,$res_x,$res_x_max,$res_y,$res_y_max); my ($screen_id,$set_as,$size_x,$size_x_i,$size_y,$size_y_i); my (@ids,%monitors,@xrandr,@xrandr_screens); if (!$fake{'xrandr'}){ @@ -17540,6 +17784,7 @@ sub xrandr_data { 'size-y-i' => undef, 'source' => 'xrandr', }); + ($res_x,$res_y,$res_x_max,$res_y_max) = (); } if (%monitors){ push(@xrandr_screens,{%monitors}); @@ -17549,29 +17794,27 @@ sub xrandr_data { # HDMI-2 connected 1920x1200+1080+0 (normal left inverted right x axis y axis) 519mm x 324mm # DP-1 connected primary 2560x1440+1080+1200 (normal left inverted right x axis y axis) 598mm x 336mm # HDMI-1 connected 1080x1920+0+0 left (normal left inverted right x axis y axis) 160mm x 90mm + # DVI-I-1 connected 1664x1332+0+0 (normal left inverted right x axis y axis) 338mm x 270mm # disabled but connected: VGA-1 connected (normal left inverted right x axis y axis) elsif (/^([\S]+)\s+connected\s(primary\s)?/){ $monitor_id = $1; $set_as = $2; if (/^[^\s]+\s+connected\s(primary\s)?([0-9]+)\s*x\s*([0-9]+)\+([0-9]+)\+([0-9]+)(\s[^(]*\([^)]+\))?(\s([0-9]+)mm\sx\s([0-9]+)mm)?/){ - $res_x = $2; - $res_y = $3; + $log_x = $2; + $log_y = $3; $pos_x = $4; $pos_y = $5; $size_x = $8; $size_y = $9; # flip size x,y if don't roughly match res x/y ratio if ($size_x && $size_y && $res_y){ - flip_size_x_y(\$size_x,\$size_y,\$res_x,\$res_y); + flip_size_x_y(\$size_x,\$size_y,\$log_x,\$log_y); } $size_x_i = ($size_x) ? sprintf("%.2f", ($size_x/25.4)) + 0 : 0; $size_y_i = ($size_y) ? sprintf("%.2f", ($size_y/25.4)) + 0 : 0; - $dpi = ($res_x && $size_x) ? sprintf("%.0f", $res_x * 25.4 / $size_x) : ''; - $diagonal = ($res_x && $size_x) ? sprintf("%.2f", (sqrt($size_x**2 + $size_y**2)/25.4)) + 0 : ''; - $diagonal_m = ($res_x && $size_x) ? sprintf("%.0f", (sqrt($size_x**2 + $size_y**2))) : ''; } else { - ($res_x,$res_y,$pos_x,$pos_y,$size_x,$size_x_i,$size_y,$size_y_i,$dpi,$diagonal,$diagonal_m) = () + ($log_x,$log_y,$pos_x,$pos_y,$size_x,$size_x_i,$size_y,$size_y_i) = () } undef $primary; push(@ids,[$monitor_id]); @@ -17581,24 +17824,20 @@ sub xrandr_data { $b_primary = 1; } $monitors{$monitor_id} = { - 'screen' => $screen_id, + 'log-x' => $log_x, + 'log-y' => $log_y, 'monitor' => $monitor_id, 'pos-x' => $pos_x, 'pos-y' => $pos_y, + 'position' => $set_as, 'primary' => $primary, - 'res-x' => $res_x, - 'res-y' => $res_y, + 'screen' => $screen_id, 'size-x' => $size_x, 'size-x-i' => $size_x_i, 'size-y' => $size_y, 'size-y-i' => $size_y_i, - 'dpi' => $dpi, - 'diagonal' => $diagonal, - 'diagonal-m' => $diagonal_m, - 'position' => $set_as, }; # print "x:$size_x y:$size_y rx:$res_x ry:$res_y dpi:$dpi\n"; - ($res_x,$res_y,$size_x,$size_x_i,$size_y,$size_y_i,$set_as) = (0,0,0,0,0,0,0,0,undef); } elsif (/^([\S]+)\s+disconnected\s/){ undef $monitor_id; @@ -17613,8 +17852,21 @@ sub xrandr_data { # print "$working[1] :: $working[2]\n"; $working[2] =~ s/\*|\+//g; $working[2] = sprintf("%.0f",$working[2]); + ($res_x,$res_y) = split(/x/,$working[1]); + $diagonal = ($res_x && $size_x) ? sprintf("%.2f", (sqrt($size_x**2 + $size_y**2)/25.4)) + 0 : ''; + $diagonal_m = ($res_x && $size_x) ? sprintf("%.0f", (sqrt($size_x**2 + $size_y**2))) : ''; + $dpi = ($res_x && $size_x) ? sprintf("%.0f", $res_x * 25.4 / $size_x) : ''; + $monitors{$monitor_id}->{'diagonal'} = $diagonal; + $monitors{$monitor_id}->{'diagonal-m'} = $diagonal_m; + $monitors{$monitor_id}->{'dpi'} = $dpi; + $monitors{$monitor_id}->{'res-x'} = $res_x; + $monitors{$monitor_id}->{'res-y'} = $res_y; + $monitors{$monitor_id}->{'scale-type'} = 'x11'; + $monitors{$monitor_id}->{'scale-percent'} = int(($res_x/$monitors{$monitor_id}->{'log-x'}) * 100); + $monitors{$monitor_id}->{'scale-used'} = ($monitors{$monitor_id}->{'log-x'}/$res_x) + 0; $monitors{$monitor_id}->{'hz'} = $working[2]; - ($diagonal,$dpi) = ('',''); + ($diagonal,$diagonal_m,$dpi,$log_x,$log_y,$res_x,$res_y,$size_x, + $size_x_i,$size_y,$size_y_i,$set_as) = (); # print Data::Dumper::Dumper \@monitors; } # \tCONNECTOR_ID: 52 @@ -17637,6 +17889,8 @@ sub xrandr_data { $graphics{'display-screens'} < scalar @{$graphics{'screens'}})){ $graphics{'display-screens'} = scalar @{$graphics{'screens'}}; } + print "xrandr_screens: " . Data::Dumper::Dumper \@xrandr_screens if $dbg[17]; + main::log_data('dump','@xrandr_screens 1',\@xrandr_screens) if $b_log; map_monitor_ids(\@ids) if @ids; # print "xrandr_screens 1: " . Data::Dumper::Dumper \@xrandr_screens; foreach my $main (@{$graphics{'screens'}}){ @@ -17664,8 +17918,7 @@ sub xrandr_data { $i++; } undef $layouts; - # print "xrandr_screens 2: " . Data::Dumper::Dumper \@xrandr_screens; - print 'Data: xrandr: ', Data::Dumper::Dumper $graphics{'screens'} if $dbg[17]; + print 'Data: graphics{screens}: ', Data::Dumper::Dumper $graphics{'screens'} if $dbg[17]; main::log_data('dump','$graphics{screens}',$graphics{'screens'}) if $b_log; eval $end if $b_log; } @@ -17694,6 +17947,7 @@ sub check_screens { return $b_use; } +## DISPLAY SERVER DATA ## # Case where no xpdyinfo display server/version data exists, or to set Wayland # Xwayland version, or Xvesa data. sub display_server_data { @@ -17801,52 +18055,6 @@ sub tinyx_data { eval $end if $b_log; } -sub display_protocol { - eval $start if $b_log; - $graphics{'protocol'} = ''; - if ($ENV{'XDG_SESSION_TYPE'}){ - $graphics{'protocol'} = $ENV{'XDG_SESSION_TYPE'}; - } - if (!$graphics{'protocol'} && $ENV{'WAYLAND_DISPLAY'}){ - $graphics{'protocol'} = $ENV{'WAYLAND_DISPLAY'}; - } - # can show as wayland-0 - if ($graphics{'protocol'} && $graphics{'protocol'} =~ /wayland/i){ - $graphics{'protocol'} = 'wayland'; - } - # yes, I've seen this in 2019 distros, sigh - elsif ($graphics{'protocol'} eq 'tty'){ - $graphics{'protocol'} = ''; - } - # If no other source, get user session id, then grab session type. - # loginctl also results in the session id - # undef $graphics{'protocol'}; - if (!$graphics{'protocol'}){ - if (my $program = main::check_program('loginctl')){ - my $id = ''; - # $id = $ENV{'XDG_SESSION_ID'}; # returns tty session in console - my @data = main::grabber("$program --no-pager --no-legend 2>/dev/null",'','strip'); - foreach (@data){ - # some systems show empty or ??? for TTY field, but whoami should do ok - next if /(ttyv?\d|pts\/)/; # freebsd: ttyv3 - # in display, root doesn't show in the logins - next if $client{'whoami'} && $client{'whoami'} ne 'root' && !/\b$client{'whoami'}\b/; - $id = (split(/\s+/, $_))[0]; - # multiuser? too bad, we'll go for the first one that isn't a tty/pts - last; - } - if ($id){ - my $temp = (main::grabber("$program show-session $id -p Type --no-pager --no-legend 2>/dev/null"))[0]; - $temp =~ s/Type=// if $temp; - # ssh will not show /dev/ttyx so would have passed the first test - $graphics{'protocol'} = $temp if $temp && $temp ne 'tty'; - } - } - } - $graphics{'protocol'} = lc($graphics{'protocol'}) if $graphics{'protocol'}; - eval $end if $b_log; -} - ## DRIVER DATA ## # for wayland display/monitor drivers, or if no display drivers found for x sub gpu_drivers_sys { @@ -17893,13 +18101,15 @@ sub display_drivers_x { # list is from sgfxi plus non-free drivers, plus ARM drivers. # Don't use ati. It's just a wrapper for: r128, mach64, radeon my $list = join('|', qw(amdgpu apm ark armsoc atimisc - chips cirrus cyrix etnaviv fbdev fbturbo fglrx geode glide glint + chips cirrus cyrix efifb 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 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)); + s3virge s3 savage siliconmotion simpledrm simplefb + sisimedia sisusb sis sis530 + sunbw2 suncg14 suncg3 suncg6 sunffb sunleo suntcx + tdfx tga trident trio ts300 tseng + unichrome v4l vboxvideo vesa vesafb vga via vmware vmwgfx voodoo)); # $list = qr/$list/i; # qr/../i only added perl 5.14, fails on older perls my ($b_use_dri,$dri,$driver,%drivers); my ($alternate,$failed,$loaded,$unloaded); @@ -18202,8 +18412,8 @@ sub set_amd_data { 'years' => '2017-20', }, {'arch' => 'RDNA-1', - 'ids' => '13e9|13f9|13fe|1478|1479|1607|7310|7312|7318|7319|731a|731b|731e|' . - '731f|7340|7341|7343|7347|734f|7360|7362', + 'ids' => '13e9|13f9|13fe|1607|7310|7312|7318|7319|731a|731b|731e|731f|7340|' . + '7341|7343|7347|734f|7360|7362', 'code' => 'Navi-1x', 'process' => 'TSMC n7 (7nm)', 'years' => '2019-20', @@ -18217,14 +18427,14 @@ sub set_amd_data { 'years' => '2020-22', }, {'arch' => 'RDNA-3', - 'ids' => '73a8|73c4|73c5|73c8|7448|744c|745e|7460|7461|7470|7478|747e', + 'ids' => '73a8|73c4|73c5|73c8|7448|744a|744c|745e|7460|7461|7470|7478|747e', 'code' => 'Navi-3x', 'process' => 'TSMC n5 (5nm)', 'years' => '2022+', }, {'arch' => 'RDNA-3', - 'ids' => '73f0|7480|7481|7483|7487|7489|748b|749f', - 'code' => 'Navi-33',- + 'ids' => '73f0|7480|7481|7483|7487|7489|748b|7499', + 'code' => 'Navi-3x', 'process' => 'TSMC n6 (6nm)', 'years' => '2023+', }, @@ -18247,7 +18457,7 @@ sub set_amd_data { 'years' => '2021-22+', }, {'arch' => 'CDNA-3', - 'ids' => '74a0|74a1', + 'ids' => '74a0|74a1|74a2|74a5|74a9|74b5|74bd', 'code' => 'Instinct-MI3xx', 'process' => 'TSMC n5 (5nm)', 'years' => '2023+', @@ -18258,7 +18468,7 @@ sub set_amd_data { sub set_intel_data { $gpu_intel = [ {'arch' => 'Gen-1', - 'ids' => '1132|7120|7121|7122|7123|7124|7125|7126|7128|712a', + 'ids' => '1132|3577|7120|7121|7122|7123|7124|7125|7126|7128|712a', 'code' => '', 'process' => 'Intel 150nm', 'years' => '1998-2002', @@ -18271,26 +18481,26 @@ sub set_intel_data { 'years' => '1998', }, {'arch' => 'Gen-2', - 'ids' => '2562|2572|3577|3582|358e', + 'ids' => '2562|2572|2582|3577|3582|358e', 'code' => '', 'process' => 'Intel 130nm', 'years' => '2002-03', }, {'arch' => 'Gen-3', - 'ids' => '2582|2592|2780|2782|2792', - 'code' => 'Intel 130nm', - 'process' => '', + 'ids' => '2582|258a|2592|2780|2782|2792', + 'code' => '', + 'process' => 'Intel 130nm', 'years' => '2004-05', }, {'arch' => 'Gen-3.5', - 'ids' => '2772|2776|27a2|27a6|27ae|2972|2973', + 'ids' => '2772|2776|27a2|27a6|27ae|2972|2973|2982|29b2|29c2|29d2|a001|a011', 'code' => '', 'process' => 'Intel 90nm', 'years' => '2005-06', }, {'arch' => 'Gen-4', 'ids' => '2982|2983|2992|2993|29a2|29a3|29b2|29b3|29c2|29c3|29d2|29d3|2a02|' . - '2a03|2a12|2a13|2a42|2e02|2e12|2e22|2e32|2e42|2e92|a001|a011', + '2a03|2a12|2a13|2a42|2e02|2e12|2e22|2e32|2e42|2e92', 'code' => '', 'process' => 'Intel 65n', 'years' => '2006-07', @@ -18299,7 +18509,7 @@ sub set_intel_data { 'ids' => '4100|8108|8109|a001|a002|a011|a012', 'code' => '', 'process' => 'Intel 45-130nm', - 'year' => '2008-10', + 'years' => '2008-10', }, {'arch' => 'Gen-5', 'ids' => '2a41|2a42|2a43|2e02|2e03|2e12|2e13|2e22|2e23|2e32|2e33|2e42|2e43|' . @@ -18375,7 +18585,7 @@ sub set_intel_data { 'process' => 'Intel 14n', 'years' => '2015-16', }, - # gen10 was cancelled., + # gen10 was cancelled. {'arch' => 'Gen-11', 'ids' => '0d16|0d26|0d36|4541|4551|4555|4557|4571|4e51|4e55|4e57|4e61|4e71|' . '8a50|8a51|8a52|8a53|8a54|8a56|8a57|8a58|8a59|8a5a|8a5b|8a5c|8a5d|8a70|8a71|' . @@ -18384,68 +18594,66 @@ sub set_intel_data { 'process' => 'Intel 10nm', 'years' => '2019-21', }, - {'arch' => 'Gen-12.1', + {'arch' => 'Xe', 'ids' => '4626|4628|462a|4636|4638|463a|4680|4682|4688|468a|468b|4690|4692|' . '4693|46a1|46a2|46a3|46b2|46b3|46c2|46c3|46d0|46d1|46d2|4905|4907|4908|4909|' . - '4c8a|4c8b|4c90|4c9a|9a40|9a49|9a59|9a60|9a68|9a70|9a78|9ac0|9ac9|9ad9|9af8|' . - 'a719|a720|a721|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a8|a7a9', + '4c8a|4c8b|4c90|4c9a|9a40|9a49|9a59|9a60|9a68|9a70|9a78|9ac0|9ad9|9af8|a720|' . + 'a721|a780|a781|a782|a783|a788|a789|a78a|a78b|a7a8|a7a9', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2020-21', }, - {'arch' => 'Gen-12.2', + {'arch' => 'Xe', 'ids' => '4626|46a0|46a1|46a6|46a8|46aa|46b0|46b1|46b6|46b8|46ba|46c0|46c1|' . '46d3|46d4', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2021-22+', }, - {'arch' => 'Gen-12.5', + {'arch' => 'Xe', 'ids' => '0bd5|0bda', 'code' => '', 'process' => 'Intel 10nm', 'years' => '2021-23+', }, - {'arch' => 'Gen-12.7', + {'arch' => 'Xe-HPG', 'ids' => '4f80|4f81|4f82|4f83|4f84|4f85|4f86|4f87|4f88|5690|5691|5692|5693|' . '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', + '56b1|56b2|56b3|56ba|56bb|56bc|56bd|56c0|56c1', 'code' => 'Alchemist', 'process' => 'TSMC n6 (7nm)', 'years' => '2022+', }, - {'arch' => 'Gen-13', - 'ids' => 'a70d|a719|a720|a721|a74d|a780|a781|a782|a783|a788|a789|a78a|a78b|' . - 'a7a0|a7a1|a7a8|a7a9|a7aa|a7ab|a7ac|a7ad', + {'arch' => 'Xe', + 'ids' => 'a70d|a74d|a7a0|a7a1|a7aa|a7ab|a7ac|a7ad', 'code' => '', 'process' => 'Intel 7 (10nm)', 'years' => '2022+', }, - {'arch' => 'Gen-13', - 'ids' => '7d40|7d41|7d45|7d51|7d55|7d60|7d67|7dd1|7dd5', + {'arch' => 'Xe-LPG', + 'ids' => '7d40|7d45|7d55|7d60|7dd5', 'code' => '', 'process' => 'Intel 4 (7nm+)', 'years' => '2023+', }, - {'arch' => 'Gen-14', + {'arch' => 'Xe2', 'ids' => 'e202|e20b|e20c|e20d|e212', 'code' => '', 'process' => 'TSMC n4 (4nm)', 'years' => '2024+', }, - {'arch' => 'Gen-14', - 'ids' => '6420|64a0|64b0', + {'arch' => 'Xe2', + 'ids' => '6420|64a0|64b0|b080|b081|b082|b083|b08f|b090|b0a0|b0b0', 'code' => '', 'process' => 'TSMC n3 (3nm)', 'years' => '2024+', }, - {'arch' => 'Gen-15', - 'ids' => '7d41|7d51|7d67|7dd1', + {'arch' => 'Xe-LPG', + 'ids' => '7d41|7d51|7d67|7dd1|b640', 'code' => '', 'process' => 'TSMC 3nm?', 'years' => '2025+', }, - ]; } @@ -18677,7 +18885,7 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC 28nm', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => main::message('nv-current-eol',$date,'2026-12-xx'), 'xorg' => '', 'years' => '2014-2019', @@ -18694,7 +18902,7 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC 16nm', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => main::message('nv-current-eol',$date,'2026-12-xx'), 'xorg' => '', 'years' => '2016-2021', @@ -18706,7 +18914,7 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC 12nm', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => main::message('nv-current-eol',$date,'2026-12-xx'), 'xorg' => '', 'years' => '2017-2020', @@ -18724,7 +18932,7 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC 12nm FF', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => main::message('nv-current-eol',$date,'2026-12-xx'), 'xorg' => '', 'years' => '2018-2022', @@ -18742,19 +18950,19 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC n7 (7nm)', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => main::message('nv-current-eol',$date,'2026-12-xx'), 'xorg' => '', 'years' => '2020-2023', }, {'arch' => 'Hopper', - 'ids' => '2321|2322|2324|2329|2330|2331|2335|2339|233a|2342', + 'ids' => '2321|2322|2324|2329|232c|2330|2331|2335|2339|233a|233b|2342|2348', 'code' => 'GH1xx', 'kernel' => '', 'legacy' => 0, 'process' => 'TSMC n4 (5nm)', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => $status_current, 'xorg' => '', 'years' => '2022+', @@ -18769,7 +18977,7 @@ sub set_nv_data { 'legacy' => 0, 'process' => 'TSMC n4 (5nm)', 'release' => '', - 'series' => '550.xx+', + 'series' => '550/565.xx+', 'status' => $status_current, 'xorg' => '', 'years' => '2022+', @@ -18838,6 +19046,31 @@ sub get_gpu_data { return $info; } +## INFO DATA ## +# args: 0: $tools, hash ref +sub tools_data { + eval $start if $b_log; + my %items = ( + 'api' => [qw(clinfo eglinfo glxinfo vulkaninfo)], + 'de' => [qw(gnome-monitor-config gnome-randr kscreen-console kscreen-doctor + xfce4-display-settings xfce5-display-settings)], + 'gpu' => [qw(amd-smi amdgpu_top aticonfig corectrl gputop intel_gpu_top lsgpu + lact nvidia-settings nvidia-smi radeon_gpu_profiler radeontop tuxclocker umr)], + 'wl' => [qw(kanshi nwg-displays swaymsg way-displays wayland-info wdisplays + weston-info wlay wlr-randr)], + 'x11' => [qw(xdriinfo xdpyinfo xprop xrandr)] + ); + foreach my $key (keys %items){ + foreach my $tool (@{$items{$key}}){ + if (main::check_program($tool)){ + push(@{$_[0]->{$key}},$tool); + } + } + } + # print Data::Dumper::Dumper $_[0]; + eval $end if $b_log; +} + ## MONITOR DATA ## sub set_monitors_sys { eval $start if $b_log; @@ -33534,23 +33767,36 @@ sub version_proc { my $version; if ($fake{'compiler'}){ # $result = $result =~ /\*(gcc|clang)\*eval\*/; + ## CLANG ## # $result='Linux version 5.4.0-rc1 (sourav@archlinux-pc) (clang version 9.0.0 (tags/RELEASE_900/final)) #1 SMP PREEMPT Sun Oct 6 18:02:41 IST 2019'; # $result='Linux version 5.8.3-fw1 (fst@x86_64.frugalware.org) ( OpenMandriva 11.0.0-0.20200819.1 clang version 11.0.0 (/builddir/build/BUILD/llvm-project-release-11.x/clang 2a0076812cf106fcc34376d9d967dc5f2847693a), LLD 11.0.0)'; + # $result='Linux version 6.0.8-0-generic (chimera@chimera) (clang version 15.0.4, LLD 15.0.4) #1 SMP PREEMPT_DYNAMIC Fri Nov 11 13:45:29 UTC 2022'; + ## GCC BASIC LEGACY ## + # $result='Linux version 2.4.27-2-386 (horms@tabatha.lab.ultramonkey.org) (gcc version 3.3.5 (Debian 1:3.3.5-12)) #1 Mon May 16 16:47:51 JST 2005'; + # $result='Linux version 2.6.18-5-686 (Debian 2.6.18.dfsg.1-17) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Mon Dec 24 16:41:07 UTC 2007'; + # $result='Linux version 4.3.6-1-ck (squishy@ease) (gcc version 5.3.0 (GCC) ) #1 SMP PREEMPT Fri Feb 19 20:14:58 EST 2016'; + ## GCC HURD ## + # $result='Linux version 2.6.1 (GNU 0.9 GNU-Mach 1.8+git20201007-486/Hurd-0.9 i686-AT386)'; + ## GCC BSDs ## + # $result='NetBSD version 9.1 (netbsd@localhost) (gcc version 7.5.0) NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020'; + ## GCC GENERAL ## + # $result='Linux version 5.8.0-2-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.0-9) 10.2.0, GNU ld (GNU Binutils for Debian) 2.35) #1 SMP Debian 5.8.10-1 (2020-09-19)'; # $result='Linux version 5.8.0-18-generic (buildd@lgw01-amd64-057) (gcc (Ubuntu 10.2.0-5ubuntu2) 10.2.0, GNU ld (GNU Binutils for Ubuntu) 2.35) #19-Ubuntu SMP Wed Aug 26 15:26:32 UTC 2020'; # $result='Linux version 5.8.9-fw1 (fst@x86_64.frugalware.org) (gcc (Frugalware Linux) 9.2.1 20200215, GNU ld (GNU Binutils) 2.35) #1 SMP PREEMPT Tue Sep 15 16:38:57 CEST 2020'; - # $result='Linux version 5.8.0-2-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.0-9) 10.2.0, GNU ld (GNU Binutils for Debian) 2.35) #1 SMP Debian 5.8.10-1 (2020-09-19)'; # $result='Linux version 5.9.0-5-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-1) 10.2.1 20201207, GNU ld (GNU Binutils for Debian) 2.35.1) #1 SMP Debian 5.9.15-1 (2020-12-17)'; - # $result='Linux version 2.6.1 (GNU 0.9 GNU-Mach 1.8+git20201007-486/Hurd-0.9 i686-AT386)'; - # $result='NetBSD version 9.1 (netbsd@localhost) (gcc version 7.5.0) NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020'; - #$result='Linux version 6.0.8-0-generic (chimera@chimera) (clang version 15.0.4, LLD 15.0.4) #1 SMP PREEMPT_DYNAMIC Fri Nov 11 13:45:29 UTC 2022'; - # 2023 ubuntu, sigh.. + ## 2023 ubuntu, sigh.. # $result='Linux version 6.5.8-1-liquorix-amd64 (steven@liquorix.net) (gcc (Debian 13.2.0-4) 13.2.0, GNU ld (GNU Binutils for Debian) 2.41) #1 ZEN SMP PREEMPT liquorix 6.5-9.1~trixie (2023-10-19)'; # $result='Linux version 6.5.0-9-generic (buildd@bos03-amd64-043) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.41) #9-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 7 01:35:40 UTC 2023'; # $result='Linux version 6.5.13-un-def-alt1 (builder@localhost.localdomain) (gcc-13 (GCC) 13.2.1 20230817 (ALT Sisyphus 13.2.1-alt2), GNU ld (GNU Binutils) 2.41.0.20230826) #1 SMP PREEMPT_DYNAMIC Wed Nov 29 15:54:38 UTC 2023'; + ## issue 310, 2024 redhat, returned: gcc v: 2.40-14.fc39 + # $result='Linux version 6.11.2-300.fc41.x86_64 (mockbuild@b8af20a4150648399241be170922971e) (gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3), GNU ld version 2.43.1-2.fc41) #1 SMP PREEMPT_DYNAMIC Fri Oct 4 16:44:08 UTC 2024'; + ## note the new (x86_64-linux-gnu- in front of gcc, this is 2024-12-10 debian sid + # $result='Linux version 6.11.10-amd64 (debian-kernel@lists.debian.org) (x86_64-linux-gnu-gcc-14 (Debian 14.2.0-8) 14.2.0, GNU ld (GNU Binutils for Debian) 2.43.1) #1 SMP PREEMPT_DYNAMIC Debian 6.11.10-1 (2024-11-23)'; } # Note: zigcc is only theoretical, but someone is going to try it! # cleanest, old style: 'clang version 9.0.0 (' | 'gcc version 7.5.0' - if ($result =~ /(gcc|clang|zigcc).*?version\s([^,\s\)]+)/){ + # note; issue 310 forces [^\d]*\s instead of old .*? + if ($result =~ /(gcc|clang|zigcc)[^\d]*\sversion\s([^,\s\)]+)/){ @$compiler = ($1,$2); } # new styles: compiler + stuff + x.y.z. Ignores modifiers to number: -4, -ubuntu @@ -34460,6 +34706,7 @@ sub package_counts { # 0: key; 1: program; 2: p/d [no-list]; 3: arg/path/no-list; 4: 0/1 use lib; # 5: lib slice; 6: lib splitter; 7: optional eval test; # 8: optional installed tool tests for -ra + # NOTE: 2 if p must have 3, option to use with command. # needed: cards [nutyx], urpmq [mageia] my @pkg_managers = ( ['alps','alps','p','showinstalled',1,0,''], @@ -34492,7 +34739,7 @@ sub package_counts { 'pakku','pamac','paru','pikaur','trizen','yaourt','yay','yup']], ['pacman-g2','pacman-g2','p','-Q',1,0,'','',], ['pkg','pkg','d','/var/db/pkg/*',1,0,''], # 'pkg list' returns non programs - ['pkg_add','pkg_info','p','',1,0,''], # OpenBSD has set of tools, not 1 pm + ['pkg_add','pkg_info','p','-a',1,0,''], # OpenBSD has set of tools, not 1 pm # like cards, avoid pkginfo directly due to python pm being so slow # but pkgadd is also found in scratch ['pkgutils','pkginfo','p','-i',1,0,'','main::check_program(\'pkgadd\')'], @@ -36362,7 +36609,7 @@ sub set_de_wm { # 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 - hyprlock i3lock kscreenlocker light-locker lockscreen lxlock + hypridle hyprlock i3lock kscreenlocker light-locker lockscreen lxlock mate-screensaver nwg-lock physlock rss-glx slock swayidle swaylock ukui-screensaver unicode-screensaver waylock xautolock xfce4-screensaver xlock xlockmore xscreensaver @@ -1,5 +1,5 @@ .\" inxi.1 - manpage for inxi system information tool -.\" Copyright (C) 2024 Harald Hope +.\" Copyright (C) 2025 Harald Hope .\" .\" This program is free software; you can redistribute it and/or modify .\" it under the terms of the GNU General Public License as published by @@ -15,15 +15,15 @@ .\" with this program; if not, write to the Free Software Foundation, Inc., .\" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. .\" -.TH INXI 1 "2024\-09-04" "inxi 3.3.36" "inxi manual" +.TH INXI 1 "2025\-01\-06" "inxi 3.3.37" "inxi manual" .SH NAME -inxi \- Command line system information script for console and IRC +inxi \- Command line system information tool for console and IRC .SH SYNOPSIS \fBinxi\fR -\fBinxi\fR [\fB\-AbBCdDEfFGhiIjJlLmMnNopPrRsSuUwyYzZ\fR] +\fBinxi\fR [\fB\-AbBCdDeEfGhiIjJlLmMnNopPrRsSuUwyYzZ\fR] \fBinxi\fR [\fB\-c -NUMBER\fR] [\fB\-\-sensors\-exclude SENSORS\fR] [\fB\-\-sensors\-use SENSORS\fR] @@ -41,16 +41,16 @@ All short form options have long form variants \- see below for these and more advanced options. .SH DESCRIPTION -\fBinxi\fR is a command line system information script built for console and -IRC. It is also used a debugging tool for forum technical support to quickly +\fBinxi\fR is a command line system information tool built for console and +IRC. It is also used as a debugging tool for forum technical support to quickly ascertain users' system configurations and hardware. inxi shows system hardware, CPU, drivers, Xorg, Desktop, Kernel, compiler version(s), Processes, RAM usage, and a wide variety of other useful information. -\fBinxi\fR output varies depending on whether it is being used on CLI or IRC, -with some default filters and color options applied only for IRC use. -Script colors can be turned off if desired with \fB\-c 0\fR, or changed -using the \fB\-c\fR color options listed in the STANDARD OPTIONS section below. +\fBinxi\fR output varies depending on whether it is being used on CLI or IRC, +with some default filters and color options applied only for IRC use. Colors can +be turned off if desired with \fB\-c 0\fR, or changed using the \fB\-c\fR color +options listed in the STANDARD OPTIONS section below. .SH PRIVACY AND SECURITY In order to maintain basic privacy and security, inxi used on IRC automatically @@ -58,10 +58,13 @@ filters out your network device MAC address, WAN and LAN IP, your \fB/home\fR username directory in partitions, and a few other items. Because inxi is often used on forums for support, you can also trigger this -filtering with the \fB\-z\fR option (\fB\-Fz\fR, for example). To override +filtering with the \fB\-z\fR option (\fB\-ez\fR, for example). To override the IRC filter, you can use the \fB\-Z\fR option. This can be useful in debugging network connection issues online in a private chat, for example. +See \fBFILTER OPTIONS\fR for all filters. If you want to filter everything, use +\fB\-\-za\fR though that's usually overkill. + .SH TABLE OF CONTENTS This man page is pretty long and information packed. It is divided into the following sections: @@ -76,9 +79,9 @@ following sections: types, etc. * \fBEXTRA DATA OPTIONS\fR What \fB\-x\fR, \fB\-xx\fR, and \fB\-xxx\fR add to -the output per primary data type. +the report per primary data type. -* \fBADMIN EXTRA DATA OPTIONS\fR What \fB\-a\fR adds to the output per primary +* \fBADMIN EXTRA DATA OPTIONS\fR What \fB\-a\fR adds to the report per primary data type. These have a lot of information because this is advanced admin data, which are not always intuitive or easy to understand. @@ -118,7 +121,7 @@ you can use those separately as well. For example: \fBinxi \-AG\fR | \fBinxi \-A \-G\fR | \fBinxi \-b\fR | \fBinxi \-c10\fR -| \fBinxi \-FxxzJy90\fR | \fBinxi \-bay\fR +| \fBinxi \-exxzJy90\fR | \fBinxi \-bay\fR Note that all the short form options have long form equivalents, which are listed below. However, usually the short form is used in examples in order to @@ -151,7 +154,17 @@ see API/sound server tools. .TP .B \-b \fR, \fB\-\-basic\fR -Show basic output, short form. Same as: \fBinxi \-v 2\fR +Show basic report with the following items: System (\fB\-S\fR); Machine +(\fB\-M\fR); Battery (\fB\-B\fR) (if available); basic CPU (cores, type, average +clock speed, and min/max speeds, if available); Graphics (\fB\-G\fR); Networking +devices (\fB\-N\fR); basic Disk; Info (\fB\-I\fR). + +The CPU and Disk short forms are special, and are only used in \fB\-b\fR. To see +their full forms, add \fB\-C\fR or \fB\-D\fR. + +Same as: \fBinxi \-v 2\fR + +For expanded \fB\-b\fR report, see \fB\-e\fR/\fB\-\-expanded\fR. .TP .B \-B \fR, \fB\-\-battery\fR @@ -162,7 +175,7 @@ not have very much information, and none about current battery state/charge/voltage. Supports multiple batteries when using \fB/sys\fR or \fBsysctl\fR data. -Note that for \fBcharge:\fR, the output shows the current charge, as well as +Note that for \fBcharge:\fR, the report shows the current charge, as well as its value as a percentage of the available capacity, which can be less than the original design capacity. In the following example, the actual current available capacity of the battery is \fB22.2 Wh\fR. @@ -201,7 +214,7 @@ Show active configuration values, by file, and exit. .TP .B \-C \fR, \fB\-\-cpu\fR -Show full CPU output (if each item available): basic CPU topology, model, type, +Show full CPU report (if each item available): basic CPU topology, model, type, L2 cache, average speed of all cores (if > 1 core, otherwise speed of the core), min/max speeds for CPU, and per CPU clock speed. More data available with \fB\-x\fR, \fB\-xxx\fR, and \fB\-a\fR options. @@ -244,7 +257,7 @@ Sample: .TP .B \-d \fR, \fB\-\-disk\-full\fR,\fB\-\-optical\fR Show optical drive data as well as \fB\-D\fR HDD/SSD drive data. With \fB\-x\fR, -adds a feature line to the output. Also shows floppy disks if present. Note +adds a feature line to the report. Also shows floppy disks if present. Note that there is no current way to get any information about the floppy device that we are aware of, so it will simply show the floppy ID without any extra data. \fB\-xx\fR adds a few more features. @@ -276,6 +289,27 @@ present), vendor (if detected), model, and size. See \fBExtra Data Options\fR for many more features. .TP +.B \-e \fR, \fB\-\-expanded\fR +Show expanded \fB\-b\fR report. Includes all Upper Case options (except +\fB\-J\fR), plus \fB\-\-swap\fR, \fB\-s\fR and \fB\-n\fR. Does not show extra +verbose options such as \fB\-d \-f \-i -J \-l \-m \-o \-p \-r \-t \-u \-x\fR +unless you use those arguments in the command, e.g.: \fBinxi \-ermxx\fR + +The basic CPU line is expanded to full CPU data (\fB\-C\fR); the basic disk +information line is expanded to full drive information (\fB\-D\fR) plus primary +system partion data (\fB\-P\fR), along with adding, if found, RAID (\fB\-R\fR) +and Logical (\fB\-L\fR) items; the Network line (\fB\-N\fR) is expanded to +advanced network (\fB\-n\fR). + +Note that with \fB\-e\fR, to avoid clutter, \fB\-B\fR, \fB\-E\fR, \fB\-L\fR, and +\fB\-R\fR only show if results are found since those are often not relevant. + +For basic report, see \fB\-b\fR/\fB\-\-basic\fR. + +The previous \fB\-F\fR/\fB\-\-full\fR are deprecated because the expanded report +has not been full for a long time. + +.TP .B \-E\fR, \fB\-\-bluetooth\fR Show bluetooth device(s), drivers. Show \fBReport:\fR with HCI ID, state, address per device (requires \fBbtmgmt\fR, \fBbt\-adapter\fR, or @@ -321,15 +355,13 @@ See \fBFILTER OPTIONS\fR. .TP .B \-f \fR, \fB\-\-flags\fR -Show all CPU flags used, not just the short list. Not shown with \fB\-F\fR +Show all CPU flags used, not just the short list. Not shown with \fB\-e\fR in order to avoid spamming. ARM CPUs: show \fBfeatures\fR items. .TP .B \-F \fR, \fB\-\-full\fR -Show Full output for inxi. Includes all Upper Case line letters (except -\fB\-J\fR, plus \fB\-\-swap\fR, \fB\-s\fR and \fB\-n\fR. Does not show extra -verbose options such as \fB\-d \-f \-i -J \-l \-m \-o \-p \-r \-t \-u \-x\fR -unless you use those arguments in the command, e.g.: \fBinxi \-Frmxx\fR +.br +Deprecated. See \fB\-e\fR/\fB\-\-expanded\fR\fR. .TP .B \-G \fR, \fB\-\-graphics\fR @@ -366,20 +398,20 @@ advanced monitor data (full modes, chroma, etc.). .TP .B \-h \fR, \fB\-\-help\fR -The help menu. Features dynamic sizing to fit into terminal window. Set script -global \fBCOLS_MAX_CONSOLE\fR if you want a different default value, or use -\fB\-y [width]\fR to temporarily override the defaults or actual window width. +The help menu. Features dynamic sizing to fit into terminal window. Set global +\fBCOLS_MAX_CONSOLE\fR if you want a different default value, or use \fB\-y +[width]\fR to temporarily override the defaults or actual window width. .TP .B \-i \fR, \fB\-\-ip\fR Show WAN IP address and local interfaces (latter requires \fBifconfig\fR or -\fBip\fR network tool), as well as network output from \fB\-n\fR. Not shown with -\fB\-F\fR for user security reasons. You shouldn't paste your local/WAN IP. +\fBip\fR network tool), as well as network report from \fB\-n\fR. Not shown with +\fB\-e\fR for user security reasons. You shouldn't paste your local/WAN IP. Shows both IPv4 and IPv6 link IP addresses. .TP .B \-\-ip\-limit\fR, \fB\-\-limit [\-1 \- x]\fR -Raise or lower max output limit of IP addresses for \fB\-i\fR. \fB\-1\fR +Raise or lower max report limit of IP addresses for \fB\-i\fR. \fB\-1\fR removes limit. .TP @@ -504,7 +536,7 @@ Other types of logical block handling like LUKS, bcache show as: .TP .B \-m \fR, \fB\-\-memory\fR -Memory (RAM) data. Does not display with \fB\-b\fR or \fB\-F\fR unless you use +Memory (RAM) data. Does not display with \fB\-b\fR or \fB\-e\fR unless you use \fB\-m\fR explicitly. Ordered by system board physical system memory array(s) (\fBArray\-[number]\fR), and individual memory devices (\fBDevice\-[number]\fR). Physical memory array data shows array capacity, number of devices supported, @@ -520,7 +552,7 @@ unless you figure out how to set up doas/sudo to permit dmidecode to read \fB/dev/mem\fR as user. \fBudevadm\fR can be run by non\-superuser, or if dmidecode is not installed -(Linux only). It has a slightly less reliable dmi table output, and does not +(Linux only). It has a slightly less reliable dmi table report, and does not seem to support more than 1 board memory array, but is pretty good. Voltages may be wrong however. @@ -643,7 +675,7 @@ Device information requires either \fB/sys\fR or \fBdmidecode\fR. Note that detect which type, or positively confirm which VM it is. Primary VM identification is via systemd\-detect\-virt but fallback tests that should also support some BSDs are used. Less commonly used or harder to detect VMs may not -be correctly detected. If you get an incorrect output, post an issue and we'll +be correctly detected. If you get an incorrect report, post an issue and we'll get it fixed if possible. Due to unreliable vendor data, device type will show: desktop, laptop, @@ -688,7 +720,7 @@ To show partition labels or UUIDs (when available and relevant), use with .TP .B \-\-partitions\-sort\fR, \fB\-\-ps\fR \ [dev\-base|fs|id|label|percent\-used|size|uuid|used]\fR -Change default sort order of partition output. Corresponds to +Change default sort order of partition report. Corresponds to \fBPARTITION_SORT\fR configuration item. These are the available sort options: \fBdev\-base\fR - \fB/dev\fR partition identifier, like \fB/dev/sda1\fR. @@ -811,7 +843,7 @@ then shows what package(s) you need to install to add support for each feature. .TP .B \-s \fR, \fB\-\-sensors\fR -Show output from sensors if sensors installed/configured: Motherboard/CPU/GPU +Show report from sensors if sensors installed/configured: Motherboard/CPU/GPU temperatures; detected fan speeds. GPU temperature when available. Nvidia shows screen number for multiple screens. IPMI sensors are also used (root required) if present. @@ -916,60 +948,66 @@ See \fB\-J\fR. .TP .B \-v \fR, \fB\-\-verbosity\fR -Script verbosity levels. If no verbosity level number is given, 0 is assumed. -Should not be used with \fB\-b\fR or \fB\-F\fR. +Report verbosity levels. If no verbosity level number is given, 0 is assumed. +Should not be used with \fB\-b\fR or \fB\-e\fR since the option that triggers +the most features will override the one with fewer. -Supported levels: \fB0\-8\fR Examples :\fB inxi \-v 4 \fR or \fB inxi \-v4\fR +Supported levels: \fB0\-8\fR + +Can be used together with other options. + +Examples: \fBinxi \-v 4 \fR or \fBinxi \-v4\fR or \fBinxi \-\-verbosity 4\fR or +\fBinxi \-zv8\fR .TP .B \-v 0 -\- Short output, same as: \fBinxi\fR +\- Simple report. Same as: \fBinxi\fR (with no options). .TP .B \-v 1 -\- Basic verbose, \fB\-S\fR + basic CPU (cores, type, average clock speed, and -min/max speeds, if available) + \fB\-G\fR + basic Disk + \fB\-I\fR. +\- Basic report: System (\fB\-S\fR); basic CPU (cores, type, average clock speed, and +min/max speeds, if available); Graphics (\fB\-G\fR); basic Disk; Info +(\fB\-I\fR). .TP .B \-v 2 -\- Adds networking device (\fB\-N\fR), Machine (\fB\-M\fR) data, Battery -(\fB\-B\fR) (if available). Same as: \fBinxi \-b\fR +\- Adds: Machine (\fB\-M\fR); Battery (\fB\-B\fR) (if available); Networking +devices (\fB\-N\fR). Same as \fBinxi \-b\fR. .TP .B \-v 3 -\- Adds advanced CPU (\fB\-C\fR) and network (\fB\-n\fR) data; triggers -\fB\-x\fR advanced data option. +\- Adds: full CPU (\fB\-C\fR); advanced network (\fB\-n\fR); triggers \fB\-x\fR +extra data option. .TP .B \-v 4 -\- Adds partition size/used data (\fB\-P\fR) for (if present): \fB/ /home /var/ -/boot\fR. Shows full drive data (\fB\-D\fR) +\- Adds: full Drive (\fB\-D\fR); system Partitions (\fB\-P\fR) (if present): +\fB/ /home /var/ /boot\fR. .TP .B \-v 5 -\- Adds audio device (\fB\-A\fR), memory/RAM (\fB\-m\fR), bluetooth data -(\fB\-E\fR) (if present), sensors (\fB\-s\fR), RAID data (if present), partition -label (\fB\-l\fR), UUID (\fB\-u\fR), full swap data (\fB\-j\fR), and short form -of optical drives. +\- Adds: memory/RAM (\fB\-m\fR); audio device (\fB\-A\fR); bluetooth (\fB\-E\fR) +(if present); RAID data (\fB\-R\fR) (if present); partition label (\fB\-l\fR) +and UUID (\fB\-u\fR); swap (\fB\-j\fR); sensors (\fB\-s\fR), .TP .B \-v 6 -\- Adds full mounted partition data (\fB\-p\fR), unmounted partition data -(\fB\-o\fR), optical drive data (\fB\-d\fR), USB (\fB\-J\fR); triggers -\fB\-xx\fR extra data option. +\- Adds: full mounted partitions (\fB\-p\fR); unmounted partitions (\fB\-o\fR); +optical drives (\fB\-d\fR); USB (\fB\-J\fR); triggers \fB\-xx\fR extra data +option. .TP .B \-v 7 -\- Adds network IP data (\fB\-i\fR), forced bluetooth (\fB\-E\fR), Logical -(\fB\-L\fR), RAID (\fB\-R\fR), full CPU flags/features (\fB\-f\fR), triggers -\fB\-xxx\fR +\- Adds: full CPU flags/features (\fB\-f\fR); advanced network IP (\fB\-i\fR); +triggers \fB\-xxx\fR; forces battery (\fB\-B\fR), bluetooth (\fB\-E\fR), Logical +devices (\fB\-L\fR) and RAID (\fB\-R\fR) regardless whether data was found for +them or not. .TP .B \-v 8 -\- All system data available. Adds advanced EDID data (\fB\-\-edid\fR), Repos -(\fB\-r\fR), PCI slots (\fB\-\-slots\fR), processes (\fB\-tcm\fR), admin -(\fB\-\-admin\fR). Useful for testing output and to see what data you can get -from your system. +\- Adds: PCI slots (\fB\-\-slots\fR); GPU advanced EDID data (\fB\-\-edid\fR); +Repos (\fB\-r\fR); Processes (\fB\-tcm\fR); triggers \fB\-a\fR admin data +option. This is all the available system data. .TP .B \-\-version\fR, \fB\-\-vf\fR @@ -1058,7 +1096,7 @@ other switches you use. .TP .B \-\-no\-host\fR Turns off hostname in System line. This is default when using \fB\-z\fR, -for anonymizing inxi output for posting on forums or IRC. Overrides +for anonymizing inxi report for posting on forums or IRC. Overrides configuration value (if set): \fBSHOW_HOST='true'\fR \- Same as: \fBSHOW_HOST='false'\fR @@ -1193,7 +1231,7 @@ Required for non\-screen \fB\-\-output\fR formats (json|xml). .TP .B \-\-separator\fR, \fB\-\-sep [character(s)]\fR -Change the default output key: value separator \fB:\fR to something else. Make +Change the default report key: value separator \fB:\fR to something else. Make permanent with configuration item \fBSEP2_CONSOLE\fR. .TP @@ -1219,9 +1257,9 @@ recommended for use with \fB\-Y\fR; Examples: .br -\fBinxi \-Fxx \-y 130\fR +\fBinxi \-exx \-y 130\fR .br -\fBinxi \-Fxxy\fR +\fBinxi \-exxy\fR .br \fBinxi \-bay1\fR @@ -1235,7 +1273,7 @@ Breaks output flow based on values provided. * \fB\-Y [1\-xxx]\fR \- set max output block height height in lines. .br * \fB\-Y \-1\fR \- Print out one primary data item block (like \fBCPU:\fR, -\fBSystem:\fR) at a time. Useful for very long outputs like \fB\-Fa\fR, +\fBSystem:\fR) at a time. Useful for very long outputs like \fB\-ea\fR, \fB\-v8\fR, etc. Not available for \fB\-h\fR. .br * \fB\-Y \-2\fR \- Do not disable output colors when redirected or piped to @@ -1445,7 +1483,7 @@ compiler versions. \- Adds current runlevel/target (not available with all init systems). \- Adds total packages discovered in system. See \fB\-xx\fR and \fB\-a\fR -for per package manager types output. Moves to \fBRepos\fR if \fB\-rx\fR. +for per package manager type reports. Moves to \fBRepos\fR if \fB\-rx\fR. If your package manager is not supported, please file an issue and we'll add it. That requires the full output of the query or method to discover all installed @@ -1531,7 +1569,7 @@ found for each distribution system base detection. .TP .B \-x \-t\fR (\fB\-\-processes\fR) -\- Adds memory use output to CPU (\fB\-xt c\fR), and CPU use to memory +\- Adds memory use report to CPU (\fB\-xt c\fR), and CPU use to memory (\fB\-xt m\fR). .TP @@ -1596,7 +1634,7 @@ applicable) for each device. .TP .B \-xx \-G\fR -Triggers much more complete Screen/Monitor output. +Triggers much more complete Screen/Monitor report. \fBX.org:\fR requires \fBxdpyinfo\fR or \fBxrandr\fR, and the advanced per monitor feature requires \fBxrandr\fR. @@ -1664,6 +1702,8 @@ not necessarily the same thing, and can vary widely. \fBDisplay\fR (Wayland), each of which can have one or more monitors. Normally a dual monitor setup is 2 monitors run by one Xorg Screen/Wayland Display. +\- \fBres:\fR is the current monitor mode, along with the frequency \fBhz:\fR. + \- \fBpos: [primary,]{position string|row\-col}\fR (X.org: requires \fBxrandr\fR; Wayland: requires \fBswaymsg\fR [sway], \fBwlr\-randr\fR [wlroots based compositors], \fBweston\-info\fR / \fBwayland\-info\fR [all]). Uses either @@ -1712,7 +1752,7 @@ present). \- Shows \fBPackages:\fR counts by discovered package manager types (\fBpm:\fR). In cases where only 1 pm had results, does not show total after \fBPackages:\fR. Does not show installed package managers with 0 packages. See \fB\-a\fR for full -output. Moves to \fBRepos\fR if \fB\-rxx\fR. +report. Moves to \fBRepos\fR if \fB\-rxx\fR. \- Adds parent program (or pty/tty) that started shell, if not IRC client. @@ -1727,7 +1767,7 @@ swap types (for \fB\-j\fR). \- Adds USB lanes. Uses tx (transmit) lane count for total unless rx and tx counts are different (eg: \fBlanes: rx: 2 tx: 4\fR). Linux only. -See \fB\-Ja\fR for sample output. +See \fB\-Ja\fR for sample report. .TP .B \-xx \-L\fR (\fB\-\-logical\fR) @@ -1878,7 +1918,8 @@ are spinning, no rpm data will show. size data requires \fBxdpyinfo\fR). This is the X.org Screen dimensions, NOT the Monitor size! -\- Adds to Monitors (if detected) frequency (\fBhz:\fR). +\- Expands monitor \fBres:\fR to current \fBmode:\fR, \fBhz:\fR, \fBscale:\fR, +and if scale != 1, scaled \fBto:\fR resolution. \- Adds to Monitors (if detected) size (\fBsize: 277x156mm (10.9x6.1")\fR). Note that this is the real physical monitor size, not the Xorg Screen/Wayland Display @@ -1891,8 +1932,6 @@ right. \- Adds to Monitors \fBserial:\fR number (if detected). -\- \fBWayland:\fR Adds to Monitors \fBscale:\fR (if detected). - \- For EGL, shows hardware based driver(s) (\fBhw:\fR), with the related hardware, like AMD or Intel. @@ -1994,7 +2033,7 @@ weather observation time (if available), sunset/sunrise (if available). .SH ADMIN EXTRA DATA OPTIONS These options are triggered with \fB\-\-admin\fR or \fB\-a\fR. Admin options -are advanced output options, and are more technical, and mostly of interest to +are advanced report options, and are more technical, and mostly of interest to system administrators or other machine admins. The \fB\-\-admin\fR option sets \fB\-xxx\fR, and only has to be used once. @@ -2351,67 +2390,83 @@ shown). \- Adds to Vulkan full device report, with full device names, ids, drivers, driver versions, surfaces. -X.org sample (with both \fBxdpyinfo\fR and \fBxrandr\fR data available): +\- Adds \fBInfo: Tools:\fR item. Tools are arranged into the following +categories: \fBapi:\fR (for EGL, OpenGL, Vulkan etc.), \fBde:\fR (specific to a +desktop environment), \fBgpu\fR (GPU monitoring and tweaking), \fBwl:\fR +(Wayland specific), \fBx11\fR (x11 specific). + +X.org sample (with both \fBxdpyinfo\fR and \fBxrandr\fR data available), one +scaled monitor: .nf \fBinxi \-aGz Graphics: - Device\-1: AMD Cedar [Radeon HD 5000/6000/7350/8350 Series] - vendor: XFX Pine driver: radeon v: kernel alternate: amdgpu - arch: TeraScale\-2 code: Evergreen process: TSMC 32\-40nm - built: 2009\-15 pcie: gen: 1 speed: 2.5 GT/s lanes: 16 link\-max: - gen: 2 speed: 5 GT/s ports: active: DVI\-I\-1,VGA\-1 empty: HDMI\-A\-1 - bus\-ID: 0a:00.0 chip\-ID: 1002:68f9 class\-ID: 0300 temp: 58.0 C - Display: x11 server: X.Org v: 1.21.1.7 with: Xwayland v: 22.1.9 - compositor: xfwm v: 4.18.0 driver: X: loaded: modesetting dri: r600 - gpu: radeon display\-ID: :0.0 screens: 1 - Screen\-1: 0 s\-res: 2560x1024 s\-dpi: 96 - s\-size: 677x270mm (26.65x10.63") s\-diag: 729mm (28.7") + Device\-1: Advanced Micro Devices [AMD/ATI] Cedar [Radeon HD + 5000/6000/7350/8350 Series] vendor: XFX Pine driver: radeon + v: kernel alternate: amdgpu arch: TeraScale\-2 code: Evergreen + process: TSMC 32\-40nm built: 2009\-15 pcie: gen: 1 speed: 2.5 GT/s + lanes: 16 link\-max: gen: 2 speed: 5 GT/s ports: + active: DVI\-I\-1,VGA\-1 empty: HDMI\-A\-1 bus\-ID: 0b:00.0 + chip\-ID: 1002:68f9 class\-ID: 0300 temp: 52.0 C + Display: x11 server: X.Org v: 21.1.14 with: Xwayland v: 24.1.3 + compositor: xfwm4 v: 4.18.0 driver: X: loaded: modesetting + dri: r600 gpu: radeon display\-ID: :0.0 screens: 1 + Screen\-1: 0 s\-res: 2432x1024 s\-dpi: 96 + s\-size: 641x270mm (25.24x10.63") s\-diag: 696mm (27.38") Monitor\-1: DVI\-I\-1 pos: primary,left model: Samsung SyncMaster - serial: H9NX842662 built: 2004 res: 1280x1024 hz: 60 dpi: 96 - gamma: 1.2 size: 338x270mm (13.31x10.63") diag: 433mm (17") - ratio: 5:4 modes: max: 1280x1024 min: 720x400 - Monitor\-2: VGA\-1 pos: right model: Dell 1908FP - serial: G434H87HRA2D built: 2008 res: 1280x1024 hz: 60 dpi: 86 - gamma: 1.4 size: 376x301mm (14.8x11.85") diag: 482mm (19") - ratio: 5:4 modes: max: 1280x1024 min: 720x400 + serial: <filter> built: 2004 res: mode: 1280x1024 hz: 60 + scale: 100% (1) gamma: 1.2 size: 338x270mm (13.31x10.63") + diag: 433mm (17") ratio: 5:4 modes: max: 1280x1024 min: 720x400 + Monitor\-2: VGA\-1 pos: right model: Dell 1908FP serial: <filter> + built: 2008 res: mode: 1280x1024 hz: 60 scale: 111% (0.9) + to: 1152x922 dpi: 86 gamma: 1.4 size: 376x301mm (14.8x11.85") + diag: 482mm (19") ratio: 5:4 modes: max: 1280x1024 min: 720x400 API: EGL v: 1.5 hw: drv: amd r600 platforms: device: 0 drv: r600 - device: 1 drv: swrast gbm: egl: 1.4 drv: kms_swrast surfaceless: - drv: r600 x11: drv: r600 inactive: wayland - API: OpenGL v: 4.5 vendor: x.org mesa v: 22.3.6 glx\-v: 1.4 - es\-v: 3.1 direct\-render: yes renderer: AMD CEDAR (DRM 2.50.0 / - 6.4.3\-1\-liquorix\-amd64 LLVM 15.0.6) device\-ID: 1002:68f9 + device: 1 drv: swrast gbm: drv: kms_swrast surfaceless: drv: r600 + x11: drv: r600 inactive: wayland + API: OpenGL v: 4.5 vendor: mesa v: 24.2.4\-1 glx\-v: 1.4 + direct\-render: yes renderer: AMD CEDAR (DRM 2.50.0 / + 6.11.5\-1\-liquorix\-amd64 LLVM 19.1.1) device\-ID: 1002:68f9 memory: 1000 MiB unified: no - API: Vulkan v: 1.3.250 layers: 3 device: 0 type: cpu - name: llvmpipe (LLVM 15.0.6 256 bits) driver: mesa llvmpipe - v: 22.3.6 (LLVM 15.0.6) device\-ID: 10005:0000 surfaces: xcb,xlib\fR + API: Vulkan v: 1.3.296 layers: 3 device: 0 type: cpu + name: llvmpipe (LLVM 19.1.1 256 bits) driver: N/A + device\-ID: 10005:0000 surfaces: xcb,xlib + Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo + de: xfce4\-display\-settings gpu: radeontop x11: xdriinfo, xdpyinfo, + xprop, xrandr\fR .fi -Wayland sample, with Sway/swaymsg: +Wayland sample, with Sway/swaymsg, scaled monitor: .nf \fB inxi \-aGz -Graphics: - Device\-1: AMD Cedar [Radeon HD 5000/6000/7350/8350 Series] vendor: XFX Pine - driver: radeon v: kernel alternate: amdgpu arch: TeraScale 2 - process: TSMC 32\-40nm pcie: gen: 1 speed: 2.5 GT/s lanes: 16 link\-max: - gen: 2 speed: 5 GT/s ports: active: DVI\-I\-1,VGA\-1 empty: HDMI\-A\-1 - bus\-ID: 0a:00.0 chip\-ID: 1002:68f9 class\-ID: 0300 - Display: wayland server: Xwayland v: 21.1.4 compositor: sway v: 1.6.1 - driver: dri: r600 gpu: radeon d\-rect: 2560x1024 - Monitor-1: DVI\-I\-1 pos: right model: SyncMaster serial: <filter> - built: 2004 res: 1280x1024 hz: 60 dpi: 96 gamma: 1.2 - size: 340x270mm (13.4x10.6") diag: 434mm (17.1") ratio: 5:4 modes: - max: 1280x1024 min: 720x400 - Monitor\-2: VGA-1 pos: primary,left model: DELL 1908FP serial: <filter> - res: 1280x1024 hz: 60 gamma: 1.4 dpi: 86 gamma: 1.4 - size: 380x300mm (15.0x11.8") diag: 484mm (19.1") ratio: 5:4 modes: - max: 1280x1024 min: 720x400 - API: OpenGL v: 4.6 compat\-v: 4.5 vendor: x.org mesa v: 22.3.6 - glx\-v: 1.4 direct\-render: yes renderer: AMD CEDAR (DRM 2.50.0 / - 6.4.3\-1\-liquorix\-amd64 LLVM 15.0.6) device\-ID: 1002:68f9 - API: EGL v: 1.5 hw: drv: amd r600 platforms: device: 0 - drv: r600 device: 1 drv: swrast surfaceless: drv: r600 wayland: - drv: r600 inactive: gbm,x11 +Graphics: + Device\-1: Intel 2nd Generation Core Processor Family Integrated + Graphics vendor: Lenovo driver: i915 v: kernel arch: Gen\-6 + code: Sandybridge process: Intel 32nm built: 2011 ports: + active: LVDS\-1 empty: DP\-1, DP\-2, DP\-3, HDMI\-A\-1, HDMI\-A\-2, + HDMI\-A\-3, VGA\-1 bus\-ID: 00:02.0 chip\-ID: 8086:0116 class\-ID: 0300 + Device\-2: Chicony integrated camera driver: uvcvideo type: USB + rev: 2.0 speed: 480 Mb/s lanes: 1 mode: 2.0 bus\-ID: 1\-1.6:4 + chip\-ID: 04f2:b221 class\-ID: 0e02 + Display: wayland server: X.org v: 1.21.1.13 compositor: Sway + v: 1.9 driver: X: loaded: modesetting unloaded: fbdev,vesa + dri: crocus gpu: i915 display\-ID: 1 + Monitor\-1: LVDS\-1 model: AU Optronics 0x313c built: 2010 res: + mode: 1366x768 hz: 60 scale: 110% (1.1) to: 1241x698 dpi: 112 + gamma: 1.2 size: 309x173mm (12.17x6.81") diag: 354mm (13.9") + ratio: 16:9 modes: 1366x768 + API: EGL v: 1.5 hw: drv: intel crocus platforms: device: 0 + drv: crocus device: 1 drv: swrast gbm: drv: crocus surfaceless: + drv: crocus wayland: drv: crocus inactive: x11 + API: OpenGL v: 4.5 compat\-v: 3.3 vendor: mesa v: 24.2.4\-1 + note: incomplete (EGL sourced) renderer: Mesa Intel HD Graphics + 3000 (SNB GT2), llvmpipe (LLVM 19.1.1 256 bits) + API: Vulkan v: 1.3.290 layers: 3 device: 0 type: cpu + name: llvmpipe (LLVM 19.1.1 256 bits) driver: N/A + device\-ID: 10005:0000 surfaces: wayland + Info: Tools: api: eglinfo, glxinfo, vulkaninfo + de: xfce4\-display\-settings wl: swaymsg, wayland\-info, wlr\-randr + x11: xdriinfo, xdpyinfo, xprop, xrandr\fR .fi .TP @@ -2455,11 +2510,11 @@ For \fB\-P\fR per swap physical partition: \fBswappiness: 60 (default) cache\-pressure: 90 (default 100)\fR -For \fB\-j\fR row 1 output: +For \fB\-j\fR row 1 report: \fBKernel: swappiness: 60 (default) cache\-pressure: 90 (default 100)\fR -\- Adds zswap data for row 1 output: +\- Adds zswap data for row 1 report: \fBzswap: [yes/no] compressor: [type] max-pool: xx%\fR @@ -2628,13 +2683,12 @@ basically forces the downloader selection to use \fBPerl 5.x\fR may help bypass issues with downloading. .TP -.B \-\-bt\-tool [bt\-adapter|btmgmt|hciconfig|rfkill]\fR +.B \-\-bt\-tool [bluetoothctl|bt\-adapter|btmgmt|hciconfig|rfkill]\fR See \fB\-\-force [tool name]\fR. Used to set \fB\-E\fR report tool. .TP .B \-\-dig\fR -Temporary override of \fBNO_DIG\fR configuration item. Only use to test w/wo -dig. Restores default behavior for WAN IP, which is use dig if present. +Shortcut. See \fB\-\-force dig\fR. .TP .B \-\-display [:<integer>]\fR @@ -2662,37 +2716,114 @@ Shortcut. See \fB\-\-force dmidecode\fR. Force inxi to use Curl, Fetch, Perl, or Wget for downloads. .TP +.B \-\-egl\fR +Shortcut. See \fB\-\-force egl\fR. + +.TP .B \-\-force [option(s)]\fR Various force options to allow users to override defaults. Values can be given as a comma separated list: -\fBinxi \-MJ --force dmidecode,lsusb\fR +\fBinxi \-MJ \-\-force dmidecode,lsusb\fR + +\- \fBbluetoothctl\fR \- Force use of bluetoothctl\fR in \fB\-E\fR. -\- \fBbt\-adapter\fR \- Force use of bt\-adapter tool in \fB\-E\fR. +\- \fBbt\-adapter\fR \- Force use of \fBbt\-adapter\fR tool in \fB\-E\fR. -\- \fBbtmgmt\fR \- Force use of btmgmt tool in \fB\-E\fR. +\- \fBbtmgmt\fR \- Force use of \fBbtmgmt\fR tool in \fB\-E\fR. -\- \fBcolors\fR \- Same as \fB\-Y \-2\fR . Do not remove colors from piped or -redirected output. +\- \fBcolors\fR \- Do not remove colors from piped or redirected output. Same as +\fB\-Y \-2\fR. + +\- \fBcpuinfo\fR \- Force use of \fBcpuinfo\fR over sys for cpu data in +\fB\-C\fR. + +\- \fBdig\fR \- Temporary override of \fBNO_DIG\fR configuration item. Only use +to test w/wo dig. Restores default behavior for WAN IP, which is use dig if +present. \- \fBdmidecode\fR \- Force use of \fBdmidecode\fR. This will override \fB/sys\fR data in some lines, e.g. \fB\-M\fR or \fB\-B\fR. +\- \fBegl\fR \- Force use of \fBEGL\fR graphics API even if internal rules +block it from running due to possible hanging. This is the case sometimes with +Intel 32 bit Pentium 4 era Gen2 and older GPUs, but it's not consistent. + +\- \fBhciconfig\fR \- Force use of \fBhciconfig\fR tool in \fB\-E\fR. + \- \fBhddtemp\fR \- Force use of hddtemp instead of /sys temp data for disks. +\- \fBhtml\-wan\fR \- Temporary override of \fBNO_HTML_WAN\fR configuration +item. Only use to test w/wo HTML downloaders for WAN IP. Restores default +behavior for WAN IP, which is use HTML downloader if present and if dig failed. + \- \fBifconfig\fR \- Force use of IF tool ifconfig for \fB\-i\fR. \- \fBip\fR \- Force use of IF ip tool for \fB\-i\fR (default). +\- \fBkscreen\fR \- Wayland: Force \fB\-G\fR monitor data source +\fBkscreen-console\fR. + \- \fBlsusb\fR \- Forces the USB data generator to use \fBlsusb\fR as data source (default). Overrides \fBUSB_SYS\fR in user configuration file(s). +\- \fBman\fR \- Force update / install of man page with \fB\-U\fR if \fBpinxi\fR +or using \fB\-U 3\fR dev branch. (Only active if \fB\-U\fR is is not disabled by +maintainers). Default is to install always for \fBinxi\fR, and not for +\fBpinxi\fR. + +\- \fBno\-dig\fR \- Overrides default use of \fBdig\fR to get WAN IP address. +Allows use of normal downloader tool to get IP addresses. Only use if dig is +failing, since dig is much faster and more reliable in general than other +methods. + +\- \fBno\-doas\fR \- Skips the use of doas to run certain internal features +(like \fBhddtemp\fR, \fBfile\fR) with doas. Not related to running inxi itself +with doas/sudo or super user. Some systems will register errors which will then +trigger admin emails in such cases, so if you want to disable regular user use +of doas (which requires configuration to setup anyway for these options) just +use this option, or \fBNO_DOAS\fR configuration item. See \fB\-\-no\-sudo\fR if +you need to disable both types. + +\- \fBno\-egl\fR \- Skip eglinfo sourced EGL graphics API in \fB\-G\fR. Use if +Graphics hangs or running a debugger data set which hangs due to eglinfo bug ( +only found on ancient Pentium 4 w/ Gen 2 GPUs). + +\- \fBno\-graphics\-api\fR \- Skip graphics API in \fB\-G\fR. + +\- \fBno\-html\-wan\fR \- Overrides use of HTML downloaders to get WAN IP +address. Use either only dig, or do not get wan IP. Only use if dig is failing, +and the HTML downloaders are taking too long, or are hanging or failing. + +Make permanent with \fBNO_HTML_WAN='true'\fR + +\- \fBno\-man\fR \- Disables man page install with \fB\-U\fR for master and +active development branches. (Only active if \fB\-U\fR is is not disabled by +maintainers). No man install is default for \fBpinxi\fR. Man install is default +for \fBinxi\fR. + +\- \fBno\-opengl\fR \- Skip glxinfo sourced OpenGL graphics API in \fB\-G\fR. + +\- \fBno\-ssl\fR \- Skip SSL certificate checks for all downloader actions +(\fB\-U\fR, \fB\-w\fR, \fB\-i\fR). Use if your system does not have current SSL +certificate lists, or if you have problems making a connection for any reason. +Works with \fBWget\fR, \fBCurl\fR, \fBPerl HTTP::Tiny\fR and \fBFetch\fR. + +\- \fBno\-sudo \fR \- Skips the use of sudo to run certain internal features +(like \fBhddtemp\fR, \fBfile\fR) with sudo. Not related to running inxi itself +with sudo or superuser. Some systems will register errors which will then +trigger admin emails in such cases, so if you want to disable regular user use +of sudo (which requires configuration to setup anyway for these options) just +use this option, or \fBNO_SUDO\fR configuration item. + +\- \fBno\-vulkan\fR \- Skip vulkaninfo sourced Vulkan graphics API in \fB\-G\fR. + \- \fBrfkill\fR \- Force use of rfkill tool in \fB\-E\fR. \fBrfkill\fR does not support mac address data. -\- \fBrpm\fR, \fBpkg\fR \- Force override of disabled rpm package counts on -primarily rpm run systems due to unacceptably slow execution times for this -command: +\- \fBrpm\fR, \fBpkg\fR \- Override disabled rpm package counts on primarily rpm +run systems due to unacceptably slow execution times for this command on some +systems: .nf \fBrpm \-qa \-\-nodigest \-\-nosignature\fR @@ -2716,6 +2847,8 @@ lm\-sensors data was found anyway, but if \fBlm\-sensors\fR was installed, and returned no data, it's most likely if not nearly certain that \fB/sys\fR will also not return data. +\- \fBswaymsg\fR \- Wayland: Force \fB\-G\fR monitor data source \fBswaymsg\fR. + \- \fBudevadm\fR \- Forces use of udevadm as data source (currently \fB\-m\fR RAM data). @@ -2724,8 +2857,14 @@ source instead of \fBlsusb\fR (Linux only). \- \fBvmstat\fR \- Forces use of vmstat for memory data. -\- \fBwayland\fR \- Forces use of Wayland, disables x tools glxinfo, xrandr, -xdpyinfo. +\- \fBwayland\fR \- Wayland: Force use of Wayland data sources, disables x tools +glxinfo, xrandr, xdpyinfo. + +\- \fBwl\-info\fR \- Wayland: Force \fB\-G\fR monitor data source +\fBwayland\-info\fR or \fBweston\-info\fR. + +\- \fBwlr\-randr\fR \- Wayland: Force \fB\-G\fR monitor data source +\fBwlr\-randr\fR. \- \fBwmctrl\fR \- Force \fBSystem\fR item \fBwm\fR to use \fBwmctrl\fR as data source, override default \fBps\fR source. @@ -2736,9 +2875,7 @@ Shortcut. See \fB\-\-force hddtemp\fR. .TP .B \-\-html\-wan\fR -Temporary override of \fBNO_HTML_WAN\fR configuration item. Only use to test -w/wo HTML downloaders for WAN IP. Restores default behavior for WAN IP, which is -use HTML downloader if present and if dig failed. +Shortcut. See \fB\-\-force \-\-html\-wan\fR. .TP .B \-\-ifconfig\fR @@ -2746,37 +2883,31 @@ Shortcut. See \fB\-\-force ifconfig\fR. .TP .B \-\-man\fR -Updates / installs man page with \fB\-U\fR if \fBpinxi\fR or using \fB\-U 3\fR -dev branch. (Only active if \fB\-U\fR is is not disabled by maintainers). +Shortcut. See \fB\-\-force man\fR. .TP .B \-\-no\-dig\fR -Overrides default use of \fBdig\fR to get WAN IP address. Allows use of normal -downloader tool to get IP addresses. Only use if dig is failing, since dig is -much faster and more reliable in general than other methods. +Shortcut. See \fB\-\-force no\-dig\fR. .TP .B \-\-no\-doas\fR -Skips the use of doas to run certain internal features (like \fBhddtemp\fR, -\fBfile\fR) with doas. Not related to running inxi itself with doas/sudo or -super user. Some systems will register errors which will then trigger admin -emails in such cases, so if you want to disable regular user use of doas -(which requires configuration to setup anyway for these options) just use -this option, or \fBNO_DOAS\fR configuration item. See \fB\-\-no\-sudo\fR if -you need to disable both types. +Shortcut. See \fB\-\-force no\-doas\fR. .TP -.B \-\-no\-html-wan\fR -Overrides use of HTML downloaders to get WAN IP address. Use either only dig, -or do not get wan IP. Only use if dig is failing, and the HTML downloaders are -taking too long, or are hanging or failing. +.B \-\-no\-egl\fR +Shortcut. See \fB\-\-force no\-egl\fR. -Make permanent with \fBNO_HTML_WAN='true'\fR +.TP +.B \-\-no\-html-wan\fR +Shortcut. See \fB\-\-force no\-html-wan\fR. .TP .B \-\-no\-man\fR -Disables man page install with \fB\-U\fR for master and active development -branches. (Only active if \fB\-U\fR is is not disabled by maintainers). +Shortcut. See \fB\-\-force no\-man\fR. + +.TP +.B \-\-no\-opengl\fR +Shortcut. See \fB\-\-force no\-opengl\fR. .TP .B \-\-no\-sensor\-force\fR @@ -2785,19 +2916,11 @@ behavior. .TP .B \-\-no\-ssl\fR -Skip SSL certificate checks for all downloader actions (\fB\-U\fR, \fB\-w\fR, -\fB\-i\fR). Use if your system does not have current SSL certificate lists, or -if you have problems making a connection for any reason. Works with \fBWget\fR, -\fBCurl\fR, \fBPerl HTTP::Tiny\fR and \fBFetch\fR. +Shortcut. See \fB\-\-force no\-ssl\fR. .TP .B \-\-no\-sudo\fR -Skips the use of sudo to run certain internal features (like \fBhddtemp\fR, -\fBfile\fR) with sudo. Not related to running inxi itself with sudo or -superuser. Some systems will register errors which will then trigger admin -emails in such cases, so if you want to disable regular user use of sudo (which -requires configuration to setup anyway for these options) just use this option, -or \fBNO_SUDO\fR configuration item. +Shortcut. See \fB\-\-force no\-sudo\fR. .TP .B \-\-pm\-type [package manager name]\fR @@ -2829,11 +2952,11 @@ Shortcut. See \fB\-\-force sensors\-sys\fR .TP .B \-\-sensors\-use\fR -Linux only. Use only the (comma separated) sensor arrays for \fB\-s\fR output. +Linux only. Use only the (comma separated) sensor arrays for \fB\-s\fR report. Make permanent with \fBSENSORS_USE\fR configuration item. Sensor array ID value must be the exact value shown in lm\-sensors sensors output (lm-sensors only) or use \fB\-s \-\-dbg 18\fR ('main' =>.. section) to see the sensor ID strings used -internally. If you only want to exclude one (or more) sensors from the output, +internally. If you only want to exclude one (or more) sensors from the report, use \fB\-\-sensors\-exclude\fR. Can be useful if the default sensor data used by inxi is not from the right @@ -2943,7 +3066,7 @@ specific specialized debugging options. There are a lot. .TP .B \-\-debug 20\fR -Creates a tar.gz file of system data and collects the inxi output +Creates a tar.gz file of system data and collects the inxi report in a file. * tree traversal data file(s) read from \fB/proc\fR and \fB/sys\fR, and @@ -3019,7 +3142,7 @@ Use this to locate file that /sys debugger hangs on. .SH SUPPORTED IRC CLIENTS BitchX, Gaim/Pidgin, ircII, Irssi, Konversation, Kopete, KSirc, KVIrc, Weechat, and Xchat. Plus any others that are capable of displaying either -built\-in or external script output. +built\-in or external program output. .SH RUNNING IN IRC CLIENT To trigger inxi output in your IRC client, pick the appropriate method from the @@ -3035,7 +3158,7 @@ IRC client. .B /cmd inxi \fR[\fBoptions\fR] -To run inxi in Konversation as a native script if your distribution or inxi +To run inxi in Konversation as a native program if your distribution or inxi package hasn't already done this for you, create this symbolic link: KDE 4: @@ -3169,7 +3292,7 @@ HTML downloaders are hanging. \fBNO_SUDO\fR Set to \fB1\fR or \fBtrue\fR to disable internal use of \fBsudo\fR. -\fBPARTITION_SORT\fR Overrides default partition output sort. See +\fBPARTITION_SORT\fR Overrides default partition report sort. See \fB\-\-partition\-sort\fR for options. \fBPS_COUNT\fR The default number of items showing per \fB\-t\fR type, \fBm\fR @@ -3179,7 +3302,7 @@ or \fBc\fR. Default is 5. which is the CPU), forces sensors to use either value 1 or 2 as CPU temperature. See the above configuration page on smxi.org for full info. -\fBSENSORS_EXCLUDE\fR Exclude supplied sensor array[s] from sensor output. +\fBSENSORS_EXCLUDE\fR Exclude supplied sensor array[s] from sensor report. Override with \fB\-\-sensors\-default\fR. See \fB\-\-sensors\-exclude\fR. \fBSENSORS_USE\fR Use only supplied sensor array[s]. Override with @@ -3281,7 +3404,7 @@ is a fork of \fBlocsmif\fR's very clever \fBinfobash\fR script. Original infobash author and copyright holder: Copyright (C) 2005\-2007 Michiel de Boer aka locsmif -inxi version: Copyright (C) 2008\-2023 Harald Hope +inxi version: Copyright (C) 2008\-2025 Harald Hope This man page was originally created by Gordon Spencer (aka aus9) and is maintained by Harald Hope (aka h2 or TechAdmin). @@ -3322,7 +3445,7 @@ ArcherSeven (Max), Brett Bohnenkamper (aka KittyKatt), and Iotaka, who always manage to find the weirdest or most extreme hardware and setups that help make inxi much more robust. -For the vastly underrated skill of output error/glitch catching, Pete Haddow. +For the vastly underrated skill of report error/glitch catching, Pete Haddow. His patience and focus in going through inxi repeatedly to find errors and inconsistencies is much appreciated. diff --git a/inxi.changelog b/inxi.changelog index 9022a79..33a352a 100644 --- a/inxi.changelog +++ b/inxi.changelog @@ -1,4 +1,360 @@ ================================================================================ +Version: 3.3.37 +Patch: 00 +Date: 2025-01-06 +-------------------------------------------------------------------------------- +RELEASE NOTES: +-------------------------------------------------------------------------------- + +* This release is highlighted by a long overdue rewrite of the -b, -e, and -v[x] +man page and help options. And changing the long incorrect -F/--full to +-e/--expanded, which is more accurate. -e expands -b, that is, but is not full. +-v8 is full. -F/--full will keep working until this inxi is in the stable repos +of the major distros. + +That change turned out to be surprisingly hard, but those options are now much +more clear and well defined. Some of the actions have not been valid for many +years, but escaped notice. + +This also makes the report generator options -b, -e, and -v [x] all make sense, +and easily reference each other in the docs. And keeps them consistent by them +all be lower case options. Upper case is intended mainly for feature item +triggers. + +* Packagers: I reluctantly created and added the AppStream XML file: +inxi.metainfo.xml +so that GUI package managers that can't get package data from the packages can +manage to show inxi. Do I care? No, but sometimes not everything in inxi is +stuff I care about. + +https://freedesktop.org/software/appstream/docs/chap-Metadata.html +"Upstream projects can ship one or more metainfo files in +/usr/share/metainfo/%{id}.metainfo.xml, where id is a unique identifier of this +specific component." + +The ID must be exactly the same as the Application-ID: org.smxi.inxi (but many +of the file names I checked don't, so that could just be specific to certain +package collector tools like flatpak). + +Translation: the inxi.metainfo.xml file must be stored here: +/usr/share/metainfo/org.smxi.inxi.metainfo.xml + +Note that these are not enforced standards, and a quick look in that directory +shows many don't follow the file naming convention. So do what you want. And +most applications do not ship this file, for good reason: it's a waste of time. + +* Another longstanding mrmazda graphics enhancement request, handling scaling +per monitor. Adding this exposed some failures in wayland-info, and false +assumptions in xrandr parsing. Now with -Gxxx shows current mode, scaling, and +if scaling not 1, the scaled monitor display size. + +-------------------------------------------------------------------------------- +SPECIAL THANKS: + +1. Codeberg issue #311 poster jkirk for doggedly noting that the use of the word +'full' as an option and man/help term for -F/--full was confusing and wrong. +It's other eyes that can see what my eyes are too used to, and have ignored for +years. See Changes 1 for -e/--expanded solution. + +2. mrmazda, for his continuing thoughts and suggestions to make Graphics and +System better, and more helpful to support people such as him. Also for finding +that obscure and arcane eglinfo hang issue + +-------------------------------------------------------------------------------- +KNOWN ISSUES: + +1a. GRAPHICS: StarFive VisionFive 2 apparently uses the Imagination BXE GPU, +maybe img-bxe, but that does not show up in any of the pci or device data for +the soc. Result is -G and -A show no device even though there is an HDMI GPU and +MIPI graphics. This may show in a future kernel however. + +1b. GRAPHICS: Very old Intel Pentium 4 and gen-2 GPU system intermittently fails +to fully execute eglinfo. Since this combination is largely useless, inxi now +detects those Gen 2 and earlier Intel GPU product IDs and skips running eglinfo +and shows message. + +2. SYSTEM: KernelCompiler: the tendency to add in more gibberish nonsense to the +old and clean and simple /proc/version continues unabated, almost like a +competition between distros who can make the silliest strings. Last year's +winner if I remember right was Ubuntu, but Redhat is not to be outdone with +their 2024 contribution! + +3. DISTRO PACKAGING: thanks mrmazda for spotting what appears to be an OpenSuse +packaging bug, which inxi can't fix or work around. It's likely this is also in +RHEL and related, but I don't know: +* The core modules package which has been incorrectly split out from Perl for +File::Find spits out an 'uninitalized value $space in concatenation in pinxi +line 1620 is actually File::Find->import action exposing the undefined value. +This does not happen in current Debian Testing, or any other distro I've tested +on. +* There may be a second issue with eglinfo, but there is simply not enough data +to pinpoint causes. + +-------------------------------------------------------------------------------- +BUGS: + +1. PackageData: didn't have option for OpenBSD pkg_info, which made inxi skip +that package counter, and show no packages. Ooops. Switched to use -a, for all +non system package. Could use -A to include system packages,but I think pkg_add +implies you added them outside of core base. + +2a. GRAPHICS: not so much a bug as a syntax change in wayland-info led to some +data not being grabbed, but it would not have worked anyway due to more wrong +assumptions. xrandr also had an assumption about what the 'connected' value was +that was not right. + +2b. GraphicsItem::wlinfo_data(): unset monitor data in active, not fake data, +logic, which resulted in removing the EDID data. Ooops. + +-------------------------------------------------------------------------------- +FIXES: + +1. SYSTEM: KernelCompiler: issue 310 adds another convoluted /proc/version +syntax, these seem to be coming along every year now. Let's hope the kernel guys +create a /sys kernel compiler directory with key value pairs for this absurd +jumble of data that is being tossed into /proc/version string. + +Note that these types of random new strings will never be called bugs when they +fail, but they do require fixing, at least until we get a better data source for +the kernel compiler data. + +2. OPTIONS: See Changes 1. Changed -F/--full to -e/--expanded to more accurately +reflect what -e actually does. -F/--full will work for a long time however since +many online inxi dots suggest that option. First step will be deprecation +notice, then eventually removal. But not for a few years, until this inxi is in +stable repo pools. + +3a. GRAPHICS: GraphicsItem::wlinfo_data() had a subtle failure because +wayland-info used random numbers of spaces in one key string. Amusingly, the +comments above that said to expect the data to alter, which it did. This caused +the resolution to show the logical, scaled, not the actual physical, as +intended. + +3b. GRAPHICS: GraphicsItem::xrandr_data() had a false assumption about what the +dimensions following 'connected' were. Those turned out to the logical monitor +size, not the modes. This was not obvious until scaling became used more. Now +uses the actual current mode from the mode list, which is what we want, and +uses the logical size to create the scaling data. + +3c. GRAPHICS: GraphicsItem::swaymsg_data(): fixed hz for non json version, that +would never work due to logic vs data error. + +3d. GRAPHICS: EGL API tool eglinfo hangs on some very old Intel GPUs, so added +a blacklist which skips running tool unless --egl flag is also used to force it. + +4. UPDATER: Fixed error which made --no-man for -U on inxi not work. + +-------------------------------------------------------------------------------- +ENHANCEMENTS: + +1a. GRAPHICS: X Driver detections. Added, per: +https://lwn.net/Articles/558104/ +Some more possible fb and drm drivers: vesafb, efifb, simplefb, and simpledrm. + +1b. GRAPHICS: rolled out first attempt to have real scaling data per monitor. +This uses the logical size, aka, the scaled size, and the actual active mode +resolution, to generate the scaling factor. + +There had been a weak effort for wayland to do this, but the way wayland does +scaling is weird, so it's better to show the actual factor. I don't know the +status of the wayland scaling issues, but they used a real convoluted hack of +wayland only doing integer scaling, which forced compositors to up the integer +then divide it by something to get the desired fractional scaling. So that data +in inxi had always been wrong, though it's still being captured and stored +internally in case I can ever think of something useful to use it for. + +If a positive scaling is calculated with logical and physical, -Gxxx will show +that information. If scaling != 1, also showed scaled dimensions. + +For scaled (wayland): +res: + mode: 1680x1050 + scale: 125% (1.25) + to: 1344x840 +hz: 60 + +For scaled (xrandr): +res: + mode: 1680x1050 + scale: 125% (0.8) + to: 1344x840 +hz: 60 + +For scaling == 1: +res: + mode: 1680x1050 + scale: 100% (1) +hz: 60 + +If no scaling data found, or if less than -Gxxx: + +res: 1680x1050 + +As far as I can tell, x11 Screen size is always scaled size. + +1c. GRAPHICS: -Ga now adds an Info: Tools: line, similar to what -n, -S, -I have +for services and tools. Shows detected (mostly) display control/info command +line tools from the following categories: +* api +* de (desktop environment) +* gpu +* wl (wayland) +* x11 + +1d. GRAPHICS: updated amd, intel, nvidia ids. + +2. SYSTEM: added hypridle to locker list, not sure how I missed that one. + +3. INFO: Added conemu, contour, dolphin, ghostty, mintty, phyxis, rio, warp to +start client white list. These are all terminals except dolphin, which is like +kate, has the embedded kde terminal. + +4. DRIVES: A few new disk vendors and IDs. Surprisingly few actually. + +5. CPU: A few new AMD cpu model IDs. + +-------------------------------------------------------------------------------- +CHANGES: + +1a. MAN/OPTIONS: going with 1b, changed -F to -e. -F will keep on working for a +long time, but the report shortcuts -b and -v are already lower case, so no +reason to continue with the use of the legacy -F for full when it hasn't been +full for ages. Also, it's nice to be consistent and keep all these lower case. + +1b. MAN/OPTIONS: removed reference to --full/-F for -e, though it will of course +keep working. Technically --full should be a synonym for -v8, since that's the +full system report. After deprecating -F/--full on a future release, it will be +removed since it's not accurate, and can confuse people. But that will be in the +distant future given how many resources suggest -F, or, shudder, --full. + +This came about because a long time ago, -F actually did trip all the upper case +options, and only upper case. That however stopped being the case probably 10 +or more years ago, but the old full connotation for -F remained, and I foolishly +maintained it when I did the perl inxi rewrite. That would have been the time to +change it, but I was busy with the rewrite and it didn't register enough. + +2a. GRAPHICS: if -xxx and monitor scaling detectable shows if not scaling 1: + res: mode: widthxheight scale: 80% (0.8) to: widthxheight +If scaling 1, just shows: + res: mode: widthxheight scale: 100% (1) + +So far scaling can only be detected with xrandr, swaymsg, wayland-info, +wlr-randr, and maybe weston-info. This translates the real terms used internally +by x11 and wayland. + +This is a change from res: widthxheight. + +2b. GRAPHICS: To show hz, now shows with -Gxx, not -Gxxx, it never made sense to +treat the resolution and frequency as different verbosity levels. + +2c. GRAPHICS: For GPU arch: data, I stopped trying to use the convoluted post +Intel Gen11 architecture, and switched to the basic less granular arch that +Intel's own product ID docs use. Like Xe, Xe2, Xee-LPG, Xe-HPC, Xe-HPG. + +-------------------------------------------------------------------------------- +DOCUMENTATION: + +1a. MAN/OPTIONS: changed -F/--full to -e/--expanded. And changed wording, +removed Full, which was wrong, it's not full. It used to be a long time ago, but +hasn't been for a long time, which caused confusion. -F/--full will still work, +but will not be shown anymore as the first step towards deprecation then +removal. + +Also added deprecated pointer to -e/--expanded for -F/--full so users can find +that easily. + +Also changed -b to reference -e for expanded output, and -e to point to -b for +basic output. -b and -e are basically related, which was not obvious before. +-e for example expands the minimalist CPU line of -b to the full -C CPU line, +and expands block devices Drives to -D and -P. And expands multimedia from -G to +-G and -A. And expands -b's -N to -n. + +1b. MAN/OPTIONS: Refactored -b, -e, and -v completely. There were some legacy +items in -v that were not applicable anymore, or just plain wrong. It might be +worth checking to see if the simple forms of -d still are in the code. The -h +also had for -v 2 short RAID form, but I don't think that ever existed. + +These are all now much more readable and clear, and list items in the order they +appear in the output as they are added. + +Also, -b and -e now point to each much more clearly, and -e notes where the +items have been expanded from -b. + +-b, -e, and -v are also now the same format and structure in man and options. + +1c. MAN/OPTIONS: Going along with the other 1 changes, I replaced the word +'output' in man and help where it refers to a report. That word was being +overused to refer to 3 different things. Now reports are reports, output is +output. + +1d. MAN/OPTIONS: Updated -G items for resolution changes. + +1e. MAN/OPTIONS: Added -Ga Info: Tools: feature. + +1f. MAN/OPTIONS: Added more missing force items. Fully redid these to make them +complete, which went along with making the internal use of them more consistent. + +2. DATA: Added nice wayland-info sample. + +3a. DOCS: docs/inxi-graphics.txt: added section for resolution/modes/scaling +because its' confusing and hard to explain. + +3b. DOCS: docs/inxi-graphics.txt: added DISPLAY TOOLS section to docuement the +various tools I found for the new -Ga Info: Tools feature. + +-------------------------------------------------------------------------------- +CODE: + +1. OPTIONS: There's some legacy use of $show{'optical-basic'} and +$show{'raid-basic'} which the man/options refactor exposed. Neither actually +does anything anymore. I may check legacy binxi to see if I can find what they +used to do. + +-b/-v2 trip $show{'raid-basic'}, and -v5 tripped $show{'optical-basic'}. + +2. Added basic inxi.metainfo.xml to close issue #312. I was 99% certain that +when I told the issue poster he needed to do the research and work and provide +the xml required (because I don't care) that he would not do it. And he did not +let me down, as expected, he didn't do it. It's sad when things are that +predictable. So I did the research for the thing I don't care about, for gui +software installers I never use, and which have nothing to do with inxi. + +3a. GRAPHICS: corrected false assumptions about what monitor resolution vs +mode values are, which also exposed other bugs and errors in parsing for both +x11 and wayland. + +3b. GRAPHICS: added --force swaymsg, wl-info, wlr-randr switches, to allow for +testing each item, or for using fake data for one of them. + +3c. GRAPHICS: Rearranged some subs, and added better section comment headers +to make the logic blocks more obvious. Graphics, like CPU, is very long. + +3d. GRAPHICS: Added --force no-egl, no-opengl, no-graphics-api, no-vulkan +switches. We've found some legacy systems where eglinfo hangs. + +4. main::clean_unset(): added null to cleaner. + +5. DEBUG: changed minimum width for --debug-y to 50, from 80. + +6a. TOOLS: pinxi/tools/gpu_raw.pl, gpu_ids.pl: Changed the Intel architecture +names to what they use in their docs, that gives up on trying to assign them +generation numbers after 11. + +6b. TOOLS: pinxi/tools/gpu_raw.pl: changed to aadjust to possible extra columns +in the gpu.intel.com data source, they have added 1 column to most rows, and 2 +to some, so now it just looks for anything after 5 with .*. + +7. INTERNAL: switched $use{'no-ssl'} and $use{'no-man'} to $force, it was not +consistent, just use --force for all the --no-xxx options. This goes along with +adding more force switches and shortcuts. + +8. INFO: Going with enhancement 3, redid the white list regex for terminals, +there were a bunch of [xx]tty type names. + +-------------------------------------------------------------------------------- +-- Harald Hope - Mon, 6 Jan 2025 12:15:07 -0700 + +================================================================================ Version: 3.3.36 Patch: 00 Date: 2024-09-04 diff --git a/inxi.metainfo.xml b/inxi.metainfo.xml new file mode 100644 index 0000000..93a1d29 --- /dev/null +++ b/inxi.metainfo.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<component type="console-application"> + <id>org.smxi.inxi</id> + + <name>inxi</name> + <summary>Command line system information tool</summary> + + <metadata_license>CC0-1.0</metadata_license> + <project_license>GPL-3.0-or-later</project_license> + + <!--<developer id="org.codeberg.inxi">Harald Hope</developer>--> + + <content_rating type="oars-1.0" /> + + <description> + <p> + inxi is a full featured command line system information tool that lets you really dig into the guts of your hardware and software stacks. + </p> + </description> + + <icon type="stock">utilities-terminal</icon> + + <categories> + <category>System</category> + <category>Monitor</category> + </categories> + + <provides> + <binary>inxi</binary> + </provides> + + <url type="homepage">https://codeberg.org/smxi/inxi</url> + <url type="bugtracker">https://codeberg.org/smxi/inxi/issues</url> + <url type="faq">https://smxi.org/docs/inxi-faqs.htm</url> + <url type="help">https://smxi.org/docs/inxi.htm</url> + <url type="donation">https://smxi.org/site/donations.htm</url> +</component> |
