Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#276 Aujourd'hui à 12:23

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

iznobe a écrit :
mapfile -t printer_name < <(avahi-browse -d local _http._tcp -tk | grep IPv4 | gawk '/HP/ {print $4}')

Je ne peux pas tester car je n’ai qu’une vieille HP qui ne fait pas de réseau.

Mais si tu utilises gawk, tu peux te passer de grep.
Et le nom de modèle pour ta HP ici présente serait plutôt en $5 et $6.

Quelques exemples chez moi où seule la Freebox apparaît :

~$ avahi-browse -d local _http._tcp -tk
+ enp5s0 IPv4 Freebox Server                                _http._tcp           local

~$ avahi-browse -d local _http._tcp -tk | gawk '/IPv4/ && /Freebox/ {print "réseau : "$4,$5}'
réseau : Freebox Server

~$ avahi-browse -d local _http._tcp -tk | gawk -vIGNORECASE=1 '/ipv4/ && /freebox/ {print "réseau : "$4,$5}'
réseau : Freebox Server

~$ avahi-browse -d local _http._tcp -tk | gawk -vIGNORECASE=1 '$3 == "ipv4" && /freebox/ {print "réseau : "$4,$5}'
réseau : Freebox Server

~$

-vIGNORECASE=1, c’est pour le -i de grep.
Et j’ai ajouté le texte « réseau : » pour aller avec le code actuel de la détection automatique (pour la liste à afficher le cas échéant).

Hors ligne

#277 Aujourd'hui à 15:38

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

pour la liste qui devrait s' afficher au cas ou plusieurs imprimantes sont trouvées , ne pourrait on pas faire :

# NET_printer_name= ???
    declare -a printer_IP printer_name
    my_IP="$(hostname -I | cut -d ' ' -f1)"
    mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')
    #printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
    #echo "${printer_IP[*]}"
    for p_ip in "${printer_IP[@]}"; do
        if wget -E "$p_ip" -O "$tmpDir/index.html"; then
            printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
            #echo "printer_name == ${printer_name[*]}"
        fi
    done
    #echo "printer_name RESULT ==
    #TAB printer_IP == ${printer_IP[*]}
    #TAB printer_name == ${printer_name[*]}"

    # USB_printer_name= ???
    if lsusb | grep -q 04f9:
    then
        mapfile -t printer_usb < <(lsusb | gawk '/04f9:/ {print $10}')
        for p_usb in "${printer_usb[@]}"
        do
            printer_name+=( "$p_usb" )
            printer_IP+=("USB") # +++++
        done
    fi
    #echo "printer_name ==
    #${#printer_name[*]} ,
    #${printer_name[*]}"

    case ${#printer_name[*]} in
        0) echo "Aucune imprimante détectée !
           Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?"
           # on repars donc avec les questions de base : modele etc ...
            ;;
        1)  echo "Une seule imprimante détectée."
            modelName=${printer_name[0]##* } # ! printer_name != printerName
            if [[ ${printer_name[0]} =~ "^réseau" ]]
            then
                IP=${printer_IP[0]}
            else
                usb="true"
            fi
            # pas besoin de poser de question , il ne reste plus qu ' a installer
            ;;
        *)  echo "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modele du materriel : IP ou USB
            # et demander à l' utilisateur de choisir un numero dans cette liste
            n_print=$(("${#printer_name[@]}"))
            for n in "${!printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${printer_name[$n]} : ${printer_IP[$n]}" # +++ l ' affichage serait OK directement , pas le cas si les 2 tableaux n ' ont pas autant d' indice chacun je suppose ?
            done
            while test -z "$choix"
            do
                read -rp "Choisissez le numero qui correspond à l’imprimante que voulez installer : " choix
                if ! ((choix > 0 && choix <= n_print))
                then
                    echo "Choix invalide !"
                    unset choix
                fi
            done
            modelName="${printer_name[$((choix-1))]##* }"
            D_IP=${printer_IP[$((choix-1))]}
            if ! test "$D_IP" = "USB";then
                IP="$D_IP"
            fi
            # if [[ ${printer_name[$((choix-1))]} =~ "^réseau" ]]
            # then
            #     IP=${printer_IP[$((choix-1))]}
            # else
            #     usb="true"
            # fi
            ;;
    esac
...
#check IP
if test "$D_IP" = "USB"
then
    echo "Installation en USB."
else
    until test -n "$IP"
...
etc 

et ne mettre que : " une IP " ou USB dans le tableau printer_IP
supprimer : " reseau : " et " USB  true " .
introduire une nouvelle variable de substitution : " $D(=display)_IP => D_IP temporairement à la place de  "$IP" , en disant que
IP="$D_IP" si c' est une IP ?

dans la suite du code , il me semble que ca simplifierait les choses et eviterait de devoir faire des regex , est ce utile / mieux ou pas ?

qu ' en penses tu ?



sinon , j 'avais pas fait attention , mais , c' est quoi ça ? :

modelName="${printer_name[$((choix-1))]##* }"

à la fin le " ##* " ?
pour mettre la variable en majuscule ?

Dernière modification par iznobe (Aujourd'hui à 16:14)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#278 Aujourd'hui à 15:57

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Pour le awk avec avahi browse  .
si on ne considere que les imprimantes de marque brother , il faudrait avoir un avahi-browse  sur une brother je vais essayer en SSH sur mon pi , ca devrait le faire .

en fonction , du retour de :

avahi-browse -d local _http._tcp -tk

ou

avahi-browse -d local _http._tcp -tkp

on pourra alors aviser .

voici ce que j ' obtiens pour chacune des commandes ci-dessus :

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk
+   eth0 IPv4 mysmartwifi                                   _http._tcp           local
+   eth0 IPv6 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 Brother DCP-L3560CDW series                   _http._tcp           local
+     lo IPv4 Brother DCP-L3560CDW series (USB)             _http._tcp           local
+   eth0 IPv4 smartlink                                     _http._tcp           local
iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tkp
+;eth0;IPv6;Brother\032DCP-L3560CDW\032series;_http._tcp;local
+;eth0;IPv4;smartlink;_http._tcp;local
+;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local
+;eth0;IPv4;mysmartwifi;_http._tcp;local
+;lo;IPv4;Brother\032DCP-L3560CDW\032series\032\040USB\041;_http._tcp;local
iznobe@k-pi3:~ $ 

Dernière modification par iznobe (Aujourd'hui à 16:05)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#279 Aujourd'hui à 16:00

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

l'évaluation arithmétique est inutile : la partie entre crochet est déjà adns un "contexte arithmétique".
la substitution ne retourne que la partie de la variable après le dernier espace.

$ ar=( 'a b c' 'd e f' k l m )
$ i=2
$ echo ${ar[i-1]}
d e f
$ echo ${ar[i-1]##* }
f

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#280 Aujourd'hui à 16:02

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Watael a écrit :

l'évaluation arithmétique est inutile : la partie entre crochet est déjà adns un "contexte arithmétique".
la substitution ne retourne que la partie de la variable après le dernier espace.

Merci Watael pour l' explication .
si il n' y a pas  d' espace ? et il ne devrait pas y en avoir dans le nom du modele justement ...

EDIT : je me réponds :
ok , et bien en fait ca ne sert à rien quand pas de dernier espace , puisque :

iznobe@iznobe-pc:~$ ar=( 'abc' 'def' klm )
iznobe@iznobe-pc:~$ i=2
iznobe@iznobe-pc:~$ echo ${ar[i-1]}
def
iznobe@iznobe-pc:~$ echo ${ar[i-1]##* }
def
iznobe@iznobe-pc:~$

Dernière modification par iznobe (Aujourd'hui à 16:18)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#281 Aujourd'hui à 16:06

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

bon , ca va apporter de la confusion mon histoire .
juste j' ajoute USB au tableau printer_IP pour l' affichage et ne touche pas au reste pour le moment .
ce qui donne ( avant modification avahi ) :

#!/bin/bash -x
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
 # définitions de variables
 # gestion des arguments
 # infos Brother
 # quelques fonctions
 # quelques vérifications
 # initialisation du tableau associatif `printer'
 # vérification de variables disponibles dans `printer'
 # préparation du système
 # téléchargement des pilotes
 # configuration de l'imprimante
 # configuration du scanner
# <

shopt -s extglob nullglob globstar

############################
 # définitions de variables
############################
if test -f /etc/lsb-release
then
    . /etc/lsb-release
    DistroName="$DISTRIB_ID"
    VersionYear="${DISTRIB_RELEASE::2}"
    codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
    . /usr/lib/os-release
    DistroName="$NAME"
    VersionYear="${VERSION_ID::2}"
    codeName="$VERSION_CODENAME"
fi
user="$SUDO_USER"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"

declare -A printer
declare -i err

#################
 # infos Brother
#################
# ancienne adresse d' obtention des infos :
#Url_Info="http://www.brother.com/pub/bsc/linux/infs"
# nouvelle adresse :
Url_Info="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
#Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"

#Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as"

#######################
 # quelques fonctions #
#######################
errQuit()
{
    >&2 echo "$@"
    exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
    local lien=$1 cible=$2
    if ! test -L "$lien"
    then
        ln -s "$cible" "$lien"
    fi
}
install_pkg()
{
    for pkg do
        if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
        then
            apt-get install -qq "$pkg"
        fi
    done
}

###########################
 # quelques vérifications #
###########################
if test "$DistroName" != "Ubuntu"; then errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles."; fi
if test "$SHELL" != "/bin/bash"; then errQuit "Shell non compatible. utilisez : bash"; fi
if test "$arch" != "x86_64"; then errQuit "Système non compatible."; fi
# if [[ $arch != @(i386|i686|x86_64) ]]
if ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; fi
if ! nc -z -w5 'brother.com' 80; then errQuit "le site \"brother.com\" n'est pas joignable."; fi

######################
 # prérequis pour le script #
######################
apt-get update -qq
# script : "wget" "nmap" "libxml2-utils" " gawk"
# imprimantes : "multiarch-support" "lib32stdc++6" "cups"
# scanner : "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
install_pkg "wget" "nmap" "libxml2-utils" "gawk"

if ! test -d "$tmpDir"
then
    mkdir -pv "$tmpDir"
fi
declare -u modelName=$1
if test -z "$modelName"
then
    ##########################
     # DETECTION AUTOMATIQUE #
    ##########################
    # NET_printer_name= ???
    declare -a printer_IP printer_name
    my_IP="$(hostname -I | cut -d ' ' -f1)"
    mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')
    #printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
    #echo "${printer_IP[*]}"
    for p_ip in "${printer_IP[@]}"; do
        if wget -E "$p_ip" -O "$tmpDir/index.html"; then
            printer_name+=( "réseau : $(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
            #echo "printer_name == ${printer_name[*]}"
        fi
    done
    #echo "printer_name RESULT ==
    #TAB printer_IP == ${printer_IP[*]}
    #TAB printer_name == ${printer_name[*]}"

    # USB_printer_name= ???
    if lsusb | grep -q 04f9:
    then
        mapfile -t printer_usb < <(lsusb | gawk '/04f9:/ {print $10}')
        for p_usb in "${printer_usb[@]}"
        do
            printer_name+=( "usb : $p_usb" )
            printer_IP+=("USB")
        done
    fi
    #echo "printer_name ==
    #${#printer_name[*]} ,
    #${printer_name[*]}"

    case ${#printer_name[*]} in
        0) echo "Aucune imprimante détectée !
           Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?"
           # on repars donc avec les questions de base : modele etc ...
            ;;
        1)  echo "Une seule imprimante détectée."
            modelName=${printer_name[0]} # ! printer_name != printerName
            if [[ ${printer_name[0]} =~ "^réseau" ]]
            then
                IP=${printer_IP[0]}
            else
                usb="true"
            fi
            # pas besoin de poser de question , il ne reste plus qu ' a installer
            ;;
        *)  echo "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modele du materriel : IP ou USB
            # et demander à l' utilisateur de choisir un numero dans cette liste
            n_print=$(("${#printer_name[@]}"))
            for n in "${!printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${printer_name[$n]}  :  ${printer_IP[$n]}"
            done
            while test -z "$choix"
            do
                read -rp "Choisissez le numero qui correspond à l’imprimante que voulez installer : " choix
                if ! ((choix > 0 && choix <= n_print))
                then
                    echo "Choix invalide !"
                    unset choix
                fi
            done
            modelName="${printer_name[$((choix-1))]}"
            if [[ ${printer_name[$((choix-1))]} =~ "^réseau" ]]
            then
                IP=${printer_IP[$((choix-1))]}
            else
                usb="true"
            fi
            ;;
    esac
#else
    ##########################
     # gestion des arguments #
    ##########################
    # if test -n "$modelName"; then
    #     modelName="${modelName^^}"
    # else
    #     declare -u modelName=$1
    # fi
    until test -n "$modelName"
    do
        read -rp 'Entrez le modèle de votre imprimante : ' modelName
    done
fi
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
if test "$usb" = "true"
then
    echo "Installation en USB."
else
    until test -n "$IP"
    do
        read -rp "Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] "
        [[ $REPLY == [YyOo] ]] || break
        if test -n "$2"
        then
            IP=$2
            shift $#
        else
            read -rp "Entrez l’adresse IP de votre imprimante : " IP
        fi
        IFS='.' read -ra ip <<< "$IP"
        for i in "${ip[@]}"
        do
            ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+="1"
        done
        if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
        then
            err=0
            unset IP
        fi
    done
fi

###################################################
 # initialisation du tableau associatif `printer' #
###################################################
# creation $Url_PrinterInfo
Url_PrinterInfo="$Url_Info/$printerName"
F_P_fichier_Info="$tmpDir/$printerName.info"
wget -q "$Url_PrinterInfo" -O "$F_P_fichier_Info"
if ! test "$(grep PRINTERNAME "$F_P_fichier_Info" | cut -d= -f2)" == "$printerName"
then
    errQuit "Les données du fichier info récupéré et le nom de l’imprimante ne correspondent pas."
elif test "$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"; then
    Url_PrinterInfo="$Url_Info/$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"
fi
#echo "$Url_PrinterInfo"
while IFS='=' read -r k v
do
    printer[$k]=$v
done < <(wget -qO- "$Url_PrinterInfo" | sed '/\(]\|rpm\|=\)$/d')

#########################################################
 # vérification de variables disponibles dans `printer' #
#########################################################
if test -n "${printer[SCANNER_DRV]}"
then
    install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
    printer[udev_rules]="$Udev_Deb_Name"
    . <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
    . <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
    printer[SCANNER_DRV]="$scanner_DEB64"
    printer[SCANKEY_DRV]="$scanKey_DEB64"

    if test -n "$VersionYear"; then
        if (( VersionYear >= 24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
        then
            printer[SCANKEY_DRV]="$Scankey_Drv_Deb_Name"
        fi
    else
        errQuit "Impossible d’évaluer la version de la distribution."
    fi
else
    err+="1"
    echo "Pas de pilote pour le scanner."
fi

###########################
 # préparation du système #
###########################
# a remettre le script en service
# if test -f "$Logfile"; then
#     Old_Date="$(head -n1 "$Logfile")"
#     mv -v "$Logfile" "$Logfile"."$Old_Date".log
# fi
# echo "$date" >> "$Logfile" # indispensable pour la rotation du log .
install_pkg "multiarch-support" "lib32stdc++6" "cups"

for d in "/usr/share/cups/model" "/var/spool/lpd"
do
    if ! test -d "$d"
    then
        mkdir -pv "$d"
    fi
done

for i in \
    DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} \
    FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} \
    MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
    if test "$i" = "$modelName"
    then
        install_pkg "csh"
    fi
done
for i in \
    DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
    FAX-{2{850,900},3800,4{100,750e},5750e} \
    HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
    MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
    if test "$i" = "$modelName"
    then
        verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
        if test -L /sbin/init
        then
            verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
            systemd daemon-reload
        fi
    fi
done

###############################
 # téléchargement des pilotes #
###############################
#echo " DL DRV TAB == ${printer[*]}"
for drv in "${printer[@]}"
do
    if [[ $drv == @($printerName|no|yes) ]]; then continue;fi
    for addr in "$Url_Pkg"
    do
        if ! test -f "$tmpDir/$drv"
        then
            Url_Deb="$Url_Pkg/$drv"
            if test "$drv" = "${printer[udev_rules]}"
            then
                Url_Deb="$Udev_Deb_Url/$drv"
            fi
            wget -cP "$tmpDir" "$Url_Deb"
        else
            break
        fi
    done
    pkg2install+=( "$tmpDir/$drv" )
done
echo "PKG2INSTALL == ${pkg2install[*]}"
#installation des pilotes
if (( ${#pkg2install[*]} == 0 ))
then
    errQuit "Rien à installer."
else
    dpkg --install --force-all  "${pkg2install[@]}"
fi

##################################
 # configuration de l'imprimante #
##################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in "PRN_CUP_DEB" "PRN_DRV_DEB"
do
    pkg=${printer[$drv]}
    #echo "pkg == $pkg"
    if test -n "$pkg" -a -f "$tmpDir/$pkg"
    then
        while read -rd '' fileName # avec ou sans option " r " ?
        do
            PPDs+=( "$fileName" )
        done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"} /ppd/{sub(".","",$NF); print $NF}')
    fi
done
#echo "PPDs == ${PPDs[*]}"
if test -z "$Ppd_File"
then
    PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
    0) echo "no ppd"
        err+="1"
        ;;
    1)  echo one ppd
        Ppd_File=${PPDs[0]}
        ;;
    *)  err+="1"
        echo "more than one ppd"
        Ppd_File=${PPDs[0]}
        ;;
esac

cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
systemctl restart cups
sleep 1

if test -n "$IP"
then
    lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
    lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi

#############################
 # configuration du scanner #
#############################
if test -z "$IP"
then #USB
    if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
    then
        echo " - Règle udev deja presente dans le fichier $Udev_Rules"
    else
        sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
            \n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
        udevadm control --reload-rules
    fi
else #network
    for saneConf in /usr/bin/brsaneconfig{,{2..5}}
    do
        test -x "$saneConf" && cmd=$saneConf
    done
    if test -z "$cmd"
    then
        errQuit "no brsaneconfig found."
    elif test "$cmd" = '/usr/bin/brsaneconfig4'
    then
        sed -i '/Support Model/a\
            0x029a, 117, 1, "MFC-8690DW", 133, 4\
            0x0279, 14, 2, "DCP-J525W"\
            0x027b, 13, 2, "DCP-J725DW"\
            0x027d, 13, 2, "DCP-J925DW"\
            0x027f, 14, 1, "MFC-J280W"\
            0x028f, 13, 1, "MFC-J425W"\
            0x0281, 13, 1, "MFC-J430W"\
            0x0280, 13, 1, "MFC-J435W"\
            0x0282, 13, 1, "MFC-J625DW"\
            0x0283, 13, 1, "MFC-J825DW"\
            0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
    fi
    $cmd -a name=SCANNER model="$modelName" ip="$IP"
fi

if test -d "$libDir"
then
    case $cmd in
        /usr/bin/brsaneconfig)
            cd "$libDir" || exit;
            cp --force /usr/lib64/libbrcolm.so.1.0.1 .
            ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
            ln -sf libbrcolm.so.1 libbrcolm.so
            cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
            ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
            ln -sf libbrscandec.so.1 libbrscandec.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
            ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
            ln -sf libsane-brother.so.1 libsane-brother.so
            ;;
        /usr/bin/brsaneconfig2)
            cd "$libDir" || exit
            cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
            ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
            ln -sf libbrscandec2.so.1 libbrscandec2.so
            cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
            ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
            ln -sf libbrcolm2.so.1 libbrcolm2.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
            ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
            ln -sf libsane-brother2.so.1 libsane-brother2.so
            ;;
        /usr/bin/brsaneconfig3)
            cd "$libDir" || exit
            cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
            ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
            ln -sf libbrscandec3.so.1 libbrscandec3.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
            ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
            ln -sf libsane-brother3.so.1 libsane-brother3.so
            ;;
        /usr/bin/brsaneconfig4)
            cd "$libDir"/sane || exit
            ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
            ln -sf libsane-brother4.so.1 libsane-brother4.so
            ;;
        /usr/bin/brsaneconfig5)
            cd "$libDir"/sane || exit
            ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
            ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
            ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
            ;;
    esac
fi

github actualisé .

Dernière modification par iznobe (Aujourd'hui à 16:42)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#282 Aujourd'hui à 16:45

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

iznobe a écrit :
# +++ l ' affichage serait OK directement , pas le cas si les 2 tableaux n ' ont pas autant d' indice chacun je suppose ?

Je n’y avais pas pensé mais, dans la mesure où on renseigne d’abord les éventuelles imprimantes réseau, les imprimantes USB sont en fin de liste. Il ne devrait donc pas y avoir de problème.

iznobe a écrit :

qu ' en penses tu ?

C’est faisable mais je ne vois pas vraiment où le code est plus simple à part qu’on s’affranchit de la variable usb.
Il faudrait aussi modifier le cas d’une seule imprimante et on peux se passer de la variable $D_IP :

…
    ##########################
     # DETECTION AUTOMATIQUE #
    ##########################
    # NET_printer_name= ???
    declare -a printer_IP printer_name
    my_IP="$(hostname -I | cut -d ' ' -f1)"
    mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')
    #printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
    #echo "${printer_IP[*]}"
    for p_ip in "${printer_IP[@]}"; do
        if wget -E "$p_ip" -O "$tmpDir/index.html"; then
            # version robuste :
            printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
            #echo "printer_name == ${printer_name[*]}"
        fi
    done
    #echo "printer_name RESULT ==
    #TAB printer_IP == ${printer_IP[*]}
    #TAB printer_name == ${printer_name[*]}"

    # USB_printer_name= ???
    if lsusb | grep -q 04f9:
    then
        mapfile -t printer_usb < <(lsusb | gawk '/04f9:/ {print $10}')
        for p_usb in "${printer_usb[@]}"
        do
            printer_name+=( "$p_usb" )
            printer_IP+=( "USB" )
        done
    fi
    #echo "printer_name ==
    #${#printer_name[*]} ,
    #${printer_name[*]}"

    case ${#printer_name[*]} in
        0) echo "Aucune imprimante détectée !
           Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?"
           # on repars donc avec les questions de base : modele etc ...
            ;;
        1)  echo "Une seule imprimante détectée."
            modelName=${printer_name[0]} # ! printer_name != printerName
            IP=${printer_IP[0]}
            # pas besoin de poser de question , il ne reste plus qu ' a installer
            ;;
        *)  echo "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modele du materriel : IP ou USB
            # et demander à l' utilisateur de choisir un numero dans cette liste
            n_print=$(("${#printer_name[@]}"))
            for n in "${!printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${printer_name[$n]} ${printer_IP[$n]}"
            done
            while test -z "$choix"
            do
                read -rp "Choisissez le numero qui correspond à l’imprimante que voulez installer : " choix
                if ! ((choix > 0 && choix <= n_print))
                then
                    echo "Choix invalide !"
                    unset choix
                fi
            done
            modelName="${printer_name[choix-1]}"
            IP=${printer_IP[choix-1}
            else
                usb="true"
            fi
            ;;
    esac
#else
    ##########################
     # gestion des arguments #
    ##########################
    # if test -n "$modelName"; then
    #     modelName="${modelName^^}"
    # else
    #     declare -u modelName=$1
    # fi
    until test -n "$modelName"
    do
        read -rp 'Entrez le modèle de votre imprimante : ' modelName
    done
fi
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
if test "$IP" = "USB"
then
    echo "Installation en USB."
else
    until test -n "$IP"
    do
        read -rp "Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] "
        [[ $REPLY == [YyOo] ]] || break
        if test -n "$2"
        then
            IP=$2
            shift $#
        else
            read -rp "Entrez l’adresse IP de votre imprimante : " IP
        fi
        IFS='.' read -ra ip <<< "$IP"
        for i in "${ip[@]}"
        do
            ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+="1"
        done
        if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
        then
            err=0
            unset IP
        fi
    done
fi

###################################################
 # initialisation du tableau associatif `printer' #
###################################################
…

 


iznobe a écrit :

sinon , j 'avais pas fait attention , mais , c' est quoi ça ? :

modelName="${printer_name[$((choix-1))]##* }"

à la fin le " ##* " ?
pour mettre la variable en majuscule ?

C’était pour effacer le suffixe (réseau ou usb) que j’avais ajouté.

Dernière modification par nany (Aujourd'hui à 20:14)

Hors ligne

#283 Aujourd'hui à 16:58

lynn

Re : remise au gout du jour du script de demonipuch imprimante brother

Dans le script, j'ai du mal à comprendre comment la ligne suivante peut donner un résultat pertinent :

mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')

En adaptant à mon I.P et en enlevant le filtre bien sur, la commande suivante

sudo nmap -sn -oG - 192.138.0.38/24

me renvoie ça :

# Nmap 7.95 scan initiated Sun Aug 17 16:33:55 2025 as: nmap -sn -oG - 192.138.0.38/24
Host: 192.138.0.1 ()	Status: Up
Host: 192.138.0.2 ()	Status: Up
Host: 192.138.0.8 ()	Status: Up
Host: 192.138.0.9 ()	Status: Up
Host: 192.138.0.12 ()	Status: Up
Host: 192.138.0.45 ()	Status: Up
Host: 192.138.0.238 ()	Status: Up
Host: 192.138.0.239 ()	Status: Up
Host: 192.138.0.255 ()	Status: Up
# Nmap done at Sun Aug 17 16:34:03 2025 -- 256 IP addresses (9 hosts up) scanned in 7.97 seconds

Il n'y a pas de trace d'un quelconque nom d'imprimante... Est-ce que l'I.P est vraiment importante du moment qu'on arrive à déterminer le modèle de l'imprimante existant ?

Autrement, il y a également lpstat qui donne des infos sur le modèle :

lpstat -a
Canon_MF620C_Series accepte des requêtes depuis dim. 17 août 2025 15:59:36
lpstat -v
matériel pour Canon_MF620C_Series : implicitclass://Canon_MF620C_Series/

Et aussi arp-scan qui donnera une liste d'I.P dont celle de l'imprimante mais sans nommer implicitement la marque (mes adresses MAC sont masqués):

sudo arp-scan -q --localnet
Interface: eno1, type: EN10MB, MAC: xx:xx:xx:xx:xx:xx, IPv4: 192.168.0.38
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.0.27	xx:xx:xx:xx:xx:xx
192.168.0.44	xx:xx:xx:xx:xx:xx
192.168.0.1	xx:xx:xx:xx:xx:xx
192.168.0.9	xx:xx:xx:xx:xx:xx
192.168.0.28	xx:xx:xx:xx:xx:xx
192.168.0.7	xx:xx:xx:xx:xx:xx
192.168.0.39	xx:xx:xx:xx:xx:xx
192.168.0.47	xx:xx:xx:xx:xx:xx
192.168.0.10	xx:xx:xx:xx:xx:xx
192.168.0.254	xx:xx:xx:xx:xx:xx
192.168.0.6	xx:xx:xx:xx:xx:xx

11 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.868 seconds (137.04 hosts/sec). 11 responded

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#284 Aujourd'hui à 17:09

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Curieusement , avec avahi , on obtient aussi la brother en USB :

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk
+   eth0 IPv6 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 smartlink                                     _http._tcp           local
+   eth0 IPv4 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 mysmartwifi                                   _http._tcp           local
+     lo IPv4 Brother DCP-L3560CDW series (USB)             _http._tcp           local
iznobe@k-pi3:~ $ 

du coup , je ne sais pas trop quoi faire :
+ me baser sur " IPv6 " pour n' en avoir qu ' une ?
+ vérifier en + si le champ (USB) est présent ?  peut etre qu on pourrait se passer du coup de " lsusb" , a voir / vérifier .
+ vérifier les 2 1ers champs en + ... ce qui serait le plus judicieux certainement et le plus long .

bon , c' est pas gagné pour avahi-browse roll :

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk
+   eth0 IPv6 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 smartlink                                     _http._tcp           local
+   eth0 IPv4 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 mysmartwifi                                   _http._tcp           local
+     lo IPv4 Brother DCP-L3560CDW series (USB)             _http._tcp           local
iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk | gawk '/IPv4/ && /Brother/ {print "réseau : "$5}'avahi-resolve -n -4 "$host".local | cut -c1-"${#host}" + 6)
bash: erreur de syntaxe près du symbole inattendu « ) »
iznobe@k-pi3:~ $ avahi-resolve -n -4 "$host".local | cut -c1-"${#host}" + 6)
bash: erreur de syntaxe près du symbole inattendu « ) »
iznobe@k-pi3:~ $ avahi-resolve -n -4 "$host".local | cut -c1-"${#host}" + 6
cut: intervalle décroissant incorrect
Saisissez « cut --help » pour plus d'informations.
Failed to create host name resolver: Invalid host name
iznobe@k-pi3:~ $ host=Brother
iznobe@k-pi3:~ $ avahi-resolve -n -4 "$host".local | cut -c1-"${#host}" + 6
cut: +: Aucun fichier ou dossier de ce type
cut: 6: Aucun fichier ou dossier de ce type
Failed to resolve host name 'Brother.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "$host".local
Failed to resolve host name 'Brother.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 'Brother DCP-L3560CDW'.local
Failed to resolve host name 'Brother DCP-L3560CDW.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "Brother DCP-L3560CDW".local
Failed to resolve host name 'Brother DCP-L3560CDW.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "Brother".local
Failed to resolve host name 'Brother.local': Timeout reached

retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#285 Aujourd'hui à 17:11

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

iznobe a écrit :

voici ce que j ' obtiens pour chacune des commandes ci-dessus :

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk
+   eth0 IPv4 mysmartwifi                                   _http._tcp           local
+   eth0 IPv6 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 Brother DCP-L3560CDW series                   _http._tcp           local
+     lo IPv4 Brother DCP-L3560CDW series (USB)             _http._tcp           local
+   eth0 IPv4 smartlink                                     _http._tcp           local
iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tkp
+;eth0;IPv6;Brother\032DCP-L3560CDW\032series;_http._tcp;local
+;eth0;IPv4;smartlink;_http._tcp;local
+;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local
+;eth0;IPv4;mysmartwifi;_http._tcp;local
+;lo;IPv4;Brother\032DCP-L3560CDW\032series\032\040USB\041;_http._tcp;local
iznobe@k-pi3:~ $ 
avahi-browse -d local _http._tcp -tk | gawk '/IPv4/ && /Brother/ && !/USB/ {print $5}'

?

Hors ligne

#286 Aujourd'hui à 17:19

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

lynn a écrit :

Dans le script, j'ai du mal à comprendre comment la ligne suivante peut donner un résultat pertinent :

mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')

En adaptant à mon I.P et en enlevant le filtre bien sur, la commande suivante

sudo nmap -sn -oG - 192.138.0.38/24

me renvoie ça :

# Nmap 7.95 scan initiated Sun Aug 17 16:33:55 2025 as: nmap -sn -oG - 192.138.0.38/24
Host: 192.138.0.1 ()	Status: Up
Host: 192.138.0.2 ()	Status: Up
Host: 192.138.0.8 ()	Status: Up
Host: 192.138.0.9 ()	Status: Up
Host: 192.138.0.12 ()	Status: Up
Host: 192.138.0.45 ()	Status: Up
Host: 192.138.0.238 ()	Status: Up
Host: 192.138.0.239 ()	Status: Up
Host: 192.138.0.255 ()	Status: Up
# Nmap done at Sun Aug 17 16:34:03 2025 -- 256 IP addresses (9 hosts up) scanned in 7.97 seconds

Il n'y a pas de trace d'un quelconque nom d'imprimante...

Je suppose qu’une imprimante Brother affiche quelque chose comme

Host: xx.xx.xx.xx (Brother)	Status: Up
lynn a écrit :

Est-ce que l'I.P est vraiment importante du moment qu'on arrive à déterminer le modèle de l'imprimante existant ?

Oui, l’IP est nécessaire pour l’installation en réseau.

Hors ligne

#287 Aujourd'hui à 17:22

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

lynn a écrit :

j'ai du mal à comprendre comment la ligne suivante peut donner un résultat pertinent :

mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')

Pour que le nom de l ' imprimante apparaisse , il faut que celle-ci puisse être jointe via son IP:80 ( un serveur web auto-hebergé par l' imprimante pour fournir le status et diverses infos + parfois certains reglages .
Si ton imprimante ne possède pas cette fonction elle n ' apparaît donc pas dans le retour de nmap , ni dans celui de xmlint .

Apres , forcément , si une imprimante ne " divulgue " pas son nom m/DNS sur le réseau ( hostname ) , il sera impossible de l ' identifier ( ou je ne sais pas faire en tout cas )  .
C ' est pour ça que malgré la détection automatique ( qui est toujours en cours de construction ) , il reste la possibilité de rentrer les infos à la main , comme au bon vieux temps big_smile

Dernière modification par iznobe (Aujourd'hui à 17:58)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#288 Aujourd'hui à 17:29

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

nany a écrit :
avahi-browse -d local _http._tcp -tk | gawk '/IPv4/ && /Brother/ && !/USB/ {print $5}'

?

Parfait ! wink

Reste que je n' arrive pas a trouver l' ip avec la commande :

avahi-resolve -n -4 "$host".local

dejà il faudrait arriver a savoir quel est le nom d' hote precisément ... pour le mettre dans "$host" .


mes derniers essais ne sont pas concluant , peut etre je m' y prends mal :

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tk
+   eth0 IPv6 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 smartlink                                     _http._tcp           local
+   eth0 IPv4 Brother DCP-L3560CDW series                   _http._tcp           local
+   eth0 IPv4 mysmartwifi                                   _http._tcp           local
+     lo IPv4 Brother DCP-L3560CDW series (USB)             _http._tcp           local
iznobe@k-pi3:~ $ avahi-resolve -n -4 "mysmartwifi".local
mysmartwifi.local	192.168.1.1
iznobe@k-pi3:~ $ avahi-resolve -n -4 "smartlink".local
smartlink.local	192.168.1.49
iznobe@k-pi3:~ $ avahi-resolve -n -4 "Brother DCP-L3560CDW series".local
Failed to resolve host name 'Brother DCP-L3560CDW series.local': Timeout reached
iznobe@k-pi3:~ $ 
iznobe@k-pi3:~ $ avahi-resolve -n -4 'Brother DCP-L3560CDW'.local
Failed to resolve host name 'Brother DCP-L3560CDW.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "Brother DCP-L3560CDW".local
Failed to resolve host name 'Brother DCP-L3560CDW.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "Brother".local
Failed to resolve host name 'Brother.local': Timeout reached
iznobe@k-pi3:~ $ avahi-resolve -n -4 "DCP-L3560CDW".local
Failed to resolve host name 'DCP-L3560CDW.local': Timeout reached

il doit exister d' autre façons de faire .

Dernière modification par iznobe (Aujourd'hui à 17:32)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#289 Aujourd'hui à 17:42

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ok , bon , ca me parait pas si simple au final d' utiliser avahi ...
j ' ai pas explorer toutes les options , mais pour mon imprimante HP chez moi par exemple :

iznobe@iznobe-pc:~$ avahi-browse -art | grep -i hp
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _uscans._tcp         local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _uscans._tcp         local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _privet._tcp         local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _privet._tcp         local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Secure Internet Printer local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Secure Internet Printer local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _uscan._tcp          local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _uscan._tcp          local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _http-alt._tcp       local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _http-alt._tcp       local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _scanner._tcp        local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _scanner._tcp        local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Web Site             local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Web Site             local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Internet Printer     local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Internet Printer     local
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               PDL Printer          local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               PDL Printer          local
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               PDL Printer          local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "mac=50:81:40:13:9f:3c" "priority=40" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               PDL Printer          local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "mac=50:81:40:13:9f:3c" "priority=40" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Internet Printer     local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "Fax=F" "TLS=1.2" "note=" "adminurl=http://HP508140139F3C.local./#hId-pgAirPrint" "mac=50:81:40:13:9f:3c" "priority=20" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,FN3,IS1,V1.4" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "rp=ipp/print" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Web Site             local
   hostname = [HP508140139F3C.local]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _scanner._tcp        local
   hostname = [HP508140139F3C.local]
   txt = ["feeder=T" "flatbed=T" "button=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "mdl=DeskJet 3700 series" "mfg=HP" "ty=HP DeskJet 3700 series" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _http-alt._tcp       local
   hostname = [HP508140139F3C.local]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _uscan._tcp          local
   hostname = [HP508140139F3C.local]
   txt = ["duplex=F" "is=adf" "cs=binary,color,grayscale" "rs=eSCL" "representation=images/printer.png" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "ty=HP DeskJet 3700 series" "pdl=application/octet-stream,application/pdf,image/jpeg" "vers=2.5" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               Secure Internet Printer local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "Fax=F" "TLS=1.2" "note=" "adminurl=http://HP508140139F3C.local./#hId-pgAirPrint" "mac=50:81:40:13:9f:3c" "priority=30" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,FN3,IS1,V1.4" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "rp=ipp/print" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _privet._tcp         local
   hostname = [HP508140139F3C.local]
   txt = ["cs=offline" "id=" "type=printer" "url=https://www.google.com/cloudprint" "note=" "ty=HP DeskJet 3700 series [139F3C]" "txtvers=1"]
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _uscans._tcp         local
   hostname = [HP508140139F3C.local]
   txt = ["duplex=F" "is=adf" "cs=binary,color,grayscale" "rs=eSCL" "representation=images/printer.png" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "ty=HP DeskJet 3700 series" "pdl=application/octet-stream,application/pdf,image/jpeg" "vers=2.5" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Internet Printer     local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "Fax=F" "TLS=1.2" "note=" "adminurl=http://HP508140139F3C.local./#hId-pgAirPrint" "mac=50:81:40:13:9f:3c" "priority=20" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,FN3,IS1,V1.4" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "rp=ipp/print" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Web Site             local
   hostname = [HP508140139F3C.local]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _scanner._tcp        local
   hostname = [HP508140139F3C.local]
   txt = ["feeder=T" "flatbed=T" "button=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "mdl=DeskJet 3700 series" "mfg=HP" "ty=HP DeskJet 3700 series" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _http-alt._tcp       local
   hostname = [HP508140139F3C.local]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _uscan._tcp          local
   hostname = [HP508140139F3C.local]
   txt = ["duplex=F" "is=adf" "cs=binary,color,grayscale" "rs=eSCL" "representation=images/printer.png" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "ty=HP DeskJet 3700 series" "pdl=application/octet-stream,application/pdf,image/jpeg" "vers=2.5" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               Secure Internet Printer local
   hostname = [HP508140139F3C.local]
   txt = ["Scan=T" "Duplex=F" "Color=T" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "Fax=F" "TLS=1.2" "note=" "adminurl=http://HP508140139F3C.local./#hId-pgAirPrint" "mac=50:81:40:13:9f:3c" "priority=30" "usb_MDL=DeskJet 3700 series" "usb_MFG=HP" "product=(HP DeskJet 3700 series)" "ty=HP DeskJet 3700 series" "URF=CP1,MT1-2-8-9-10-11,PQ3-4-5,RS300,SRGB24,OB9,OFU0,W8-16,DEVW8-16,DEVRGB24-48,ADOBERGB24-48,FN3,IS1,V1.4" "kind=document,envelope,photo,postcard" "PaperMax=legal-A4" "rp=ipp/print" "pdl=application/vnd.hp-PCL,image/jpeg,application/PCLm,image/urf,image/pwg-raster" "qtotal=1" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _privet._tcp         local
   hostname = [HP508140139F3C.local]
   txt = ["cs=offline" "id=" "type=printer" "url=https://www.google.com/cloudprint" "note=" "ty=HP DeskJet 3700 series [139F3C]" "txtvers=1"]
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _uscans._tcp         local
   hostname = [HP508140139F3C.local]
   txt = ["duplex=F" "is=adf" "cs=binary,color,grayscale" "rs=eSCL" "representation=images/printer.png" "UUID=5066d230-9605-d800-e402-f2a1cf0fc11a" "note=" "adminurl=http://HP508140139F3C.local." "ty=HP DeskJet 3700 series" "pdl=application/octet-stream,application/pdf,image/jpeg" "vers=2.5" "txtvers=1"]
iznobe@iznobe-pc:~$ avahi-resolve -n -4 HP508140139F3C.local
HP508140139F3C.local	192.168.1.112
iznobe@iznobe-pc:~$ 

EDIT :
ok , il faut simplement " resoudre " les noms d' hotes :

iznobe@iznobe-pc:~$ avahi-browse -d local _http._tcp -tkr
+ enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _http._tcp           local
+ enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _http._tcp           local
= enp2s0 IPv4 HP DeskJet 3700 series [139F3C]               _http._tcp           local
   hostname = [HP508140139F3C.local]
   address = [192.168.1.112]
   port = [80]
   txt = []
= enp2s0 IPv6 HP DeskJet 3700 series [139F3C]               _http._tcp           local
   hostname = [HP508140139F3C.local]
   address = [192.168.1.112]
   port = [80]
   txt = []
iznobe@iznobe-pc:~$

et on a tout d' un coup en " human readable " .

et la version a utiliser en script , on y ajoute l' option parsé ( -p ) :

iznobe@iznobe-pc:~$ avahi-browse -d local _http._tcp -tkrp
+;enp2s0;IPv6;HP\032DeskJet\0323700\032series\032\091139F3C\093;_http._tcp;local
+;enp2s0;IPv4;HP\032DeskJet\0323700\032series\032\091139F3C\093;_http._tcp;local
=;enp2s0;IPv4;HP\032DeskJet\0323700\032series\032\091139F3C\093;_http._tcp;local;HP508140139F3C.local;192.168.1.112;80;
=;enp2s0;IPv6;HP\032DeskJet\0323700\032series\032\091139F3C\093;_http._tcp;local;HP508140139F3C.local;192.168.1.112;80;
iznobe@iznobe-pc:~$

du coup il faut modifier le Field Separator dans gawk ? et ajuster le tir pour extraire l ' IP et le nom du modele de l' imprimante ?

Au secours tongue


la " vraie " commande  et son retour , si une bon âme passe par là pour me faire ce machin svp wink

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tkrp | gawk '/IPv4/ && /Brother/ && !/USB/'
+;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local
=;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local;BRN94DDF80CF268.local;192.168.1.84;80;
iznobe@k-pi3:~ $ 

la ligne a ciblée commence par le " = " , ce qui indique que l' IP a  étée resolue .

Dernière modification par iznobe (Aujourd'hui à 18:10)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#290 Aujourd'hui à 18:49

lynn

Re : remise au gout du jour du script de demonipuch imprimante brother

Une autre approche avec nmap :

On récupère les I.Ps actives :

mapfile -t activeIPs < <(nmap -p 80,443 --open 192.168.0.0/24 -oG - | awk '/\/open/ && !/^#/{print $2}')

Et on va à la pêche aux infos en fonction de ces seules I.P :

for ip in "${activeIPs[@]}"; do
  # On vérifie si il y a des occurrences de la marque sur la page                    
  if wget -qO- --no-check-certificate --timeout=1 "http://$ip" 2>/dev/null | grep -qi "browser"; then
    # On récupère le modèle dans le titre, puis affichage du modèle et de l'I.P           
    title=$(wget -qO- --no-check-certificate --timeout=1 "http://$ip" 2>/dev/null | awk -F'[<>]' '/<title>/ {print $3}')
    model=$(echo "$title" | awk -F': ' '{print $NF}')                           
    echo "I.P : $ip"
    echo "Modèle : $model"
    break
  fi
done

Ça fonctionne chez moi avec une Canon, je ne peux pas tester avec une Browser... il faudra peut-être adapter !?


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#291 Aujourd'hui à 19:07

diesel

Re : remise au gout du jour du script de demonipuch imprimante brother

Chez moi :

jean-marie@jean-marie:~$ avahi-resolve --name -6 $(avahi-browse -aprt | grep ^= | grep IPv6 | grep Brother | grep -v Web | cut -d";" -f7)
BRNB42200CCEABC.local	fe80::b622:ff:fecc:eabc
jean-marie@jean-marie:~$

ou

jean-marie@jean-marie:~$ avahi-resolve --name -4 $(avahi-browse -aprt | grep ^= | grep IPv6 | grep Brother | grep -v Web | cut -d";" -f7)
BRNB42200CCEABC.local	192.168.0.66
jean-marie@jean-marie:~$

Facile, non ?

Oui, je sais, on n'est pas obligé de piper les grep. smile

Amicalement.

Jean-Marie

Dernière modification par diesel (Aujourd'hui à 19:21)


Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.

Hors ligne

#292 Aujourd'hui à 19:44

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

iznobe a écrit :

la " vraie " commande  et son retour , si une bon âme passe par là pour me faire ce machin svp wink

iznobe@k-pi3:~ $ avahi-browse -d local _http._tcp -tkrp | gawk '/IPv4/ && /Brother/ && !/USB/'
+;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local
=;eth0;IPv4;Brother\032DCP-L3560CDW\032series;_http._tcp;local;BRN94DDF80CF268.local;192.168.1.84;80;
iznobe@k-pi3:~ $ 

la ligne a ciblée commence par le " = " , ce qui indique que l' IP a  étée resolue .

Sans les grep | grep | grep… :

avahi-browse -d local _http._tcp -tkrp | gawk -F';' '/^=/ && /IPv4/ && /Brother/ && !/USB/ {sub(/Brother\\032/,"",$4); sub(/\\032.*/,"",$4); print $4,$8}'

Hors ligne

#293 Aujourd'hui à 20:00

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ça fonctionne nickel @nany wink

a la place de " print $4,$8 ", est il possible de mettre le contenu dans une variable ?
si non , comment je peux faire pour le coup ?

@lynn , le problème avec nmap ( bien que ca me semble plus simple ) , c' est que tout de même assez long entre 5 et 10 secondes environ selon les machines / réseaux ...
alors que avec avahi , c' est pratiquement instantané roll
D' ailleurs le code en place fonctionne à merveille , mais trop long ...

@diesel , je dois recuperer le nom du modèle de l' imprimante et son IP .
le " hostname " n ' était qu ' un intermédiaire pour recuperer l' IP , si on peut s' en passer , c' est encore mieux .

Dernière modification par iznobe (Aujourd'hui à 20:05)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#294 Aujourd'hui à 20:15

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

bon , je viens de tester l' affichage de la liste sur mon pi ( il a fallu modifié quelques vérifications tongue ) , avec nmap , tres long a afficher le retour mais voilà ce que ça donne :

iznobe@k-pi3:~ $ sudo bash Watael.script.sh 
--2025-08-17 20:12:30--  http://192.168.1.84/
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : /home/status.html [suivant]
--2025-08-17 20:12:30--  http://192.168.1.84/home/status.html
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 5138 (5,0K) [text/html]
Sauvegarde en : « /tmp/packages/index.html »

/tmp/packages/index.ht 100%[===========================>]   5,02K  --.-KB/s    ds 0s      

2025-08-17 20:12:30 (17,7 MB/s) — « /tmp/packages/index.html » sauvegardé [5138/5138]

Plusieurs imprimantes ont été détectées.
 1  ⇒  réseau :   :  192.168.1.84
 2  ⇒  usb : DCP-L3560CDW  :  USB
Choisissez le numero qui correspond à l’imprimante que voulez installer : 2
USB : DCP-L3560CDW
iznobe@k-pi3:~ $

Du coup on est vraiment pas mal pour la détection auto !
seul " hic " on a pas le nom du modèle .

EDIT , en fait le paquet libxml2-utils n ' a pas été installé , surement pour cela que le nom du modele ne s' est pas affiché .

Dernière modification par iznobe (Aujourd'hui à 20:38)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#295 Aujourd'hui à 20:16

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

iznobe a écrit :

a la place de " print $4,$8 ", est il possible de mettre le contenu dans une variable ?

Un truc dans le genre :

printer_name_ip=( $(avahi-browse -d local _http._tcp -tkrp | gawk -F';' '/^=/ && /IPv4/ && /Brother/ && !/USB/ {sub(/Brother\\032/,"",$4); sub(/\\032.*/,"",$4); print $4,$8}') )
modelName="${printer_name_ip[0]}"
IP=${printer_name_ip[1]}

?

Bien sûr, il faut adapter en cas de présence de plusieurs imprimantes.

Dernière modification par nany (Aujourd'hui à 20:17)

Hors ligne

#296 Aujourd'hui à 20:19

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

oui , mais je sens que ca va pas etre si simple que ce qui est deja en place ...


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#297 Aujourd'hui à 21:20

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

nany a écrit :
iznobe a écrit :
# +++ l ' affichage serait OK directement , pas le cas si les 2 tableaux n ' ont pas autant d' indice chacun je suppose ?

Je n’y avais pas pensé mais, dans la mesure où on renseigne d’abord les éventuelles imprimantes réseau, les imprimantes USB sont en fin de liste. Il ne devrait donc pas y avoir de problème.

iznobe a écrit :

qu ' en penses tu ?

C’est faisable mais je ne vois pas vraiment où le code est plus simple à part qu’on s’affranchit de la variable usb.
Il faudrait aussi modifier le cas d’une seule imprimante et on peux se passer de la variable $D_IP :

…
    ##########################
     # DETECTION AUTOMATIQUE #
    ##########################
    # NET_printer_name= ???
    declare -a printer_IP printer_name
    my_IP="$(hostname -I | cut -d ' ' -f1)"
    mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')
    #printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
    #echo "${printer_IP[*]}"
    for p_ip in "${printer_IP[@]}"; do
        if wget -E "$p_ip" -O "$tmpDir/index.html"; then
            # version robuste :
            printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
            #echo "printer_name == ${printer_name[*]}"
        fi
    done
    #echo "printer_name RESULT ==
    #TAB printer_IP == ${printer_IP[*]}
    #TAB printer_name == ${printer_name[*]}"

    # USB_printer_name= ???
    if lsusb | grep -q 04f9:
    then
        mapfile -t printer_usb < <(lsusb | gawk '/04f9:/ {print $10}')
        for p_usb in "${printer_usb[@]}"
        do
            printer_name+=( "$p_usb" )
            printer_IP+=( "USB" )
        done
    fi
    #echo "printer_name ==
    #${#printer_name[*]} ,
    #${printer_name[*]}"

    case ${#printer_name[*]} in
        0) echo "Aucune imprimante détectée !
           Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?"
           # on repars donc avec les questions de base : modele etc ...
            ;;
        1)  echo "Une seule imprimante détectée."
            modelName=${printer_name[0]} # ! printer_name != printerName
            IP=${printer_IP[0]}
            # pas besoin de poser de question , il ne reste plus qu ' a installer
            ;;
        *)  echo "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modele du materriel : IP ou USB
            # et demander à l' utilisateur de choisir un numero dans cette liste
            n_print=$(("${#printer_name[@]}"))
            for n in "${!printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${printer_name[$n]} ${printer_IP[$n]}"
            done
            while test -z "$choix"
            do
                read -rp "Choisissez le numero qui correspond à l’imprimante que voulez installer : " choix
                if ! ((choix > 0 && choix <= n_print))
                then
                    echo "Choix invalide !"
                    unset choix
                fi
            done
            modelName="${printer_name[choix-1]}"
            IP=${printer_IP[choix-1}
            else
                usb="true"
            fi
            ;;
    esac
#else
    ##########################
     # gestion des arguments #
    ##########################
    # if test -n "$modelName"; then
    #     modelName="${modelName^^}"
    # else
    #     declare -u modelName=$1
    # fi
    until test -n "$modelName"
    do
        read -rp 'Entrez le modèle de votre imprimante : ' modelName
    done
fi
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
if test "$IP" = "USB"
then
    echo "Installation en USB."
else
    until test -n "$IP"
    do
        read -rp "Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] "
        [[ $REPLY == [YyOo] ]] || break
        if test -n "$2"
        then
            IP=$2
            shift $#
        else
            read -rp "Entrez l’adresse IP de votre imprimante : " IP
        fi
        IFS='.' read -ra ip <<< "$IP"
        for i in "${ip[@]}"
        do
            ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+="1"
        done
        if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
        then
            err=0
            unset IP
        fi
    done
fi

###################################################
 # initialisation du tableau associatif `printer' #
###################################################
…

 


iznobe a écrit :

sinon , j 'avais pas fait attention , mais , c' est quoi ça ? :

modelName="${printer_name[$((choix-1))]##* }"

à la fin le " ##* " ?
pour mettre la variable en majuscule ?

C’était pour effacer le suffixe (réseau ou usb) que j’avais ajouté.

Faut que je me penche sérieusement et au calme sur cette partie là .
en allant un peu plus loin que la liste multiple en détection auto lors des tests sur mon pi , j ' obtiens :

iznobe@k-pi3:~ $ sudo bash ubuntu.team.sh 
--2025-08-17 21:03:04--  http://192.168.1.84/
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : /home/status.html [suivant]
--2025-08-17 21:03:04--  http://192.168.1.84/home/status.html
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 5138 (5,0K) [text/html]
Sauvegarde en : « /tmp/packages/index.html »

/tmp/packages/index.ht 100%[===========================>]   5,02K  --.-KB/s    ds 0s      

2025-08-17 21:03:04 (47,9 MB/s) — « /tmp/packages/index.html » sauvegardé [5138/5138]

Plusieurs imprimantes ont été détectées.
 1  ⇒  réseau : DCP-L3560CDW  :  192.168.1.84
 2  ⇒  usb : DCP-L3560CDW  :  USB
Choisissez le numero qui correspond à l’imprimante que voulez installer : 1
 printerName == RÉSEAU : DCPL3560CDW
Installation en USB.
Les données du fichier info récupéré et le nom de l’imprimante ne correspondent pas.
iznobe@k-pi3:~ $

en modifiant " reseau : " ou " usb : " , le nom de l' imprimante detectée devient :
" printerName == RÉSEAU : DCPL3560CDW " et fausse le script puisque on fait :

printer_name+=( "réseau : $(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
...
echo "Une seule imprimante détectée."
            modelName=${printer_name[0]} 
            if [[ ${printer_name[0]} =~ "^réseau" ]]
# forcément modelName ne doit PAS commencer par : " reseau " ...

retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#298 Aujourd'hui à 21:56

nany

Re : remise au gout du jour du script de demonipuch imprimante brother

Normal, dans le code sur github il n’y a pas la substitution (##* ).
Il faut :

modelName=${printer_name[0]##* }

Et plus bas :

modelName=${printer_name[choix-1]##* }

Ou bien tu reprends tout ce que j’ai mis en #282 (d’ailleurs j’ai fait une erreur dans ma réponse : c’est le préfixe et non le suffixe).

Dernière modification par nany (Aujourd'hui à 22:21)

Hors ligne

#299 Aujourd'hui à 21:57

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

voici ma version de test sur le pi ( remise en forme pour ubuntu si j' ai rien oublié ) qui avance un peu , il est fort probable que je n' ai pas tous corriger ...
le script s' arrete sur le pi à la ligne 251 :

install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
#!/bin/bash -x
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
 # définitions de variables
 # gestion des arguments
 # infos Brother
 # quelques fonctions
 # quelques vérifications
 # initialisation du tableau associatif `printer'
 # vérification de variables disponibles dans `printer'
 # préparation du système
 # téléchargement des pilotes
 # configuration de l'imprimante
 # configuration du scanner
# <

shopt -s extglob nullglob globstar

############################
 # définitions de variables
############################
if test -f /etc/lsb-release
then
    . /etc/lsb-release
    DistroName="$DISTRIB_ID"
    VersionYear="${DISTRIB_RELEASE::2}"
    codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
    . /usr/lib/os-release
    DistroName="$NAME"
    VersionYear="${VERSION_ID::2}"
    codeName="$VERSION_CODENAME"
fi
user="$SUDO_USER"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"

declare -A printer
declare -i err

#################
 # infos Brother
#################
# ancienne adresse d' obtention des infos :
#Url_Info="http://www.brother.com/pub/bsc/linux/infs"
# nouvelle adresse :
Url_Info="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
#Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"

#Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as"

#######################
 # quelques fonctions #
#######################
errQuit()
{
    >&2 echo "$@"
    exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
    local lien=$1 cible=$2
    if ! test -L "$lien"
    then
        ln -s "$cible" "$lien"
    fi
}
install_pkg()
{
    for pkg do
        if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
        then
            apt-get install -qq "$pkg"
        fi
    done
}

###########################
 # quelques vérifications #
###########################
#if test "$DistroName" != "Ubuntu"; then errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles."; fi
if test "$SHELL" != "/bin/bash"; then errQuit "Shell non compatible. utilisez : bash"; fi
#if test "$arch" != "armv7l"; then errQuit "Système non compatible."; fi
# if [[ $arch != @(i386|i686|) ]] armv7l
if test "$arch" != "x86_64"; then errQuit "Système non compatible."; fi
if ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; fi
if ! nc -z -w5 'brother.com' 80; then errQuit "le site \"brother.com\" n'est pas joignable."; fi

######################
 # prérequis pour le script #
######################
# a remettre le script en service
# if test -f "$Logfile"; then
#     Old_Date="$(head -n1 "$Logfile")"
#     mv -v "$Logfile" "$Logfile"."$Old_Date".log
# fi
# echo "$date" >> "$Logfile" # indispensable pour la rotation du log .
apt-get update -qq
# script : "wget" "nmap" "libxml2-utils" " gawk"
# imprimantes : "multiarch-support" "lib32stdc++6" "cups"
# scanner : "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
install_pkg "wget" "nmap" "libxml2-utils" "gawk"

if ! test -d "$tmpDir"
then
    mkdir -pv "$tmpDir"
fi
declare -u modelName=$1
if test -z "$modelName"
then
    ##########################
     # DETECTION AUTOMATIQUE #
    ##########################
    # NET_printer_name= ???
    declare -a printer_IP printer_name
    my_IP="$(hostname -I | cut -d ' ' -f1)"
    mapfile -t printer_IP < <(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')
    #printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
    #echo "${printer_IP[*]}"
    for p_ip in "${printer_IP[@]}"; do
        if wget -E "$p_ip" -O "$tmpDir/index.html"; then
            printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
            #echo "printer_name == ${printer_name[*]}"
        fi
    done
    #echo "printer_name RESULT ==
    #TAB printer_IP == ${printer_IP[*]}
    #TAB printer_name == ${printer_name[*]}"

    # USB_printer_name= ???
    if lsusb | grep -q 04f9:
    then
        mapfile -t printer_usb < <(lsusb | gawk '/04f9:/ {print $10}')
        for p_usb in "${printer_usb[@]}"
        do
            printer_name+=( "$p_usb" )
            printer_IP+=("USB")
        done
    fi
    #echo "printer_name ==
    #${#printer_name[*]} ,
    #${printer_name[*]}"

    case ${#printer_name[*]} in
        0) echo "Aucune imprimante détectée !
           Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?"
           # on repars donc avec les questions de base : modele etc ...
            ;;
        1)  echo "Une seule imprimante détectée."
            modelName=${printer_name[0]} # ! printer_name != printerName
            IP=${printer_IP[0]}
            # pas besoin de poser de question , il ne reste plus qu ' a installer
            ;;
        *)  echo "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modele du materriel : IP ou USB
            # et demander à l' utilisateur de choisir un numero dans cette liste
            n_print=$(("${#printer_name[@]}"))
            for n in "${!printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${printer_name[$n]}  :  ${printer_IP[$n]}"
            done
            while test -z "$choix"
            do
                read -rp "Choisissez le numéro qui correspond à l’imprimante que voulez installer : " choix
                if ! ((choix > 0 && choix <= n_print))
                then
                    echo "Choix invalide !"
                    unset choix
                fi
            done
            modelName="${printer_name[$choix-1]}"
            IP=${printer_IP[$choix-1]}
            ;;
    esac
#else
    ##########################
     # gestion des arguments #
    ##########################
    until test -n "$modelName"
    do
        read -rp 'Entrez le modèle de votre imprimante : ' modelName
    done
fi

printerName="${modelName//-/}" # ! printer_name != printerName
# echo " printerName == $printerName"
#check IP
if test "$IP" = "USB" # ???????????????
then
    echo "Installation en USB."
else
    until test -n "$IP"
    do
        read -rp "Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] "
        [[ $REPLY == [YyOo] ]] || break
        if test -n "$2"
        then
            IP=$2
            shift $#
        else
            read -rp "Entrez l’adresse IP de votre imprimante : " IP
        fi
        IFS='.' read -ra ip <<< "$IP"
        for i in "${ip[@]}"
        do
            ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+="1"
        done
        if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
        then
            err=0
            unset IP
        fi
    done
fi

###################################################
 # initialisation du tableau associatif `printer' #
###################################################
# creation $Url_PrinterInfo
Url_PrinterInfo="$Url_Info/$printerName"
F_P_fichier_Info="$tmpDir/$printerName.info"
wget -q "$Url_PrinterInfo" -O "$F_P_fichier_Info"
if ! test "$(grep PRINTERNAME "$F_P_fichier_Info" | cut -d= -f2)" == "$printerName"
then
    errQuit "Les données du fichier info récupéré et le nom de l’imprimante ne correspondent pas."
elif test "$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"; then
    Url_PrinterInfo="$Url_Info/$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"
fi
#echo "$Url_PrinterInfo"
while IFS='=' read -r k v
do
    printer[$k]=$v
done < <(wget -qO- "$Url_PrinterInfo" | sed '/\(]\|rpm\|=\)$/d')

#########################################################
 # vérification de variables disponibles dans `printer' #
#########################################################
if test -n "${printer[SCANNER_DRV]}"
then
    install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
    printer[udev_rules]="$Udev_Deb_Name"
    . <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
    . <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
    printer[SCANNER_DRV]="$scanner_DEB64"
    printer[SCANKEY_DRV]="$scanKey_DEB64"

    if test -n "$VersionYear"; then
        if (( VersionYear >= 24 )) && test "${printer[SCANKEY_DRV]}" = "brscan-skey-0.3.2-0.amd64.deb"
        then
            printer[SCANKEY_DRV]="$Scankey_Drv_Deb_Name"
        fi
    else
        errQuit "Impossible d’évaluer la version de la distribution."
    fi
else
    err+="1"
    echo "Pas de pilote pour le scanner."
fi
exit
###########################
 # préparation du système #
###########################
install_pkg "multiarch-support" "lib32stdc++6" "cups"

for d in "/usr/share/cups/model" "/var/spool/lpd"
do
    if ! test -d "$d"
    then
        mkdir -pv "$d"
    fi
done

for i in \
    DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} \
    FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} \
    MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
    if test "$i" = "$modelName"
    then
        install_pkg "csh"
    fi
done
for i in \
    DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
    FAX-{2{850,900},3800,4{100,750e},5750e} \
    HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
    MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
    if test "$i" = "$modelName"
    then
        verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
        if test -L /sbin/init
        then
            verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
            systemd daemon-reload
        fi
    fi
done

###############################
 # téléchargement des pilotes #
###############################
#echo " DL DRV TAB == ${printer[*]}"
for drv in "${printer[@]}"
do
    if [[ $drv == @($printerName|no|yes) ]]; then continue;fi
    for addr in $Url_Pkg
    do
        if ! test -f "$tmpDir/$drv"
        then
            Url_Deb="$Url_Pkg/$drv"
            if test "$drv" = "${printer[udev_rules]}"
            then
                Url_Deb="$Udev_Deb_Url/$drv"
            fi
            wget -cP "$tmpDir" "$Url_Deb"
        else
            break
        fi
    done
    pkg2install+=( "$tmpDir/$drv" )
done
echo "PKG2INSTALL == ${pkg2install[*]}"
#installation des pilotes
if (( ${#pkg2install[*]} == 0 ))
then
    errQuit "Rien à installer."
else
    dpkg --install --force-all  "${pkg2install[@]}"
fi

##################################
 # configuration de l'imprimante #
##################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in "PRN_CUP_DEB" "PRN_DRV_DEB"
do
    pkg=${printer[$drv]}
    #echo "pkg == $pkg"
    if test -n "$pkg" -a -f "$tmpDir/$pkg"
    then
        while read -rd '' fileName # avec ou sans option " r " ?
        do
            PPDs+=( "$fileName" )
        done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"} /ppd/{sub(".","",$NF); print $NF}')
    fi
done
#echo "PPDs == ${PPDs[*]}"
if test -z "$Ppd_File"
then
    PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
    0) echo "no ppd"
        err+="1"
        ;;
    1)  echo one ppd
        Ppd_File=${PPDs[0]}
        ;;
    *)  err+="1"
        echo "more than one ppd"
        Ppd_File=${PPDs[0]}
        ;;
esac

cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
systemctl restart cups
sleep 1

if test -n "$IP"
then
    lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
    lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi

#############################
 # configuration du scanner #
#############################
if test -z "$IP"
then #USB
    if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
    then
        echo " - Règle udev deja presente dans le fichier $Udev_Rules"
    else
        sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
            \n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
        udevadm control --reload-rules
    fi
else #network
    for saneConf in /usr/bin/brsaneconfig{,{2..5}}
    do
        test -x "$saneConf" && cmd=$saneConf
    done
    if test -z "$cmd"
    then
        errQuit "no brsaneconfig found."
    elif test "$cmd" = '/usr/bin/brsaneconfig4'
    then
        sed -i '/Support Model/a\
            0x029a, 117, 1, "MFC-8690DW", 133, 4\
            0x0279, 14, 2, "DCP-J525W"\
            0x027b, 13, 2, "DCP-J725DW"\
            0x027d, 13, 2, "DCP-J925DW"\
            0x027f, 14, 1, "MFC-J280W"\
            0x028f, 13, 1, "MFC-J425W"\
            0x0281, 13, 1, "MFC-J430W"\
            0x0280, 13, 1, "MFC-J435W"\
            0x0282, 13, 1, "MFC-J625DW"\
            0x0283, 13, 1, "MFC-J825DW"\
            0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
    fi
    $cmd -a name=SCANNER model="$modelName" ip="$IP"
fi

if test -d "$libDir"
then
    case $cmd in
        /usr/bin/brsaneconfig)
            cd "$libDir" || exit;
            cp --force /usr/lib64/libbrcolm.so.1.0.1 .
            ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
            ln -sf libbrcolm.so.1 libbrcolm.so
            cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
            ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
            ln -sf libbrscandec.so.1 libbrscandec.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
            ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
            ln -sf libsane-brother.so.1 libsane-brother.so
            ;;
        /usr/bin/brsaneconfig2)
            cd "$libDir" || exit
            cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
            ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
            ln -sf libbrscandec2.so.1 libbrscandec2.so
            cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
            ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
            ln -sf libbrcolm2.so.1 libbrcolm2.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
            ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
            ln -sf libsane-brother2.so.1 libsane-brother2.so
            ;;
        /usr/bin/brsaneconfig3)
            cd "$libDir" || exit
            cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
            ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
            ln -sf libbrscandec3.so.1 libbrscandec3.so
            cd "$libDir"/sane || exit
            cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
            ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
            ln -sf libsane-brother3.so.1 libsane-brother3.so
            ;;
        /usr/bin/brsaneconfig4)
            cd "$libDir"/sane || exit
            ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
            ln -sf libsane-brother4.so.1 libsane-brother4.so
            ;;
        /usr/bin/brsaneconfig5)
            cd "$libDir"/sane || exit
            ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
            ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
            ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
            ;;
    esac
fi

avec le retour suivant ( probablement normal tongue vu que c ' est pas du 64 bit et une archi en armvl / armhf)

iznobe@k-pi3:~ $ sudo bash ubuntu.team.sh 
--2025-08-17 21:42:30--  http://192.168.1.84/
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : /home/status.html [suivant]
--2025-08-17 21:42:30--  http://192.168.1.84/home/status.html
Connexion à 192.168.1.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 5138 (5,0K) [text/html]
Sauvegarde en : « /tmp/packages/index.html »

/tmp/packages/index.ht 100%[===========================>]   5,02K  --.-KB/s    ds 0s      

2025-08-17 21:42:30 (13,8 MB/s) — « /tmp/packages/index.html » sauvegardé [5138/5138]

Plusieurs imprimantes ont été détectées.
 1  ⇒  DCP-L3560CDW  :  192.168.1.84
 2  ⇒  DCP-L3560CDW  :  USB
Choisissez le numero qui correspond à l’imprimante que voulez installer : 1
 printerName == DCPL3560CDW
E: Impossible de trouver le paquet libusb-0.1-4:amd64
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « libusb-0.1-4 »
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « libusb-0.1-4 »
E: Impossible de trouver le paquet libusb-0.1-4:i386
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « libusb-0.1-4 »
E: Impossible de trouver de paquet correspondant à l'expression rationnelle « libusb-0.1-4 »
iznobe@k-pi3:~ $ 

retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#300 Aujourd'hui à 22:05

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

nany a écrit :

Normal, dans le code sur github il n’y a pas la substitution (## ).
Il faut :

modelName=${printer_name[0]## }

Et plus bas :

modelName=${printer_name[choix-1]## }

Ou bien tu reprends tout ce que j’ai mis en #282 (d’ailleurs j’ai fait une erreur dans ma réponse : c’est le préfixe et non le suffixe).

le code en 282 que j' ai cité , comporte aussi une erreur dans le :
case
     *)
du coup je m' y suis collé a tout reprendre . voir dernier code du forum que j' ai posté , pas mis sur github depuis des heures .
Comme personne a répondu à ma question ( posée plusieurs fois ) , il serait plus sage de poster sur github ( pour eviter de surcharger le forum ) , mais bon , j' ai eu l' impression que ca plaisait a personne ...


Watael , m ' ayant expliqué que ca supprimait le suffixe , j' avais supprimé , puisque cela ne servait à rien big_smile
Bref , admettons , mais je trouve ca compliqué .
le code que j' ai mis dans mon dernier message , me parait plus simple , plus clair et fonctionnel . bon je ne l' ai pas testé longtemps , une seule fois ... il faut que je vérifie encore probablement . avec les autres possibilités :
la détection auto unique
en mode manuel .
ce que je ferais demain .

Dernière modification par iznobe (Aujourd'hui à 22:07)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne