From 33fe10f7ca957d2c29d5316b8b379116542e3f39 Mon Sep 17 00:00:00 2001 From: Harald Hope Date: Sun, 23 Jul 2017 14:40:53 -0700 Subject: [PATCH] New version, tarball. This corrects a case I'm seeing where wayland/mir are running desktop but Xorg has not started, which means inxi can't get the video driver from Xorg.0.log as with X. Added in extra data collection from lspci -v to include the driver for graphics card. this is only used, for now, if the initial Xorg based driver test works. Note that this may also work for systems that have not yet started X out of X, in console, I'm not sure about that, but the graphics driver reporting should be improved. Note that I'm not yet linking the driver to the specific card/device, it's just going to show in a comma separated list, I couldn't find multi card systems where the card types are different, like amd gpu with nvidia card, for example. But this should correct an issue, at least to start, with expanding wayland support for systems that don't use or have not started the desktop with Xorg/X11 etc. --- inxi | 60 +++++++++++++++++++++++++++++++++++--------------- inxi.changelog | 26 ++++++++++++++++++++++ 2 files changed, 68 insertions(+), 18 deletions(-) diff --git a/inxi b/inxi index 12c3636..e127069 100755 --- a/inxi +++ b/inxi @@ -1,8 +1,8 @@ #!/usr/bin/env bash ######################################################################## #### Script Name: inxi -#### Version: 2.3.23 -#### Date: 2017-06-29 +#### Version: 2.3.24 +#### Date: 2017-07-23 #### Patch Number: 00 ######################################################################## #### SPECIAL THANKS @@ -6323,6 +6323,8 @@ get_graphics_card_data() IGNORECASE=1 busId="" trueCard="" + card="" + driver="" } # not using 3D controller yet, needs research: |3D controller |display controller # note: this is strange, but all of these can be either a separate or the same @@ -6330,14 +6332,23 @@ get_graphics_card_data() # cards are either the same or different. We want only the .0 version as a valid # card. .1 would be for example: Display Adapter with bus id x:xx.1, not the right one /vga compatible controller|3D controller|Display controller/ { + trueCard="" gsub(/'"$BAN_LIST_NORMAL"'/, "", $NF) gsub(/'"$BAN_LIST_ARRAY"'/, " ", $NF) gsub(/^ +| +$/, "", $NF) gsub(/ [ \t]+/, " ", $NF) + card=$NF busId=gensub(/^([0-9a-f:\.]+) (.+)$/,"\\1",1,$1) trueCard=gensub(/(.*)\.([0-9]+)$/,"\\2",1,busId) + while (!/^$/) { + getline + if ( $1 ~ /Kernel driver in use/ ){ + driver=$2 + } + } if ( trueCard == 0 ) { - print $NF "," busId + print card "," busId "," driver + # print card "," busId "," driver > "/dev/tty" } }' <<< "$Lspci_v_Data" ) ) IFS="$ORIGINAL_IFS" @@ -12848,10 +12859,10 @@ print_graphics_data() { eval $LOGFS local graphics_data='' card_id='' i='' root_alert='' root_x_string='' a_graphics_working='' - local b_is_mesa='false' display_full_string='' card_bus_id='' card_data='' - local res_tty='Resolution' xorg_data='' display_server_string='' chip_id='' + local b_is_mesa='false' display_full_string='' card_bus_id='' card_data='' + local res_tty='Resolution' xorg_data='' display_server_string='' chip_id='' sep_pci='' local spacer='' driver='' driver_string='' driver_plural='' direct_render_string='' - local separator_loaded='' separator_unloaded='' separator_failed='' + local sep_loaded='' sep_unloaded='' sep_failed='' b_pci_driver='false' local loaded='' unloaded='' failed='' display_server_string='' b_force_tty='false' local line_starter='Graphics:' part_1_data='' part_2_data='' b_advanced='true' local screen_resolution="$( get_graphics_res_data 'reg' )" @@ -12892,7 +12903,8 @@ print_graphics_data() get_graphics_driver if [[ ${#A_GRAPHIC_DRIVERS[@]} -eq 0 ]];then - driver=' N/A' + driver='' + b_pci_driver='true' else for (( i=0; i < ${#A_GRAPHIC_DRIVERS[@]}; i++ )) do @@ -12901,16 +12913,16 @@ print_graphics_data() IFS="$ORIGINAL_IFS" case ${a_graphics_working[1]} in loaded) - loaded="$loaded$separator_loaded${a_graphics_working[0]}" - separator_loaded=',' + loaded="$loaded$sep_loaded${a_graphics_working[0]}" + sep_loaded=',' ;; unloaded) - unloaded="$unloaded$separator_unloaded${a_graphics_working[0]}" - separator_unloaded=',' + unloaded="$unloaded$sep_unloaded${a_graphics_working[0]}" + sep_unloaded=',' ;; failed) - failed="$failed$separator_failed${a_graphics_working[0]}" - separator_failed=',' + failed="$failed$sep_failed${a_graphics_working[0]}" + sep_failed=',' ;; esac done @@ -12926,7 +12938,7 @@ print_graphics_data() fi # sometimes for some reason there is no driver found but the array is started if [[ -z $driver ]];then - driver=' N/A' + b_pci_driver='true' fi if [[ ${#A_GRAPHIC_DRIVERS[@]} -gt 1 ]];then driver_plural='s' @@ -12954,9 +12966,7 @@ print_graphics_data() [[ $display_server == 'wayland' || $display_server == 'mir' ]];then compositor_string="${C1}compositor$SEP3${C2} $compositor " fi - display_server_string="${C1}Display Server${SEP3}${C2} $display_server_string $compositor_string" - driver_string="${C1}driver$driver_plural$SEP3${C2}$driver " - + if [[ $glx_renderer == '' && $B_ROOT == 'true' ]];then root_x_string='for root ' b_advanced='false' @@ -12972,7 +12982,6 @@ print_graphics_data() if [[ $b_force_tty == 'true' || $B_SHOW_DISPLAY_DATA != 'true' || $B_RUNNING_IN_DISPLAY != 'true' ]];then res_tty='tty size' fi - if [[ -n $root_x_string ]];then root_x_string="${C1}Advanced Data$SEP3${C2} N/A $root_x_string" fi @@ -12985,6 +12994,15 @@ print_graphics_data() IFS="$ORIGINAL_IFS" card_bus_id='' card_data=${a_graphics_working[0]} + if [[ $b_pci_driver == 'true' && ${a_graphics_working[2]} != '' ]];then + if [[ $sep_pci == ',' ]];then + driver_plural='s' + else + driver=' ' # front pad to match other matches + fi + driver=$driver$sep_pci${a_graphics_working[2]} + sep_pci=',' + fi if [[ $B_EXTRA_DATA == 'true' ]];then if [[ -n ${a_graphics_working[1]} ]];then card_bus_id="${a_graphics_working[1]}" @@ -13048,6 +13066,12 @@ print_graphics_data() fi line_starter=' ' graphics_data='' + if [[ $driver == '' ]];then + driver=' N/A' + fi + + display_server_string="${C1}Display Server${SEP3}${C2} $display_server_string $compositor_string" + driver_string="${C1}driver$driver_plural$SEP3${C2}$driver " part_1_data="$display_server_string$driver_string" part_2_data="${C1}$res_tty$SEP3${C2} $screen_resolution $root_x_string" diff --git a/inxi.changelog b/inxi.changelog index 1b2cc1c..ad936ae 100644 --- a/inxi.changelog +++ b/inxi.changelog @@ -1,3 +1,29 @@ +===================================================================================== +Version: 2.3.24 +Patch Version: 00 +Script Date: 2017-07-23 +----------------------------------- +Changes: +----------------------------------- +New version, tarball. This corrects a case I'm seeing where wayland/mir are running desktop +but Xorg has not started, which means inxi can't get the video driver from Xorg.0.log as with X. + +Added in extra data collection from lspci -v to include the driver for graphics card. this is +only used, for now, if the initial Xorg based driver test works. + +Note that this may also work for systems that have not yet started X out of X, in console, I'm +not sure about that, but the graphics driver reporting should be improved. + +Note that I'm not yet linking the driver to the specific card/device, it's just going to show +in a comma separated list, I couldn't find multi card systems where the card types are different, +like amd gpu with nvidia card, for example. + +But this should correct an issue, at least to start, with expanding wayland support for systems +that don't use or have not started the desktop with Xorg/X11 etc. + +----------------------------------- +-- Harald Hope - Sun, 23 Jul 2017 14:35:56 -0700 + ===================================================================================== Version: 2.3.23 Patch Version: 00