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.

#376 Hier à 11:46

nany

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

nany a écrit :

Ainsi que l’option -o pour n’afficher que ce que l’on recherche.

En fait, non, ça affichera toute la chaîne recherchée.
Il faut donc passer nécessairement par grep -oP (ou peut-être sed).

Dernière modification par nany (Hier à 11:53)

Hors ligne

#377 Hier à 11:58

nany

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

nany a écrit :

(ou peut-être sed)

Par exemple :

sed -nr "s/^motif1(.*)motif2$/\1/p" /chemin/fichier

Hors ligne

#378 Hier à 14:46

Watael

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

Mais si on doit [se] passer [d']un double grep [et] le remplacer par awk !!! mad
wink


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

Hors ligne

#379 Hier à 17:38

iznobe

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

Merci @ nany pour toutes les infos complémentaires wink

peut on faire une fonction du genre :

logCmd() {
    $1=commande a executer
    log "$2" # message info pre commande
    exec $1 #execute la commande
    log_action_end_msg $?
}

le problème étant , $1 et son exécution ...
ca simplifierait grandement pour le log smile

à la place de :

log "installation des paquets"
    dpkg --install --force-all "${pkg2install[@]}"
    log_action_end_msg $?

je ferais donc :

logCmd 'dpkg --install --force-all "${pkg2install[@]}"' 'installation des paquets'

Dernière modification par iznobe (Hier à 17:47)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#380 Hier à 19:41

Watael

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

    exec $1 #execute la commande

non. $1 tout seul suffit, normalement.
je ferais le contraire :

logCmd 'installation des paquets' pkg2install dpkg --install --force-all

avec la fonction :

logCmd()
{
    declare -n packages=$2 #on passe le nom du tableau en référence
    log "$1"
    shift 2 #on supprime les deux premiers paramètres positionnels ($1 et $2)
    $@ "${packages[@]}" #on exécute le reste des paramètres (la commande) avec le tableau en référence
    logStatus $?
}

a priori...


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

Hors ligne

#381 Hier à 20:09

nany

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

Watael a écrit :

a priori...

A posteriori, je dirais que ${packages[@]} n’est pas systématiquement utilisé par la fonction ; iznobe donnait juste un exemple de commande pouvant être envoyée qui, par hasard, contient le tableau.

Hors ligne

#382 Hier à 20:11

iznobe

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

pas sur de bien comprendre ta reponse .

je cherche une fonction " générique " . je ne sais meme pas si c' est possible , d' ou la question .
qui marcherait avec n' importe quelle commande ( aussi bien celle ci-dessus ) que par exemple :

log "verification de la connecion au site Brother"
nc -z -w3 'brother.com' 80
log_action_end_msg $?

pour celle de dessus , dans le code actuel , j' ai :

log "installation des paquets précédemment récupérés"
    dpkg --install --force-all "${pkg2install[@]}"
    log_action_end_msg $?
iznobe@iznobe-pc:~$ sudo bash  Scripts/nany_brprinter_install.sh -m MFC-L2710DW
 2025-08-23_20:06:57
        # Ubuntu Codename : noble
        # Ubuntu Name : Ubuntu
        # Ubuntu Version : 24.04

        # Repertoire courant : /home/iznobe
        # Repertoire de telechargement des pilotes : /tmp/packages
        # Fichier journal : /home/iznobe/brprinter_install.log 
Scripts/nany_brprinter_install.sh: ligne 139 : declare: « nc -z -w3 'brother.com' 80 » : nom de variable invalide pour une référence de nom
 * verification de la connection au site Brother...                                                                                                   [ OK ] 
iznobe@iznobe-pc:~$ 

Dernière modification par iznobe (Hier à 20:15)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#383 Hier à 20:28

iznobe

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

Sinon , j ' ai introduit le journal , ce qui donne :

iznobe@iznobe-pc:~$ sudo bash  Scripts/nany_brprinter_install.sh -m MFC-L2710DW
 2025-08-23_20:20:32
        # Ubuntu Codename : noble
        # Ubuntu Name : Ubuntu
        # Ubuntu Version : 24.04

        # Repertoire courant : /home/iznobe
        # Repertoire de telechargement des pilotes : /tmp/packages
        # Fichier journal : /home/iznobe/brprinter_install.log 
 * verification de la connecion au site Brother...                                                            Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
                                                                                                       [ OK ]
 * Mise à jour des paquets...                                                                          [ OK ] 
 * Recherche du paquet : ' wget ' sur votre système...                                                 [ OK ] 
 * Recherche du paquet : ' libxml2-utils ' sur votre système...                                        [ OK ] 
 * Recherche du paquet : ' gawk ' sur votre système...                                                 [ OK ] 
 * Recherche du paquet : ' avahi-utils ' sur votre système...                                          [ OK ] 
Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] 
N
 * Installation en USB....                                                                                         # Modèle de l'imprimante : MFC-L2710DW
     # Type de connexion : USB
     # Adresse IP : Aucune
     # Fichier d'informations : https://download.brother.com/pub/com/linux/linux/infs/MFCL2710DW
     # page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as 
 * Recherche du paquet : ' libusb-0.1-4:amd64 ' sur votre système...                                   [ OK ] 
 * Recherche du paquet : ' libusb-0.1-4:i386 ' sur votre système...                                    [ OK ] 
 * Recherche du paquet : ' sane-utils ' sur votre système...                                           [ OK ] 
 * Recherche du paquet : ' multiarch-support ' sur votre système...                                           dpkg-query: aucun paquet ne correspond à multiarch-support
                                                                                                       [fail]
 * Installation du paquet : ' multiarch-support ' sur votre système...                                 [fail] 
 * Recherche du paquet : ' lib32stdc++6 ' sur votre système...                                         [ OK ] 
 * Recherche du paquet : ' cups ' sur votre système...                                                 [ OK ] 
 * installation des paquets précédemment récupérés...                                                         (Lecture de la base de données... 308262 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../mfcl2710dwpdrv-4.0.0-1.i386.deb ...
Restarting lpd (via systemctl): lpd.service.
Dépaquetage de mfcl2710dwpdrv:i386 (4.0.0-1) sur (4.0.0-1) ...
Restarting lpd (via systemctl): lpd.service.
Préparation du dépaquetage de .../brother-udev-rule-type1-1.0.2-0.all.deb ...
Dépaquetage de brother-udev-rule-type1 (1.0.2) sur (1.0.2) ...
Préparation du dépaquetage de .../brscan-skey-0.3.4-0.amd64.deb ...
Dépaquetage de brscan-skey (0.3.4-0) sur (0.3.4-0) ...
Préparation du dépaquetage de .../brscan4-0.4.11-1.amd64.deb ...
Dépaquetage de brscan4 (0.4.11-1) sur (0.4.11-1) ...
Paramétrage de mfcl2710dwpdrv:i386 (4.0.0-1) ...
Restarting lpd (via systemctl): lpd.service.
lpadmin -p MFCL2710DW -E -v usb://dev/usb/lp0 -P /usr/share/ppd/brother/brother-MFCL2710DW-cups-en.ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
Paramétrage de brother-udev-rule-type1 (1.0.2) ...
Paramétrage de brscan-skey (0.3.4-0) ...
Paramétrage de brscan4 (0.4.11-1) ...
This software is based in part on the work of the Independent JPEG Group.
                                                                                                       [ OK ]
 * Installation de l'imprimante USB...                                                                        lpadmin: Printer MFC-L2710DW is already a member of class brother.
                                                                                                       [ OK ]
 * Redémarrage du service cups...                                                                      [ OK ] 
 * Installation du scanner USB...                                                                      [ OK ] 
 Le fichier journal est situé à l'emplacement suivant : /home/iznobe/brprinter_install.log. 
 Vous pouvez le consulter avec la commande : cat /home/iznobe/brprinter_install.log 
iznobe@iznobe-pc:~$ 

j ' ai aussi modifié , la façon dont l' imprimante est ajoutée , mais je ne suis pas certain que ce sera compatible avec les versions les plus anciennes actuellement supportées sans fichier .ppd roll
je n' ai pas tester ce que donne ce code ( ni celui que @nany a fournit precedemment le " getopts " ) en mode " detection auto multi " .

lpadmin est déprécié , et c' est en changement , mais je ne sais pas quoi , quand , ni comment ...
en attendant voici le code :

#!/bin/bash
# MFC-L2710DW
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
 # définitions de variables
 # infos Brother
 # quelques fonctions
 # gestion des options
 # 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 # Cette ligne est-elle toujours d’actualité ?

#############################
 # définitions de variables #
#############################
if test -f /etc/lsb-release
then
    . /etc/lsb-release
    distroName="$DISTRIB_ID"
    versionYear="${DISTRIB_RELEASE::2}"
    version="${DISTRIB_RELEASE}"
    codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
    . /usr/lib/os-release
    distroName="$NAME"
    versionYear="${VERSION_ID::2}"
    version="${DISTRIB_ID}"
    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 -u modelName
declare -A printer
declare -i err
declare -a t_printer_IP t_printer_name

##################
 # infos Brother #
##################
# Infos
urlInfo="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
urlPkg="https://download.brother.com/pub/com/linux/linux/packages"

udevRules="/lib/udev/rules.d/60-libsane1.rules"
udevDebName="brother-udev-rule-type1-1.0.2-0.all.deb"
urlUdevDeb="http://download.brother.com/welcome/dlf006654"
scankeyDrvDebName="brscan-skey-0.3.4-0.amd64.deb"

#######################
 # quelques fonctions #
#######################
usage()
{
    echo "
    Usage : sudo $0 [-h] [-m <Nom_Modèle>] [-u|-i <adresse_IP>]
    
    Options :
        
        -h
            Affiche cette aide et quitte.
        
        -m <Nom_Modèle>
            Renseigne <Nom_Modèle> comme nom du modèle de l’imprimante.
            Le paramètre <Nom_Modèle> est obligatoire pour cette option.
        
        -u
            Choisissez cette option pour une installation en USB.
            Vous ne pouvez pas l’utiliser en même temps que l’option -i.
        
        -i <adresse_IP>
            Choisissez cette option pour une installation en réseau.
            <adresse_IP> sera alors considérée comme l’adresse de l’imprimante.
            Le paramètre <adresse_IP> est obligatoire pour cette option.
            Vous ne pouvez pas l’utiliser en même temps que l’option -u.
    "
}
errQuit()
{
    >&2 echo -e "\\033[1;31m Erreur : $@ \\033[0;0m"
    exit 1
}
verif_lien()
{
    local lien=$1 cible=$2
    if ! test -L "$lien"
    then
        ln -s "$cible" "$lien"
    fi
}
install_pkg()
{
    for pkg do
        log "Recherche du paquet : ' $pkg ' sur votre système"
        if dpkg-query -l "$pkg" | grep -q "^[hi]i"
        then
            log2file_o "Paquet ' $pkg ' deja installé"
            log_action_end_msg 0
        else
            log2file_o "Paquet ' $pkg ' non installé"
            log_action_end_msg 1
            log "Installation du paquet : ' $pkg ' sur votre système"
            apt-get install -qq "$pkg" &>> "$logFile"
            log_action_end_msg $?
        fi
    done
}
log() {
    message="$1"
    if test -z "$2"; then
        log_action_begin_msg "$message"
        log2file_o "$message"
    else
        if test "$2" == "Blue"; then color="\\033[1;34m";fi
        if test "$2" == "Red"; then color="\\033[1;31m";fi
            echo -e "$color $message \\033[0;0m" # Resetcolor
            echo -e "
            # $message" &>> "$logFile"
    fi
}
log2file_o() {
    echo -e " - $1" &>> "$logFile"
}

########################
 # gestion des options #
########################
while getopts "hm:ui:" opt
do
    case "$opt" in
        "h")
            usage
            exit 0
            ;;
        "m")
            modelName="$OPTARG"
            ;;
        "u")
            if test -z "$IP"
            then
                IP="USB"
            else
                usage
                errQuit "Vous ne pouvez pas utiliser l’option -u en même temps que l’option -i."
            fi
            ;;
        "i")
            if test "$IP" = "USB"
            then
                usage
                errQuit "Vous ne pouvez pas utiliser l’option -i en même temps que l’option -u."
            else
                IP="$OPTARG"
            fi
            ;;
        "?")
            usage
            errQuit "Erreur : mauvaise option ou argument manquant."
            ;;
    esac
done
shift $((OPTIND -1))
if (($#))
then
    usage
    errQuit "Erreur : trop d’arguments ou argument manquant dans une option."
fi

###########################
 # quelques vérifications #
###########################
if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
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 ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; 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 .

log "$date
        # Ubuntu Codename : $codeName
        # Ubuntu Name : $distroName
        # Ubuntu Version : $version

        # Repertoire courant : $PWD
        # Repertoire de telechargement des pilotes : $tmpDir
        # Fichier journal : $logFile" "Blue"

log "verification de la connecion au site Brother"
nc -z -w3 'brother.com' 80
log_action_end_msg $?
log "Mise à jour des paquets"
apt-get update -qq
log_action_end_msg $?
install_pkg "wget" "libxml2-utils" "gawk" "avahi-utils"

if ! test -d "$tmpDir"
then
    mkdir -pv "$tmpDir" >> logFile
fi

if test -z "$modelName"
then # DÉTECTION AUTOMATIQUE ##### VERSION AVAHI-BROWSE #####
    mapfile -t t_printers < <(avahi-browse -d local _http._tcp -tkrp | gawk -F';' '/^=/ && /IPv4/ && /Brother/')
    for p in "${t_printers[@]}"
    do
        t_printer_name+=( "$(echo "$p" | grep -oP 'Brother\\032\K[^\\]+')" )
        if [[ "$p" =~ '=;lo;' ]]; then # USB
            t_printer_IP+=( "USB" )
        else # reseau
            t_printer_IP+=( "$(echo "$p" | grep -oP '\.local\;\K[^\;]+')" )
        fi
    done

    case ${#t_printer_name[*]} in
        0) log "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 repart donc avec les questions de base : modèle etc.
            ;;
        1)  log "Une seule imprimante détectée."
            modelName=${t_printer_name[0]} # ! t_printer_name != printerName
            IP=${t_printer_IP[0]}
            # pas besoin de poser de question, il ne reste plus qu’à installer
            ;;
        *)  log "Plusieurs imprimantes ont été détectées."
            # il faut presenter sous forme de liste les éléments recupérés :
            # modèle du materriel : IP ou USB
            # et demander à l’utilisateur de choisir un numéro dans cette liste
            n_print=$(("${#t_printer_name[@]}"))
            for n in "${!t_printer_name[@]}"
            do
                echo " $((n+1))  ⇒  ${t_printer_name[$n]}  :  ${t_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
                    log "Choix invalide !" "Red"
                    unset choix
                fi
            done
            modelName="${t_printer_name[$choix-1]}"
            IP=${t_printer_IP[$choix-1]}
            ;;
    esac
    until test -n "$modelName"
    do
        read -rp 'Entrez le modèle de votre imprimante : ' modelName
    done
fi

printerName="${modelName//-/}" # ! t_printer_name != printerName
# check IP
# Trop complexe de tester l’IP à différents endroits.
# On ne la teste que lorsqu’elle est renseignée avec un errQuit si elle est erronée.
until test -n "$IP"
do
    read -rp "Voulez-vous configurer votre imprimante pour qu’elle fonctionne en réseau ? [o/N] "
    case "${REPLY,,}" in
        "o"|"oui"|"y"|"yes"|"O"|"Y")
            echo "o"
            until test -n "$IP"
            do
                read -rp "Entrez l’adresse IP de votre imprimante : " IP
            done
            ;;
        *)
            echo "N"
            IP="USB"
            break
            ;;
    esac
done
if test "$IP" = "USB"
then
    log "Installation en USB."
    connection="USB"
    unset IP
else
    log "Installation en réseau."
    connection="réseau"
    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
        errQuit "Adresse erronée !"
    fi
fi

if test -z "$IP"; then IP="Aucune"; fi
urlPrinterDl="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as" # comment cette variable (qui n’est pas utilisée) peut-elle être valide alors que ${printerName} n’est pas encore assignée ?
urlPrinterInfo="$urlInfo/$printerName"
log "    # Modèle de l'imprimante : $modelName
     # Type de connexion : $connection
     # Adresse IP : $IP
     # Fichier d'informations : $urlPrinterInfo
     # page de telechargement des pilotes : $urlPrinterDl" "Blue"
if test "$IP" = "Aucune"; then unset IP;fi

###################################################
 # initialisation du tableau associatif `printer' #
###################################################
# création $Url_PrinterInfo
Url_PrinterInfo="$urlInfo/$printerName"

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[LNK]}"; then # on telecharge le fichier donné en lien
    Url_PrinterInfo="$urlInfo/${printer[LNK]}" # ????
    while IFS='=' read -r k v
    do
        printer[$k]=$v
    done < <(wget -qO- "$Url_PrinterInfo" | sed '/\(]\|rpm\|=\)$/d')
fi
if ! test "${printer[PRINTERNAME]}" == "$printerName"
then
    errQuit "Les données du fichier info récupéré et le nom de l’imprimante ne correspondent pas."
fi
if test -n "${printer[SCANNER_DRV]}"
then
    install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
    printer[udev_rules]="$udevDebName"
    . <(wget -qO- "$urlInfo/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
    . <(wget -qO- "$urlInfo/${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]="$scankeyDrvDebName"
            log2file_o "changement de ${printer[SCANKEY_DRV]} pour $scankeyDrvDebName"
        fi
    else
        errQuit "Impossible d’évaluer la version de la distribution."
    fi
else
    err+="1"
    log "Pas de pilote pour le scanner." "Red"
fi

###########################
 # 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 #
###############################
for drv in "${printer[@]}"
do
    if [[ $drv == @($printerName|no|yes) ]]; then continue;fi
    if ! test -f "$tmpDir/$drv"
    then
        Url_Deb="$urlPkg/$drv"
        if test "$drv" = "${printer[udev_rules]}"
        then
            Url_Deb="$urlUdevDeb/$drv"
        fi
        log "Telechargement du pilote : $drv"
        wget -cP "$tmpDir" "$Url_Deb"
        log_action_end_msg $?
    fi
    pkg2install+=( "$tmpDir/$drv" )
done
log2file_o "Paquets à installer : ${pkg2install[*]}"

# installation des pilotes
if (( ${#pkg2install[*]} == 0 ))
then
    errQuit "Rien à installer."
else
    log "installation des paquets précédemment récupérés"
    dpkg --install --force-all "${pkg2install[@]}"
    log_action_end_msg $?
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]}
#     if test -n "$pkg" -a -f "$tmpDir/$pkg"
#     then
#         while read -rd '' fileName
#         do
#             PPDs+=( "$fileName" )
#         done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"} /ppd/{sub(".","",$NF); print $NF}')
#     fi
# done
# if test -z "$Ppd_File"
# then
#     PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
# fi
# if test -n "$IP"; then
#     case ${#PPDs[*]} in
#         0) log "Pas de fichier ppd trouvé." "Red"
#            err+="1"
#            ;;
#         1) log "Un fichier ppd trouvé."
#            Ppd_File=${PPDs[0]}
#            ;;
#         *) err+="1"
#            log "Plusieurs fichier ppd trouvés."
#            Ppd_File=${PPDs[0]}
#            ;;
#     esac
# else

# if test -n "$IP" -a -n "$Ppd_File";then
#     log "Installation de l'imprimante en réseau"
#     lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
#     log_action_end_msg $?
# elif test -z "$IP" -a -n "$Ppd_File";then
#     log "Installation de l'imprimante USB"
#     lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
#     log_action_end_msg $?
# elif test -z "$IP" -a -z "$Ppd_File";then
#     log "Installation de l'imprimante USB"
#     lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0'
#     log_action_end_msg $?
# elif test -n "$IP" -a -z "$Ppd_File";then
#     log "Installation de l'imprimante en réseau"
#     lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1"
#     log_action_end_msg $?
# else
#     errQuit "Impossible d'installer l'imprimante"
# fi

if test -z "$IP";then
    log "Installation de l'imprimante USB"
    lpadmin -p "$modelName" -c brother -E -v 'usb://dev/usb/lp0'
    log_action_end_msg $?
elif test -n "$IP";then
    log "Installation de l'imprimante en réseau"
    lpadmin -p "$modelName" -c brother -E -v "lpd://$IP/binary_p1"
    log_action_end_msg $?
else
    errQuit "Impossible d'installer l'imprimante"
fi

cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
log2file_o "Sauvegarde des fichiers de configuration : /etc/cups/printers.conf.O /etc/cups/printers.conf dans $tmpDir"
log "Redémarrage du service cups"
systemctl restart cups
log_action_end_msg $?

#############################
 # configuration du scanner #
#############################

if test -z "$IP"
then #USB
    if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$udevRules"
    then
        log "Règle udev deja presente dans le fichier $udevRules"
    else
        log "Installation du scanner USB"
        sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
            \n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$udevRules"
        log_action_end_msg $?
        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
    log "Installation du scanner réseau"
    $cmd -a name=SCANNER model="$modelName" ip="$IP"
    log_action_end_msg $?
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

echo -e "\\033[1;34m Le fichier journal est situé à l'emplacement suivant : $logFile. \\033[0;0m"
echo -e "\\033[1;34m Vous pouvez le consulter avec la commande : cat $logFile \\033[0;0m"
echo -e "\\033[1;34m il est possible de supprimer le dossier temporaire du script avec la commande : rm $tmpDir \\033[0;0m"
chown -R "$user": "$tmpDir" "$logFile"

retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#384 Hier à 21:50

jeange

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

Bonsoir,
merci pour toute votre énergie à l'actualisation de ce script que j'utilise depuis 13.10 mais depuis il me suffit de brancher en USB ma vénérable HL1110 qui est reconnue immédiatement et testée avec un PDF avec réussite !
Bravo à tous. wink
jeange


CLEVO W670SZQ  SSD 480Go  i3  Ram 12Go Ubuntu 22.04.5 et 24.04.3 LTS 64bit
Thinkpad X270 nvme 128Go i5 Ram 8Go Ubuntu 24.04.3 LTS 64bit
Merci de donner les retours avec les balises < > et les allers avec les valises, et toujours pas de raton laveur.
%NOINDEX%

Hors ligne