getInfo 2.65.0

This commit is contained in:
kyodev 2017-12-14 13:55:05 +01:00
parent 76f3e5b446
commit a64ecd82a7
2 changed files with 317 additions and 204 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash
version=2.64.0
date="13/12/2017"
version=2.65.0
date="14/12/2017"
projet="simpledeb"
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
script="getInfo"
@ -14,7 +14,9 @@ script="getInfo"
# détecte architecture système, assign $fu_archi: 32bits, i686 | 64bits, amd64 (x86_64)
# return 1 on unknown architecture
# remarque, debian: dpkg --print-architecture affiche i386
f__architecture(){ # 2/12/2017
f__architecture(){ # 14/12/2017
x_architecture=1
case "$(uname -m)" in
amd64 | x86_64 )
fu_archi="64bits, amd64 (x86_64)";;
@ -336,16 +338,16 @@ f_affichage(){ # 2/12/2017
# un test si variable $2 est vide est fait sauf ':vide'
# un test si variable $2 contient 'nofile' (non trouvé par f_grep_file)
# f_dspl "variable" "type" "titre" "commentaire"
f_dspl(){ # 2/12/2017
f_dspl(){ # 14/12/2017
local display='' toDisplay
[ "$text" ] && echo -en "$text" >> "$fileOutput" # flush, avant fonction, de $text parent
unset text
toDisplay="$2"
[[ "$2" || "$1" =~ :vide ]] || return 0 # test si contenu dans $2
# traitement ligne de titre
toDisplay="$2"
[ "$toDisplay" ] || toDisplay="vide" # cas si :vide
# traitement ligne de titre
[[ "$1" =~ sans|var|cmd ]] || display=" **⚡ erreur f_dspl \$1 ($2 $3) ⚡** \n" # test $1 valide
[[ "$1" =~ "var" ]] && display="**$3**" # type var, titre en gras
[[ "$1" =~ "cmd" ]] && display="\`$3\`" # type cmd, titre entre backtick
@ -360,14 +362,14 @@ f_dspl(){ # 2/12/2017
else
display+='``` \n'
display+="$toDisplay \n"
display+='``` \n'
display+='``` \n\n'
fi
echo -en "$display\n" >> "$fileOutput" # flush fonction
echo -en "$display" >> "$fileOutput"
}
# $1 variable à afficher en alerte/info, [$2 alert|info] type de message, alert par défaut
# un test si variable $1 est vide ou non est fait
f_dspl_alrt(){ # 21/11/2017
f_dspl_alrt(){ # 14/12/2017
[ "$1" ] || return 0 # test si contenu dans $1
local display type
# flush, avant fonction, de $text parent
@ -377,9 +379,9 @@ f_dspl_alrt(){ # 21/11/2017
[[ "$2" =~ info ]] && type="info"
[[ "$2" =~ alert ]] && type="alert"
[ "$2" ] || type="alert" # alert par défaut
[ "$type" == "alert" ] && display="> ↯ $1 \n\n"
[ "$type" == "info" ] && display=" ☛ $1 \n\n"
echo -en "$display\n" >> "$fileOutput" # flush fonction
[ "$type" == "alert" ] && display="> ↯ $1 \n"
[ "$type" == "info" ] && display=" ☛ $1 \n"
echo -en "$display" >> "$fileOutput" # flush fonction
}
# $1=liste fichier(s) à grepper, [$2]: N &| nofile &| novide &| ligneVide &| date &| commentXY &| sources
@ -489,8 +491,7 @@ toDisplay=(
}
# f_prnt "1||2|3|l1|l2|l3|titre1|titre2|titre3|hl|quote|flush|code" "texte" '[CONDITION test]'
# $1:
# 1|2|3 indentation, liste à puce, une puce par ligne
# $1: 1|2|3 indentation, liste à puce, une puce par ligne
# l1|l2|l3 ligne, indentation, avec espaces
# titre1|titre2|titre3
# quote|hl|flush
@ -503,9 +504,10 @@ toDisplay=(
f_prnt(){ # 11/12/2017
local preline='' line='' endline=" \n"
[[ "$1" == 'titre1' ]] && preline="\n# "
[[ "$1" == 'titre2' ]] && preline="\n## "
[[ "$1" == 'titre3' ]] && preline="\n### "
[[ "$1" =~ titre ]] && preline="\n\n"
[[ "$1" == 'titre1' ]] && preline+="# "
[[ "$1" == 'titre2' ]] && preline+="## "
[[ "$1" == 'titre3' ]] && preline+="### "
[[ "$1" =~ titre ]] && endline+="\n"
[[ "$1" == '1' ]] && line="$( sed -E 's/(.*)/* \1 /' <<<$2 )"
[[ "$1" == '2' ]] && line="$( sed -E 's/(.*)/ * \1 /' <<<$2 )"
@ -521,8 +523,8 @@ f_prnt(){ # 11/12/2017
fi
if [[ "$1" == "hl" ]]; then # <hl>
text+="\n---\n\n"
elif [[ "$1" == "code" ]]; then # ```
text+="\n---\n"
elif [[ "$1" == "code" ]]; then # ```
text+='```\n'
elif [[ "$1" ]]; then
text+="$preline$line$endline" # ligne formatée
@ -530,7 +532,7 @@ f_prnt(){ # 11/12/2017
text+="\n" # newline
fi
if [[ "$1" == "flush" ]]; then
echo -en "$text\n" >> "$fileOutput"
echo -en "$text" >> "$fileOutput"
unset text
fi
}
@ -616,11 +618,12 @@ f_search_ko(){ # 13/12/2017
}
# [$1=silent], assigne fe_nb_audio, fe_cards_audio
fi_audio(){ # 13/12/2017
fi_audio(){ # 14/12/2017
local cardsAudio cmd_cards version_alsa card_alsa cmd_card_alsa cmt_card_alsa pluriel text
local mod_alsa cmd_mod_alsa cmt_mod_alsa modAudio cmd_modAudio cmt_modAudio
local alert_alsa
x_audio=1
# devices
fe_cards_audio=$( figet_lspci "audio" "name" )
fe_nb_audio=$(f__wcv -l "$fe_cards_audio")
@ -672,10 +675,10 @@ fi_audio(){ # 13/12/2017
f_dspl cmd "$modAudio" "$cmd_modAudio" "$cmt_modAudio"
}
fi_batt(){ # 9/12/2017
fi_batt(){ # 14/12/2017
local pluriel
[ "$fg_batt" ] || figet_batt
(( x_batt == 1 )) || figet_batt
[ "$fg_batt" ] || return 0 # pas de batterie
[ "$fg_nb_batt" -gt 1 ] && pluriel="s" || unset pluriel
###
@ -683,10 +686,11 @@ fi_batt(){ # 9/12/2017
f_dspl sans "$fg_batt"
}
# [$1=silent] (pas d'affichage), assigne $fe_nb_bluez, $fe_cards_bluez
fi_bluez(){ # 13/12/2017
# [$1=silent], assigne $fe_nb_bluez, $fe_cards_bluez
fi_bluez(){ # 14/12/2017
local bluez cmd_bluez cmt_bluez mod cmd_mod cmt_mod pluriel text
x_bluez=1
if hcitool scan &>/dev/null && [[ $( f__which hciconfig ) ]]; then
fe_nb_bluez=$( hciconfig name 2>/dev/null )
fe_cards_bluez=$( grep -Eo '^hci[0-9]+' <<< $fe_nb_bluez )
@ -746,13 +750,14 @@ fi_conf(){ # 13/12/2017
f_dspl cmd "$confs" "grep -Ersv '^#|^$' <fichiers désirés>"
}
fi_cpu(){ # 11/12/2017
fi_cpu(){ # 14/12/2017
local cpu_flags text iflag qte_flags text_flags="" pluriel
local alert_microcode
(( x_cpu == 1 )) || figet_cpu
(( x_cpu_flags == 1 )) || figet_cpu_flags # appel 'base' des tags, obtention $CPU_FLAGS
cpu_flags=$( sed -n 's/^flags.*: \(.*\)$/\1/p;' /proc/cpuinfo | sed -n '1p'| \
tr ' ' '\n' | sort | tr '\n' ' ' | xargs )
[ "$CPU_FLAGS" ] || figet_cpu_flags # appel 'base' des tags, obtention $CPU_FLAGS
for iflag in $cpu_flags; do
text_flags+="$(
gawk -v motif="$iflag" -F '⟷' '
@ -765,7 +770,6 @@ fi_cpu(){ # 11/12/2017
done
text_flags=${text_flags%[[:cntrl:]]} # suppression \n final
[ "$cpu_flags" ] && qte_flags=$( f__wcv -w "$cpu_flags" flags )
[ "$fg_cpu" ] || figet_cpu
if ! figet_ucode ; then # retour fonction en erreur => pas d'installation mais possible
alert_microcode="$fg_ucode"
[ "$ENV_DEBIAN" ] && alert_microcode+="\n les installer: **apt install $ucode**"
@ -782,11 +786,11 @@ fi_cpu(){ # 11/12/2017
f_dspl sans "$text_flags" # flags cpu texte
}
fi_disk(){ # 5/12/2017
fi_disk(){ # 14/12/2017
local cmd_dd_temp="" dd_temp="" exclude_df liste_df disk_df disk_df_i cmd_dfi cmd_dfh disk_lsblk fstab
local resume idResume idSwap idisk text pluriel
local alert_dd_temp alert_file_resume alert_uuidResume
[ "$fg_nb_disk" ] || figet_disk
(( x_disk == 1 )) || figet_disk
# hddtemp
if [ $( f__which hddtemp ) ]; then
for idisk in $fg_disk_fixe; do
@ -954,8 +958,8 @@ fi_efi(){ # 6/12/2017
f_dspl cmd "$efiboot" "efibootmgr -v" "config EFI boot"
}
# assigne $fe_gpu (liste des gpu), $fe_nb_gpu, fe_Xorg, si [$1=silent|xorgOnly], sortie après configs xorg complete
fi_gpu(){ # 11/12/2017
# [$1=silent|xorgOnly], assigne $fe_gpu (liste des gpu), $fe_nb_gpu, fe_Xorg
fi_gpu(){ # 14/12/2017
local cards cmd_cards prefixCmd openGl pluriel text
local stck_glxinfo glx_dvc cmd_glx_dvc stck_glxinfoOpt stck_glxinfoDri glx_dvc_temp
local cmd_openGl resolutions cmd_resolutions cmt_resolutions providers cmd_providers
@ -963,11 +967,8 @@ fi_gpu(){ # 11/12/2017
local modGpu cmd_modGpu cmt_modGpu
local alert_hybrid alert_3D alert_Wayland
local toScrut confs ifile fileConfs cmd_confs cmt_confs
# cardsManuel="$(lspci -nnk | grep -EiA 3 'vga|display|3d')" # -nn: textual and numeric ID's, k kernel
# cardsManuel="$(lspci -nnv | grep -iEA10 'vga|display|3d)" # v=verbose
# cardsManuel="lspci -nnv -s $( lspci | grep -Ei 'vga|display|3d' | cut -d" " -f1 )"
# cardsManuel="lspci -nnv -s $(gawk '/VGA |Display |3D / {print $1}' <<< $( lspci ))"
x_gpu=1
# liste/description gpu et qte
fe_gpu=$( figet_lspci "video" "name")
fe_nb_gpu=$( f__wcv "-l" "$fe_gpu" )
@ -1007,7 +1008,13 @@ fi_gpu(){ # 11/12/2017
return 0
fi
###
# lspci
# lspci -nnk | grep -EiA 3 'vga|display|3d'
# lspci -nnv | grep -iEA10 'vga|display|3d'
# lspci -nnv -s $( lspci | grep -Ei 'vga|display|3d' | cut -d" " -f1 )
# lspci -nnv -s $(gawk '/VGA |Display |3D / {print $1}' <<< $( lspci ) )
cmd_cards="lspci -nnv -s $(gawk '/VGA |Display |3D / {print $1}' <<< $( lspci ))"
if [ "$fe_nb_gpu" -eq 1 ]; then # une seule carte
cards=$( figet_lspci "video" "raw" )
@ -1085,7 +1092,7 @@ fi_gpu(){ # 11/12/2017
[ "$( f__wcv -wv "$modGpu" "^[[:alnum:]]" )" -gt 1 ] && pluriel="s" || unset pluriel
cmt_modGpu="**Gpu:** $( f__wcv -wv "$modGpu" "^[[:alnum:]]" ) module"$pluriel" utilisé"$pluriel
# fonctions externes
[ "$fg_resolution" ] || figet_screen
(( x_screen )) || figet_screen
###
f_prnt titre2 "vidéo"
f_prnt l "$( sed -E 's/(.*)/**\1** /' <<< $fe_gpu )" # mise en gras
@ -1144,8 +1151,8 @@ fi_gpu_openGl(){ # 28/11/2017
openGl=${openGl::-1}
}
fi_hw(){ # 6/12/2017
[ "$fg_hw" ] || figet_hw
fi_hw(){ # 14/12/2017
(( x_hw == 1 )) || figet_hw
###
f_prnt titre2 "hardware monitor"
f_dspl sans "$fg_hw" "sans"
@ -1153,6 +1160,21 @@ fi_hw(){ # 6/12/2017
f_prnt flush
}
# $1=-4|-6|-46 protocole
fi_ip_pub(){ #v 14/12/2017
local itest option="$1"
option=${option//46/4 6}
for itest in $option; do
itest=-${itest//-}
if figet_ip_pub "$itest" ; then
echo "$BOLD$fg_ip_pub$STD"
else
echo "pas de connectivité ipv${itest#-}"
fi
done
}
fi_journal(){ # 10/12/2017
local jctl_boot jctl_alert_k jctl_crit_k jctl_err_k jctl_warn_k jctl_warn_nok jctl_last jctl_size file
local info_ucode text nb_lignes=25
@ -1374,10 +1396,11 @@ fi_mem(){ # 5/12/2017
}
# [$1=silent], assigne fe_nb_reseau, fe_cards_reseau
fi_net(){ # 13/12/2017 ( matériel )
fi_net(){ # 14/12/2017 ( matériel )
local cards cmd_cards modEth cmd_modEth cmt_modEth modWln cmd_modWln cmt_modWln pluriel text
local alert_wlx
x_net=1
# devices
fe_cards_reseau=$( figet_lspci "net" "name" ) # noms des cartes réseau détectées, mix ethernet/wifi
fe_nb_reseau=$(f__wcv -l "$fe_cards_reseau") # nombre de cartes réseau détectées, mix ethernet/wifi
@ -1404,7 +1427,7 @@ fi_net(){ # 13/12/2017 ( matériel )
cmd_modWln="lsmod | grep -Ew '$fg_srch_mod_lp'"
[ "$( f__wcv -wv "$modWln" "^[[:alnum:]]" )" -gt 1 ] && pluriel="s" || unset pluriel
cmt_modWln="**Wifi:** $( f__wcv -wv "$modWln" "^[[:alnum:]]" ) module"$pluriel" utilisé"$pluriel
[ "$fg_ip" ] || figet_ip
(( x_ip == 1 )) || figet_ip
if grep -iq 'wlx' <<< "$fg_ifn"; then
alert_wlx="Une interface wifi est en erreur: $(grep -o 'wlx' <<< $fg_ifn) \n"
alert_wlx+="l'interface n'est pas reconnue et est donc mal nommée, "
@ -1973,8 +1996,8 @@ fi_reseau(){ # 11/12/2017 ( configuration )
fi_serial(){ #v9 1/12/2017
local chassis_serial machineId text
[ "$fg_nb_disk" ] || figet_disk
[ "$fg_batt" ] || figet_batt
(( x_disk == 1 )) || figet_disk
(( x_bat == 1 )) || figet_batt
chassis_serial=$( cat /sys/class/dmi/id/chassis_serial 2>/dev/null )
[ "$chassis_serial" ] || chassis_serial="n/a"
machineId=$( cat /etc/machine-id 2>/dev/null )
@ -2014,27 +2037,28 @@ fi_ssid(){ #v2 11/12/2017
rm "$fileOutput"
}
fi_system(){ # 12/12/2017
fi_system(){ # 14/12/2017
local mbr uname bootImage initDaemon date_install lastboot uptime uptimePure loadAverage pluriel text
local enum_batt serverX
local alimentation alim_total
# appels fonctions externes
[ "$fg_batt" ] || figet_batt
[ "$fg_cpu" ] || figet_cpu
[ "$fg_de" ] || figet_de
[ "$fg_nb_disk" ] || figet_disk
[ "$fg_distrib" ] || figet_distrib
[ "$fg_dsp_mngr" ] || figet_dsp_mngr
[ "$fg_dmi" ] || figet_dmi
[ "$fg_resolution" ] || figet_screen
[ "$fg_shell" ] || figet_shell
[ "$fg_wm" ] || figet_wm
[ "$fe_cards_audio" ] || fi_audio "silent"
[ "$fe_cards_bluez" ] || fi_bluez "silent"
[ "$fe_gpu" ] || fi_gpu "silent"
[ "$fe_cards_reseau" ] || fi_net "silent"
[ "$fu_archi" ] || f__architecture
(( x_architecture == 1 )) || f__architecture
(( x_audio == 1 )) || fi_audio "silent"
(( x_batt == 1 )) || figet_batt
(( x_bluez == 1 )) || fi_bluez "silent"
(( x_cpu == 1 )) || figet_cpu
(( x_de == 1 )) || figet_de
(( x_disk == 1 )) || figet_disk
(( x_distrib == 1 )) || figet_distrib
(( x_dm == 1 )) || figet_dm
(( x_dmi == 1 )) || figet_dmi
(( x_gpu == 1 )) || fi_gpu "silent"
(( x_net == 1 )) || fi_net "silent"
(( x_screen )) || figet_screen
(( x_shell == 1 )) || figet_shell
(( x_touchpad == 1 )) || fi_touchpad "silent"
(( x_wm == 1 )) || figet_wm
echo -n "ø"
# divers système
if [ -d /sys/firmware/efi ]; then
@ -2110,6 +2134,7 @@ fi_system(){ # 12/12/2017
enum_batt=$(grep -E '[A-Z][A-Z]' <<< $fg_batt)
###
[ "$ORIGIN" ] && f_prnt titre2 "système"
f_prnt
f_prnt l "$( sed -E 's/(.*)/**\1** /' <<<$fg_dmi )" # en gras
f_prnt
f_prnt 1 "CPU"
@ -2141,9 +2166,9 @@ fi_system(){ # 12/12/2017
f_prnt l2 "nombre d'écrans: $fg_nb_screen"
[ "$(f__wcv "-wv" "$fg_resolution" "pixels")" -gt 1 ] && pluriel="s" || unset pluriel
f_prnt l2 "résolution"$pluriel": $fg_resolution"
[ "$(wc -w <<< $fg_dsp_mngr)" -gt 1 ] && pluriel="s" || unset pluriel
f_prnt l2 "display manager"$pluriel": $fg_dsp_mngr"
f_prnt l2 "display manager actif: $fg_dsp_mngr_actif" '[ "$fg_dsp_mngr_actif" != "$fg_dsp_mngr" ]'
[ "$(wc -w <<< $fg_dm)" -gt 1 ] && pluriel="s" || unset pluriel
f_prnt l2 "display manager"$pluriel": $fg_dm"
f_prnt l2 "display manager actif: $fg_dm_actif" '[ "$fg_dm_actif" != "$fg_dm" ]'
f_prnt l2 "desktop (DE): $fg_de"
f_prnt l2 "panel: $fg_de_panel" '[ "$fg_de_panel" ]'
f_prnt l2 "window manager: $fg_wm"
@ -2157,6 +2182,8 @@ fi_system(){ # 12/12/2017
[ "$fg_nb_batt" -gt "1" ] && pluriel="s" || unset pluriel
f_prnt l2 "$fg_nb_batt batterie"$pluriel" présente"$pluriel":" '[ "$fg_batt" ]'
f_prnt l3 "$enum_batt" '[ "$fg_batt" ]'
[ "$fe_nb_touchpad" -gt "1" ] && pluriel="s" || unset pluriel
f_prnt l2 "$fe_nb_touchpad pavé"$pluriel" tactile"$pluriel": $fe_touchpad" '[ "fe_touchpad" ]'
f_prnt l '```'
f_prnt
f_prnt 1 "$( sed -E 's/^(.*: )(.*)/\1**\2**/' <<<$fg_disk_part_fix_tot )" '[ "$fg_disk_part_fix_tot" ]'
@ -2239,6 +2266,45 @@ fi_system_analyse(){ #v 2/12/2017
f_dspl cmd:text "$bootGraph" "$cmd_bootGraph" "$cmt_bootGraph"
}
# [$1=silent], assigne $fe_touchpad, fe_nb_touchpad
fi_touchpad(){ # 14/12/2017
local device cmd_device type type_pt pilote cmd_pilote cmt_pilote info_driver
x_touchpad=1
device=$( grep -Ei -B1 -A8 'synap|alps|etps|elan' /proc/bus/input/devices ) || return 0
fe_touchpad=$( grep -i 'Name=' <<< $device )
fe_touchpad=${fe_touchpad#*Name=\"} # suppression début
fe_touchpad=${fe_touchpad%\"} # suppression fin
cmd_device="grep -Ei -B1 -A8 'synap|alps|etps|elan' /proc/bus/input/devices"
type=$( grep -i 'touchpad: buttons:' /var/log/Xorg.0.log )
grep -iq 'double' <<< $type && type_pt="2"
grep -iq 'triple' <<< $type && type_pt+="3"
if [ "$type_pt" ]; then
type_pt=" multitouch $type_pt points"
fi
type_pt=${type_pt/23/2\/3}
fe_touchpad+="$type_pt"
fe_nb_touchpad=$( grep -ci 'touchpad' <<< "$fe_touchpad" )
[[ "$1" == "silent" ]] && return 0
###
if [ "$ENV_DEBIAN" ]; then
pilote=$( gawk '
/^ii/ { printf "%-30s", $2; $1=$2=$3=$4=""; print $0 }
' <<< $( dpkg -l *synaptics *libinput ) )
cmd_pilote="dpkg -l *synaptics *libinput"
cmt_pilote="drivers installé"
info_driver="consulter d'éventuels fichiers *synaptics *libinput dans /etc/X11/xorg.conf.d/ "
info_driver+="pour voir les configurations personnalisées"
fi
###
f_prnt titre2 "Touchpad"
f_dspl cmd "$device" "$cmd_device"
f_dspl cmd "$pilote" "$cmd_pilote" "$cmt_pilote"
f_dspl_alrt "$info_driver" "info"
}
fi_usb(){ # 1/12/2017
local lsusb lsusb_t text
@ -2278,10 +2344,12 @@ fi_vrms(){ # 1/12/2017
}
# informations batterie(s), assigne $fg_nb_batt $fg_batt $fg_batt_serial
figet_batt(){ #v2 12/12/2017
figet_batt(){ #v2 14/12/2017
local batt_detail batt_unit batt_capa_design batt_capa_full batt_capa_now batt_conso
local batt_volt_min batt_volt_now batt_status batt_cycle alert_batt_alarm
local batt_sante batt_restant tempo batRep ibat uevent
x_batt=1
fg_nb_batt=0
if [ ! -d /sys/class/power_supply ]; then # anciennes interfaces ou inconnu
[ -d /proc/acpi/battery ] && fg_batt="ancienne interface ACPI non gérée (obsolète)"
@ -2379,8 +2447,10 @@ figet_batt(){ #v2 12/12/2017
}
# assigne $fg_cpu (description cpu), fg_nb_threads, $fg_cpu_arch, $fg_uarch, $fg_vendor=AMD|Intel, $fg_nb_cpu
figet_cpu(){ #v 9/12/2017
figet_cpu(){ #v 14/12/2017
local cpuinfo speedNom speedMax speedMin speedCpu descrCpu cpu1 cpu2 cpu3
x_cpu=1
cpuinfo="$(cat /proc/cpuinfo)"
# speed
speedNom=$( gawk -F ':' '
@ -2454,14 +2524,14 @@ figet_cpu(){ #v 9/12/2017
fg_vendor=${fg_vendor//AuthenticAMD/AMD} # allègement
fg_vendor=${fg_vendor//GenuineIntel/Intel} # allègement
# traitement µarchitecture
[ "$fg_uarch" ] || figet_cpu_uarch
# protection numérique
(( x_cpu_uarch == 1 )) || figet_cpu_uarch
}
# stockage des flags cpu extraits du kernel, assigna $CPU_FLAGS
figet_cpu_flags(){ # 24/11/2017
CPU_FLAGS="
x_cpu_flags=1
CPU_FLAGS="
# https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/cpufeatures.h
# 11/2017
## Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0
@ -2719,11 +2789,13 @@ SMCA ⟷ Scalable MCA
}
# assigne $fg_uarch
figet_cpu_uarch(){ # 24/11/2017
figet_cpu_uarch(){ # 14/11/2017
local var_temp vendor family model
local defaut_model="modèle non répertorié" defaut_family="famille non répertoriée"
local defaut_vendor="fabricant non répertorié"
[ "$fg_cpu" ] || figet_cpu # obtention $fg_vendor
x_cpu_uarch=1
(( x_cpu == 1 )) || figet_cpu # obtention $fg_vendor
var_temp=$(grep -m1 '^cpu family' /proc/cpuinfo) # family cpuinfo
var_temp=${var_temp#*: } # extraction valeur family
family=$(printf "%.2X" $var_temp) # conversion hexa family
@ -2846,8 +2918,10 @@ figet_cpu_uarch(){ # 24/11/2017
}
# assigne $fg_de, $fg_de_panel
figet_de(){ #v 9/12/2017 # thanks neofetch
figet_de(){ #v 14/12/2017 # thanks neofetch
local de="n/a"
x_de=1
fg_de="n/a"
[ "$ENV_DISPLAY" ] && fg_de+=":no Display"
[ "$ENV_SSH" ] && fg_de+=":ssh"
@ -2893,9 +2967,11 @@ figet_de(){ #v 9/12/2017 # thanks neofetch
# $fg_disk_part_fixe_m, $fg_disk_part_amov_m : liste partitions montées, fixes ou amovibles
# $fg_disk_part_swap : liste partitions swap
# $fg_disk_part_fixe_nm, $fg_disk_part_amov_nm : liste partitions non montées, fixes ou amovibles
figet_disk(){ #v2 12/12/2017
figet_disk(){ #v2 14/12/2017
local size type list_id idisk lsblk vendor model rev serial
unset fg_disk_fixe fg_disk_amov
x_disk=1
# bug printf: caractères accentués diminuent 1 caractère sur arguments suivants, ajouter autant d'espaces
fg_disk_table="$(printf '%-5s %-8s %-6s %-10s %-18s %-6s' "disk" "taille" "type" "vendeur" "modèle" " rév.")"$'\n'
fg_disk_serial="$(printf '%-5s %-10s %-18s %-6s %-24s %s' "disk" "vendeur" "modèle " " rév." " n° série")"$'\n'
@ -2964,8 +3040,10 @@ figet_disk(){ #v2 12/12/2017
}
# assigne $fg_distrib
figet_distrib(){ #v 12/12/2017
figet_distrib(){ #v 14/12/2017
local prefix version
x_distrib=1
# priorité /etc/os-release, version officielle systemd
[ -e "/etc/os-release" ] && source "/etc/os-release" || source "/usr/lib/os-release"
if [ "$PRETTY_NAME" ] && [ "${PRETTY_NAME,,}" != "Linux" ]; then
@ -3000,8 +3078,48 @@ figet_distrib(){ #v 12/12/2017
[ "$fg_distrib" ] || fg_distrib="${OS^} (indéterminé)"
}
# display manager, assigne $fg_dm (liste) ou 'n/a', $fg_dm_actif
figet_dm(){ #v1 14/12/2017
local dm_list="cdm entranced gdm3 gdm qingy kdm ldm lightdm lxdm mdm nodm orthos sddm slim wdm xdm"
local idm ps systemctl x11
x_dm=1
fg_dm=""
ps=$(ps -ef) # plus joli pour cmde manuelle ps=$(ps -auxf)
ps=${ps,,} # tout en minuscules
for idm in $dm_list; do
if grep -iq "bin/$idm$" <<< "$ps"; then
# if [ "${ps/*"$idm"*/test}" == "test" ]; then # pb: doublon gdm/gdm3 fun & speed? grepless (remplacement $idm et alentours, si idm présent, valeur test)
fg_dm+="${idm^} "
fg_dm_actif="${idm^}"
elif [[ -e /var/run/$idm".pid" || -e /var/run/$idm".pid" || -e /run/$idm || -e /run/$idm || -d /run/$idm/ || -d /var/run/$idm/ ]]; then
fg_dm+="${idm^} "
fg_dm_actif="${idm^}"
fi
done
fg_dm=${fg_dm% } # supression espace final
if [[ -z "$fg_dm" && -e "/etc/X11/default-display-manager" ]]; then
x11=$(cat /etc/X11/default-display-manager)
fg_dm=${x11##*/} # conservation dernier champs ifs '/'
fi
if [[ -z "$fg_dm" && "${ps/*startx*/test}" == "test" ]]; then
fg_dm="(startx)"
fg_dm_actif="(startx)"
fi
fg_dm_actif=${fg_dm_actif^}
if [[ -z "$fg_dm_actif" && $( type -p systemctl 2>/dev/null ) ]]; then
fg_dm_actif=$(grep 'Main PID' <<< $(systemctl status display-manager))
fg_dm_actif=${fg_dm_actif##* } # conservation dernier champs ifs ' '
fg_dm_actif=${fg_dm_actif/\(/} # suppression (
fg_dm_actif=${fg_dm_actif/\)/} # suppression )
[ ${fg_dm// } ] || fg_dm="$fg_dm_actif"
fi
[ "$fg_dm" ] || fg_dm="n/a"
[ "$fg_dm_actif" ] || fg_dm_actif="n/a"
}
# informations DMI (firmware partie matériel), $1=[head], assigne $fg_dmi
figet_dmi(){ #v2 01/12/2017
figet_dmi(){ #v2 14/12/2017
local product board bios tempo idmi indic1="" indic2=""
local chassis_type=( # type de chassis selon smbios janvier 2017
# http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.1.1.pdf
@ -3039,6 +3157,8 @@ figet_dmi(){ #v2 01/12/2017
'Convertible' #1Fh
'Detachable' #20h
)
x_dmi=1
# ligne1 $product
for idmi in sys_vendor product_name product_version chassis_type; do
tempo=$( cat /sys/class/dmi/id/$idmi 2>/dev/null ) # extraction valeur
@ -3079,47 +3199,11 @@ figet_dmi(){ #v2 01/12/2017
fg_dmi=${fg_dmi//COMPUTER }
}
# display manager, assigne $fg_dsp_mngr (liste) ou 'n/a', $fg_dsp_mngr_actif
figet_dsp_mngr(){ #v1 27/11/2017
local dm_list="cdm entranced gdm3 gdm qingy kdm ldm lightdm lxdm mdm nodm orthos sddm slim wdm xdm"
local idm ps systemctl x11
fg_dsp_mngr=""
ps=$(ps -ef) # plus joli pour cmde manuelle ps=$(ps -auxf)
ps=${ps,,} # tout en minuscules
for idm in $dm_list; do
if grep -iq "bin/$idm$" <<< "$ps"; then
# if [ "${ps/*"$idm"*/test}" == "test" ]; then # pb: doublon gdm/gdm3 fun & speed? grepless (remplacement $idm et alentours, si idm présent, valeur test)
fg_dsp_mngr+="${idm^} "
fg_dsp_mngr_actif="${idm^}"
elif [[ -e /var/run/$idm".pid" || -e /var/run/$idm".pid" || -e /run/$idm || -e /run/$idm || -d /run/$idm/ || -d /var/run/$idm/ ]]; then
fg_dsp_mngr+="${idm^} "
fg_dsp_mngr_actif="${idm^}"
fi
done
fg_dsp_mngr=${fg_dsp_mngr% } # supression espace final
if [[ -z "$fg_dsp_mngr" && -e "/etc/X11/default-display-manager" ]]; then
x11=$(cat /etc/X11/default-display-manager)
fg_dsp_mngr=${x11##*/} # conservation dernier champs ifs '/'
fi
if [[ -z "$fg_dsp_mngr" && "${ps/*startx*/test}" == "test" ]]; then
fg_dsp_mngr="(startx)"
fg_dsp_mngr_actif="(startx)"
fi
fg_dsp_mngr_actif=${fg_dsp_mngr_actif^}
if [[ -z "$fg_dsp_mngr_actif" && $( type -p systemctl 2>/dev/null ) ]]; then
fg_dsp_mngr_actif=$(grep 'Main PID' <<< $(systemctl status display-manager))
fg_dsp_mngr_actif=${fg_dsp_mngr_actif##* } # conservation dernier champs ifs ' '
fg_dsp_mngr_actif=${fg_dsp_mngr_actif/\(/} # suppression (
fg_dsp_mngr_actif=${fg_dsp_mngr_actif/\)/} # suppression )
[ ${fg_dsp_mngr// } ] || fg_dsp_mngr="$fg_dsp_mngr_actif"
fi
[ "$fg_dsp_mngr" ] || fg_dsp_mngr="n/a"
[ "$fg_dsp_mngr_actif" ] || fg_dsp_mngr_actif="n/a"
}
# infos température et fan via acpi, assigne $fg_hw
figet_hw(){ #v2 12/12/2017
figet_hw(){ #v2 14/12/2017
local name labelF inputF labelT inputT critT hystT maxiT fan temp ihw
x_hw=1
if [ ! -d /sys/class/hwmon/ ]; then
fg_hw="gestion acpi hwmon non accessible"
return 1
@ -3170,7 +3254,7 @@ figet_hw(){ #v2 12/12/2017
[ "$inputF" ] && inputF=${inputF::-1}
# formation affichage
if [ "$inputF" ]; then
fan+="$(printf "%-8s %st/mn %s" "$name" "$inputF" "$labelF")"$'\n'
fan+="$(printf "%-8s %st/mn %s" "$name" "$inputF" "$labelF")"$'\n'
fi
fi
done
@ -3178,10 +3262,11 @@ figet_hw(){ #v2 12/12/2017
[ "$fg_hw" ] && fg_hw=${fg_hw::-1}
}
# assigne $fg_ip, $fg_gws6, $fg_ifn, $fg_mac
figet_ip(){ # 12/12/2017
# $1=-4|-6, assigne $fg_ip, $fg_gws6, $fg_ifn, $fg_mac
figet_ip(){ # 14/12/2017
local target ifn
x_ip=1
[ $( f__which ip ) ] || return 1
[ "$1" ] && proto="$1" || proto="-4"
# adresses ip
@ -3229,104 +3314,124 @@ figet_ip(){ # 12/12/2017
fg_mac=${fg_mac%[[:cntrl:]]} # suppression dernier $'\n'
}
# $1=4|6, assigne $fg_public
figet_ip_pub(){ # 20/11/2017
# $1=-4|-6, assigne $fg_ip_pub
figet_ip_pub(){ #v 14/12/2017
local dig_test ip_test iip
list_ip4(){
ip_test+=" http://whatismyip.akamai.com"
ip_test+=" http://ipof.in/txt"
ip_test+=" http://eth0.me"
ip_test+=" http://ipecho.net/plain"
ip_test+=" http://alma.ch/myip.cgi"
ip_test+=" http://checkip.amazonaws.com"
ip_test+=" http://eth0.me"
ip_test+=" http://ipecho.net/plain"
ip_test+=" api.infoip.io/ip" # http & https
ip_test+=" api.ipify.org" # http & https
ip_test+=" ipinfo.io/ip" # http & https
}
list_ip6(){
ip_test+=" http://ipv6.whatismyip.akamai.com"
ip_test+=" http://bot.whatismyipaddress.com"
ip_test+=" ip.tyk.nu" # http & https
ip_test+=" l2.io/ip" # http & https
ip_test+=" ident.me" # http & https
ip_test+=" icanhazip.com" # http & https
ip_test+=" wgetip.com" # http & https
ip_test+=" https://canhazip.com"
ip_test+=" https://tnx.nl/ip"
}
list_ip4_dig(){
dig_test+=" whoami.akamai.net/@ns1-1.akamaitech.net"
dig_test+=" myip.opendns.com/@resolver1.opendns.com"
dig_test+=" myip.opendns.com/@resolver2.opendns.com"
dig_test+=" myip.opendns.com/@resolver3.opendns.com"
dig_test+=" myip.opendns.com/@resolver4.opendns.com"
}
list_ip6_dig(){
dig_test+=" -6/myip.opendns.com/aaaa/@resolver1.ipv6-sandbox.opendns.com"
dig_test+=" -6/myip.opendns.com/aaaa/@resolver2.ipv6-sandbox.opendns.com"
list_ip4(){ # testé 11/12/2017
ip_test=( # pas de https
http://whatismyip.akamai.com
http://eth0.me
ipinfo.io/ip # http & https
http://alma.ch/myip.cgi # peu fiable curl
http://checkip.amazonaws.com # peu fiable wget
api.infoip.io/ip # http & https fiable wget
api.ipify.org # http & https fiable wget
http://ipecho.net/plain # peu fiable wget / curl
# http://ipof.in/txt # fail wget
)
}
unset fg_public
if [ "$1" == "4" ]; then
ping -4 -c1 google.com &>/dev/null || ping -4 -c1 free.fr &>/dev/null || return 1 # test connectivité
list_ip4_dig(){ # testé 11/12/2017
dig_test=(
whoami.akamai.net/@ns1-1.akamaitech.net
myip.opendns.com/@resolver1.opendns.com
myip.opendns.com/@resolver2.opendns.com
myip.opendns.com/@resolver3.opendns.com
myip.opendns.com/@resolver4.opendns.com
)
}
list_ip6(){ # testé 11/12/2017
ip_test=(
http://ipv6.whatismyip.akamai.com
ip.tyk.nu # http & https
wgetip.com # http & https
l2.io/ip # http & https peu fiable wget
icanhazip.com # http & https peu fiable wget
http://bot.whatismyipaddress.com # peu fiable wget
https://canhazip.com # peu fiable wget
https://tnx.nl/ip # peu fiable wget
ident.me # http & https peu fiable curl
)
}
list_ip6_dig(){ # testé 11/12/2017
dig_test=(
-6/myip.opendns.com/aaaa/@resolver1.ipv6-sandbox.opendns.com
-6/myip.opendns.com/aaaa/@resolver2.ipv6-sandbox.opendns.com
)
}
x_ip_pub=1
option="$1"
unset fg_ip_pub
# assignation variables
if [ "$1" == "-4" ]; then
ping -4 -c1 conncheck.opensuse.org &>/dev/null || ping -4 -c1 free.fr &>/dev/null || return 1 # test connectivité
list_ip4_dig
list_ip4
ip_telnet=4.ifcfg.me
elif [ "$1" == "6" ]; then
ping -6 -c1 google.com &>/dev/null || ping -6 -c1 free.fr &>/dev/null || return 1 # test connectivité
elif [ "$1" == "-6" ]; then
ping -6 -c1 conncheck.opensuse.org &>/dev/null || ping -6 -c1 free.fr &>/dev/null || return 1 # test connectivité
list_ip6_dig
list_ip6
ip_telnet=6.ifcfg.me
fi
if [ $( f__which dig ) ] && [ -z "$fg_public" ]; then
for iip in $dig_test ; do
fg_public="$(dig +short $(sed 's;/; ;g' <<< $iip))"
[ "$fg_public" ] && break
# DIG
if type -p dig &>/dev/null && [ -z "$fg_ip_pub" ]; then
for iip in ${dig_test[*]}; do
fg_ip_pub=$( dig +short ${iip//\// } )
[ "$fg_ip_pub" ] && break
done
fi
if [ $( f__which wget ) ] && [ -z "$fg_public" ]; then
cmd="wget --quiet --timeout=5 -O - "
for iip in $ip_test ; do
fg_public="$($cmd $iip)"
[ "$fg_public" ] && break
# WGET
if type -p wget &>/dev/null && [ -z "$fg_ip_pub" ]; then
cmd="wget --quiet --timeout=2 --tries=1 -O - "
for iip in ${ip_test[*]}; do
fg_ip_pub=$( $cmd $iip )
[ "$fg_ip_pub" ] && break
done
fi
if [ $( f__which curl ) ] && [ -z "$fg_public" ]; then
cmd="curl --silent --location --retry 0 --max-time 5" #--location pour aider redirections
for iip in $ip_test ; do
fg_public="$($cmd $iip)"
[ "$fg_public" ] && break
# CURL
if type -p curl &>/dev/null && [ -z "$fg_ip_pub" ]; then
cmd="curl --silent --location --retry 0 --max-time 5"
for iip in ${ip_test[*]}; do
fg_ip_pub=$( $cmd $iip )
[ "$fg_ip_pub" ] && break
done
fi
if [ $( f__which telnet ) ] && [ -z "$fg_public" ]; then
fg_public="$(telnet $ip_telnet 23 2>/dev/null | grep $1 | cut -d ' ' -f 4)"
# TELNET
if type -p telnet &>/dev/null && [ -z "$fg_ip_pub" ]; then
fg_ip_pub=$( telnet $ip_telnet 23 2>/dev/null | grep "Your IPv${option/-}" )
fg_ip_pub=${fg_ip_pub##* }
fi
if [ $( f__which nc ) ] && [ -z "$fg_public" ] && [ "$1" != "IPv6" ]; then
fg_public="$(nc $ip_telnet 23 2>/dev/null | grep $1 | cut -d ' ' -f 4)"
# NC
if type -p nc &>/dev/null && [ -z "$fg_ip_pub" ] && [ "$option" != "-6" ]; then
fg_ip_pub=$( nc $ip_telnet 23 2>/dev/null | grep "Your IPv${option/-}" )
fg_ip_pub=${fg_ip_pub##* }
fi
if [ -z "$fg_public" ]; then
if [ -z "$fg_ip_pub" ]; then
f__error "il manque une des commandes suivantes:\n" \
"dig / wget / curl / telnet / nc \n" \
"ou les ip de test sont devenues défaillantes\n" \
"réessayer après avoir installé dig (dnsutils) et wget\n" \
"si l'erreur persiste, merci de prévenir $projet, $contact"
"réessayer après avoir installé dig (dnsutils) et wget"
fi
}
# $1=audio|video|net & audio|ethernet|wireless, $2 objet raw|name|module, $3=[graph] (optirun, DRI),
# affiche device (name), lspci détail (raw)
# pour module (module kernel), video|ethernet|wireless, assigne $fg_modules_lp $fg_srch_mod_lp
figet_lspci(){ # 13/12/2017
figet_lspci(){ # 14/12/2017
local motif slots lspci display='' prefixCmd modLspci mod_file
x_lspci=1
if [ "$1" = "audio" ]; then
motif="Audio device|Audio controller|Multimedia audio controller"
elif [ "$1" = "video" ]; then
@ -3406,9 +3511,11 @@ figet_lspci(){ # 13/12/2017
# $1=mem|swap [total|notitle|nocoltitle], assigne $fg_mem ($2=debug all cols + free)
# indépendant de procps, affichage plus clair que free, mais résultats identiques
figet_mem(){ # 9/12/2017
figet_mem(){ # 14/12/2017
local freeDebug MemTotal MemFree MemAvailable Buffers Cached SReclaimable Shmem MemUsed
local SwapTotal SwapFree SwapCached col a b c MemLibre
x_mem=1
[ "$2" == "debug" ] && freeDebug="$(free -hw | sed '3d')"
while read -r a b c; do
[ "$a" == "MemTotal:" ] && MemTotal="$b" #echo "$a $((${b/kB}/1024))" ! partie entière !
@ -3476,9 +3583,10 @@ figet_mem(){ # 9/12/2017
}
# $1=bluetooth, assigne $fg_modules, $fg_mod_motif, fg_srch_mod
figet_modules(){ # 13/12/2017
figet_modules(){ # 14/12/2017
local modules dir separator mod_ko
x_modules=1
if [ "$1" == "bluetooth" ]; then
dir="/lib/modules/$(uname -r)/kernel/drivers/bluetooth" # répertoire à scruter
# recherche modules/formation motif ou liste
@ -3510,7 +3618,9 @@ figet_modules(){ # 13/12/2017
}
# assigne $fg_nb_screen, $fg_resolution. return fg_resolution=n/a[ (ssh)] & fg_nb_screen=n/a ou valeurs
figet_screen(){ #v2 25/11/2017
figet_screen(){ #v2 14/12/2017
x_screen=1
fg_nb_screen="n/a"
fg_resolution="n/a"
[ "$ENV_DISPLAY" ] && fg_resolution+=":no Display"
@ -3529,8 +3639,10 @@ figet_screen(){ #v2 25/11/2017
}
# assigne $fg_shell, $fg_shells
figet_shell(){ #v2 25/11/2017 # thanks neofetch
figet_shell(){ #v2 14/12/2017 # thanks neofetch
local shell ish
x_shell=1
# shell en cours altern: fg_shell="$( ps -p $PPID -o comm= 2>/dev/null )"
fg_shell=${SHELL##*/} # suppression jusqu'au dernier /, pas de chemin
fg_shell=${fg_shell,,}
@ -3567,12 +3679,14 @@ figet_shell(){ #v2 25/11/2017 # thanks neofetch
}
# debian indépendant, assigne $fg_ucode (commentaire), $ucode (paquet deb) & return O|1 (1 si pas d'installation)
figet_ucode(){ # 13/12/2017
figet_ucode(){ # 14/12/2017
local flagRep xfile xfileTest=""
x_ucode=1
(( x_cpu == 1 )) || figet_cpu
# recherche flags cpu rep_good (besoin réel?)
[ "$( grep -cm1 'flags.*rep_good ' /proc/cpuinfo )" -ge 1 ] && flagRep="rep_good ⟷ rep microcode works well"
# test possible installation
[ "$fg_cpu" ] || figet_cpu
[ "${fg_vendor,,}" == "amd" ] && ucode="amd64-microcode" # si $ucode, µmicorcode possible (amd|intel)
[ "${fg_vendor,,}" == "intel" ] && ucode="intel-microcode"
# test emplacements possibles
@ -3610,9 +3724,10 @@ figet_ucode(){ # 13/12/2017
}
# assigne $fg_wm (compositor, pas en variable publique, pas fiabilisé)
figet_wm(){ #v 9/12/2017 base départ neofetch
figet_wm(){ #v 14/12/2017 base départ neofetch
local id wm_brut compositor
x_wm=1
fg_wm="n/a"
[ $( f__which xprop ) ] || fg_wm+=":xprop absent" # ! pas de xprop, pas de wm?!
[ "$ENV_DISPLAY" ] && fg_wm+=":no Display"
@ -3979,7 +4094,7 @@ prg_3(){ # fin de traitements
f__dialog_oui_non "non" "\n exporter sur le pastebin par défaut?" && fipaste
f__info "le rapport est disponible en local, fichier:$YELLOW $fileOutput" \
"vous pouvez le visualiser ultérieurement avec $GREEN$script -l" \
"vous pourrez l'exporter ultérieurement avec $BLUE$script -p"
"vous pourrez aussi l'exporter avec $BLUE$script -p"
}
prg_menu(){ # 12/12/2017
@ -4068,8 +4183,7 @@ for j in $options; do
ORIGIN='test'
prg_1 "$*"
echo -n "•"
fi_bluez
fi_net
fi_system
echo; f_prnt_md "$fileOutput"
exit ;; # test
-c* | all )
@ -4103,20 +4217,12 @@ for j in $options; do
f_help
exit ;; # affichage help
--ip )
if figet_ip_pub "4" ; then
f__info "raw" " ipv4 publique: $GREEN$fg_public"
else
f__info "$BLUE pas de connectivité ipv4"
fi
if figet_ip_pub "6" ; then
f__info "raw" " ipv6 publique: $GREEN$fg_public"
else
f__info "$BLUE pas de connectivité ipv6"
fi
fi_ip_pub "-46"
echo
exit ;; # affiche ip public
--mac )
figet_ip
f__info "adresses MAC:\n$GREEN$fg_mac"
f__info "adresses MAC:\n$STD$BOLD$fg_mac"
exit ;; # affiche adresses mac
--serial )
fi_serial

View File

@ -1,5 +1,12 @@
# changelog getInfo
f__architecture
## getInfo 2.65.0 14/12/2017
* nouveau: fi_touchpad
* révision: figet_ip_pub
* révision: général, marqueur et appel fonction
## getInfo 2.64.0 13/12/2017