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.

#151 Le 11/08/2025, à 15:59

Watael

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

cf. #150

mais je vois pas l ' interet de creer un tableau , surtout qu ' on ne peut a priori utiliser qu ' un seul fichier ppd ( enfin je pense , pas verifié ).

c'est la question que je pose dans le script : que faire s'il y a plus d'un .ppd ?

Dernière modification par Watael (Le 11/08/2025, à 16:01)


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

Hors ligne

#152 Le 11/08/2025, à 16:07

iznobe

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

si la première URL fonctionne, il n'y a pas besoin de (il ne faut pas)  faire un second tour.

exact , mais dans ce cas , ne faut il pas plutot " continue " que " break " pour ne pas sortir de la boucle et faire la verif pour le paquet suivant ?

-------------------------------------------------

cela fait quoi ? un double test ?

if test "$arch" = "x86_64" -a -d "$libDir"

test 1 -a 2 == test 1 &&  test 2

-------------------------------------------------

faudrait que je teste le script , mais ca ne sera pas avant ce soir ...

Dernière modification par iznobe (Le 11/08/2025, à 16:09)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#153 Le 11/08/2025, à 16:29

Watael

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

continue comme son nom l'indique reprend la boucle, on ne sort pas de la boucle, on interrompt seulement sa poursuite pour reprendre au début avec l'argument suivant.
break fait sortir de la boucle définitivement; c'est ce qu'on veut : ne pas reprendre la boucle.

cela fait quoi ? un double test ?

oui,

test condition1 && test codition2

mais avec une seule commande test

help test a écrit :

EXPR1 -a EXPR2 Vrai si les deux expressions sont vraies.

test "$arch" = "x86_64" -a -d "$libDir"
TEST [     EXPR1      ] -a [     EXPR2    ]

il existe un OU : -o wink

Dernière modification par Watael (Le 11/08/2025, à 16:35)


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

Hors ligne

#154 Le 11/08/2025, à 16:45

iznobe

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

Watael a écrit :

cf. #150

mais je vois pas l ' interet de creer un tableau , surtout qu ' on ne peut a priori utiliser qu ' un seul fichier ppd ( enfin je pense , pas verifié ).

c'est la question que je pose dans le script : que faire s'il y a plus d'un .ppd ?

c' est deja un 2eme choix la trouvaille d ' un .ppd dans ce dossier . theoriquement , le .ppd est fourni avec le pilote maintenant si j' ai bien compris .
c ' est d' ailleurs ce que faisait le code de base de demonipuch ( la commande " dpk --contents " que tu as deja modifiée .
c ' est pour cela , que je n ' ai pas trouvé l' interet de me casser la tete avec un tableau de fichiers .ppd tongue
un seul me suffit , cellui que le script trouvera fera parfaitement l' affaire big_smile
Et à mon avis , dans le cas ou il y en aurais plusieurs , il y a de grandes chances que leur contenu soit de toute maniere identique ...

Apres , si tu veux vraiment etre parfait , je dirais qu ' il faudrait installer le fichier .ppd avec le plus de " poids " , vu qu ' il contiendra probablement plus de fonctions .



ha ben oui , j ' ai pas collé la 1ere ligne la boucle de " base " , au #149 ...

on interrompt seulement sa poursuite pour reprendre au début avec l'argument suivant.

si il y en a.
donc le break , interrompt la boucle imbriquée seulement . ok , je comprends mieux là . un continue " saute " le else , comme il n' y a que 2 arguments , ca interromp la boucle , ce qui revient au meme finalement dans ce cas .



Quand a :

Pourquoi brother ne fournit pas les bonnes infos

au sujet du paquet brscankey , aucune idée , ce que je sais , c' est que la version xxx.4 à la place de xxx.2 sur 24.04 , ca fonctionne .
et je suppose qu il en est de meme avec les versions suivantes d' ubuntu . on a pu verifier ça pour 25.04 deja .

Dernière modification par iznobe (Le 11/08/2025, à 17:10)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#155 Le 11/08/2025, à 17:53

Watael

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

ça ne revient pas au même.
si on a l'info dès le premier tour, alors on n'exécute pas le second tour, qui pourrait écraser l'info obtenue précédemment.


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

Hors ligne

#156 Le 11/08/2025, à 19:07

iznobe

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

1er essai , retour :

sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW 192.168.1.2
[sudo] Mot de passe de iznobe : 
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]:

puis :

Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-11 19:09:13--  https://download.brother.com/pub/com/linux/linux/packages//MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:09:16 erreur 404 : Not Found.

/MFCL2710DW: Schéma manquant.
--2025-08-11 19:09:16--  https://download.brother.com/pub/com/linux/linux/packages//no
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:09:17 erreur 404 : Not Found.

/no: Schéma manquant.
dpkg: erreur: ne peut pas accéder à l'archive « /tmp/packages/MFCL2710DW »: Aucun fichier ou dossier de ce nom
lpadmin: Unable to connect to server: Mauvais descripteur de fichier
Invalid IP address or NODENAME
iznobe@iznobe-pc:~$ 

correction 1 ? :

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

correction 2 , pas de slash aux fins d ' urls :

#################
 # infos Brother
#################
Url_Info="http://www.brother.com/pub/bsc/linux/infs"
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"

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

Le controle de l' IP ne fonctionne pas :

iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW 1111111111
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-11 19:36:19--  https://download.brother.com/pub/com/linux/linux/packages/MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:36:20 erreur 404 : Not Found.


heu , je vais pas aller plus loin big_smile
je vais pas tout redebugger alors que le script actuel fonctionne au poil .
il reste " juste " la regle UDEV à gerer et c' est fini .

Pour le fun , la correction du check IP:

#check IP
until test -n "$IP"
do
    test -n "$2" && IP="$2" || read -p "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
    [[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break

    IFS='.' read -ra ip <<< "$IP"
    for i in ${ip[@]}
    do
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
    done
    if ((err))
    then
        err=0
        unset IP
    fi
    if ! ping -qc2 "$IP";then read -rp "Entrez l'adresse IP de votre imprimante : " IP;fi
done

Dernière modification par iznobe (Le 11/08/2025, à 20:22)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#157 Le 11/08/2025, à 20:44

Watael

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

le script actuel fonctionne au poil .

soit, mais il est mal conçu. C'est surtout ça que veut montrer ma version sans fonctions superflues*.

--
* je suis surpris qu'il n'y ait pas une fonction main() pour exécuter toutes les autres fonctions. lol lol lol


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

Hors ligne

#158 Le 11/08/2025, à 23:49

iznobe

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

soit, mais il est mal conçu.

je suis plutot d' accord , mais je peux pas passer plusieurs semaines sur mon temps libre a debug des scripts .

Surtout le tien pour lequel , je n' ai pas un niveau suffisant .
je ne maitrise qu ' une infime partie du bash , et il y a enormément de subtilité et de choses que je ne connais pas . trop big_smile

Watael a écrit :

* je suis surpris qu'il n'y ait pas une fonction main() pour exécuter toutes les autres fonctions. lol lol lol

pour le fun tongue :

#!/bin/bash
# Script d'installation pour imprimantes Brother
# ecrit par @demonipuch .
# re-ecrit par ubuntu team : https://forum.ubuntu-fr.org/viewtopic.php?id=2091835&p=2

# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...

if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
shopt -s nullglob globstar extglob

valid_ip() {
    IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

control_ip() {
	if [[ -n "$IP" ]]; then
		if valid_ip "$IP"; then
			if ping -q -c2 "$IP"; then log_action_end_msg 0
			else
				log "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
				unset IP
				log_action_end_msg 1
			fi
		else
			log "L ' adresse IP que vous avez entrée est incorrecte"
			unset IP
			log_action_end_msg 1
		fi
	fi
}

install_pkg() {
	for pkg do
		log "Recherche du paquet : ' $pkg ' sur votre système"
		if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
			echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
			log_action_end_msg 0
		else
			echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
			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
}

verif_rep() {
	for dir do
	log "Recherche du dossier ' $dir ' sur votre système"
		if [[ -d "$dir" ]]; then log_action_end_msg 0;
		else
			log_action_end_msg 1
			log "Creation du dossier ' $dir '"
			mkdir -pv "$dir" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

verif_lien() { # utilisation : # verif_lien "lien" "cible" . affichage de ls -l ' lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible '
	# Musique -> /datas/iznobe/Musique
	# lien -> cible
	lien=$1
	cible=$2

	log "Recherche du lien ' $lien ' sur votre système"
	if ! test -L "$lien"; then
		log_action_end_msg 1
		log "Creation du lien ' $lien '"
		ln -s "$cible" "$lien" &>> "$Logfile"
		log_action_end_msg $?
	else log_action_end_msg $?;
	fi
}

log() {
	message="$1"
	if test -z "$2"; then
		log_action_begin_msg "$message"
		echo -e " - $message" &>> "$Logfile"
	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
}

############################
 # définitions de variables
############################
Model_Name="$1"
if [ -n "$2" ]; then
	IP="$2"
 	if control_ip "$IP"; then Connection="Réseau"; fi
fi

User="$SUDO_USER"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Temp_Dir="/tmp/packages"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Logfile="/home/$User/brprinter_install.log"
#Logfile="/home/$User/brprinter_install.$date.log"

declare -A printer

#################
 # 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"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
	# On vérifie qu'on lance le script en root
	if ((EUID)); then log "Vous devez lancer ce script en tant que root : sudo bash $0" "Red"; exit 1;fi
	if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then #  && [[ $Arch != "armv7l" ]]
		log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
		exit 2
	fi
	# on verifie la connection au serveur
	if ! nc -z -w5 'brother.com' 80; then
		log "serveur brother injoignable ! script interrompu." "Red"
		log "Veuillez verifier votre connexion internet." "Red"
		exit 3
	fi

	# Si le premier argument est vide on demande le modèle de l'imprimante
	while [[ -z "$Model_Name" ]]; do read -rp "Entrez votre modèle d' imprimante : " Model_Name;done
	Model_Name=${Model_Name^^}
	# Si le 2eme argument est vide on demande comment est connectée l'imprimante
	while [[ -z "$Connection" ]]; do
		read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
		case $REPLY in
			0)
				Connection="USB"
			;;
			1)
				Connection="Réseau"
				log "Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe." "Red"
				log "Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml" "Red"
			;;
		esac
	done
	# Si connection == reseau on demande l' IP de l'imprimante
	if [[ "$Connection" == "Réseau" ]]; then
		while [[ -z "$IP" ]]; do
			read -rp "Entrez l'adresse IP de votre imprimante : " IP
			control_ip "$IP"
	    done
	fi
	# On transforme le nom de l'imprimante ( enleve le " - " )
	Printer_Name="${Model_Name//-/}"
	# On construit l'URL du fichier contenant les informations
	Printer_Url_Info="$Url_Info/$Printer_Name"
	Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$Printer_Name""_us_eu_as"
	# resumé pour logfile
	log "                     $date
			# Ubuntu Codename : $Codename
			# Architecture : $Arch
			# Modèle de l'imprimante : $Model_Name
			# Type de connexion : $Connection
			# Adresse IP : $IP
			# Repertoire courant : $Temp_Dir
			# Repertoire de telechargement des pilotes : $Temp_Dir
			# Fichier d'informations : $Printer_Url_Info
			# page de telechargement des pilotes : $Printer_dl_url" "Blue"
	log "initialisation du script." "Blue"
	# on cree le repertoire temporaire de travail.
	verif_rep "$Temp_Dir"
	# On vérifie l'URL
	Printer_Info="$Temp_Dir/Printer_Info.html"
	log "Obtention des infos de l' imprimante"
	wget -q "$Printer_Url_Info" -O "$Printer_Info"
	#while IFS='=' read -r k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')

    log_action_end_msg $?
	# On vérifie que le fichier fournit les informations
	log "Vérification du fichier obtenu"
	#if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
	if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0
    	else
    		log_action_end_msg 1
    		log "Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou
			visitez la page suivante : $Printer_dl_url
			afin de télécharger les pilotes et les installer manuellement." "Red"
			exit 2
    fi
	# ???????? pas compris a quoi sert ce controle , ni quelles infos il est censé recuperé . peut etre certaines URL comporte des liens vers d' autres pages
	#if test -n "${printer[LNK]}"; then Printer_Url_Info="$Url_Info/${printer[LNK]}";log "LNK = ${printer[LNK]}" "Red";fi
	Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
	if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	log "Vérification des pré-requis" "Blue"
	log "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
	log "installation des paquets requis"
	if ! install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "gawk"; then
		log "impossible d' installer les paquets indispensables" "Red"
		exit 4
	fi

	# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
	if [[ -n $Scanner_Deb ]]; then install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"; fi

	# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
	for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
		if [[ "$Model_Name" == "$i" ]]; then install_pkg "csh";	fi
	done
	# On vérifie que le dossier de téléchargement temporaire et /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
	verif_rep "/usr/share/cups/model" "/var/spool/lpd"

	# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
	for i in DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
		if [[ "$Model_Name" == "$i" ]]; then verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"; # verif_lien "lien" "cible" 'lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible'
			# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
			if [[ -L /sbin/init ]]; then
				verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service" # ' lien : /lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service: cible'
				systemd daemon-reload
			fi
		fi
	done
	echo "" &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
    log "Recherche des pilotes" "Blue"
    log "Recherche des pilotes pour l' imprimante"
    printer=(
        [prn_lpd]="$(grep PRN_LPD_DEB "$Printer_Info"  | cut -d= -f2)"
        [prn_cups]="$(grep PRN_CUP_DEB "$Printer_Info" | cut -d= -f2)"
        [prn_drv]="$(grep PRN_DRV_DEB "$Printer_Info"  | cut -d= -f2)"
    )
    log_action_end_msg $?

    Scanner_Deb=$(grep SCANNER_DRV "$Printer_Info" | cut -d= -f2)
    if test -n "$Scanner_Deb"; then
    	printer+=(
    		[udev_rules]="$Udev_Deb_Name"
    	)
        log "Recherche des pilotes pour le scanner"

        Scankey_Deb=$(grep SCANKEY_DRV "$Printer_Info" | cut -d= -f2)

        Scanner_Url_Info="$Url_Info/$Scanner_Deb.lnk"
        Scankey_Url_Info="$Url_Info/$Scankey_Deb.lnk"
        echo " - Scanner infos :
        	$Scanner_Url_Info
        	$Scankey_Url_Info" &>> "$Logfile"

        Scanner_Info="$Temp_Dir/Scanner_Url_Info.html"
        wget -q "$Scanner_Url_Info" -O "$Scanner_Info"
        Scankey_Info="$Temp_Dir/Scankey_Url_Info.html"
		wget -q "$Scankey_Url_Info" -O "$Scankey_Info"

        # On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
        case "$Arch" in
            i386|i686)
                printer+=(
                    [scanner_drv]="$(grep DEB32 "$Scanner_Info" | cut -d= -f2)"
                    [scanKey_drv]="$(grep DEB32 "$Scankey_Info" | cut -d= -f2)"
                )
                log_action_end_msg 0
                ;;
            x86_64)
                printer+=(
                    [scanner_drv]="$(grep DEB64 "$Scanner_Info" | cut -d= -f2)"
                    [scanKey_drv]="$(grep DEB64 "$Scankey_Info" | cut -d= -f2)"
                )
                # pour ubuntu 24.04 et superieurs
                if [[ $(grep DISTRIB_RELEASE= /etc/lsb*release | cut -d= -f2 | cut -c1-2) -ge 24 ]]; then
                	if test "${printer[scanKey_drv]}" = "brscan-skey-0.3.2-0.amd64.deb"; then printer[scanKey_drv]="$Scankey_Drv_Deb_Name";fi
                fi
                log_action_end_msg 0
                ;;
                *)
					log "Architecture inconnue: $Arch" "Red"
				;;
        esac
    else
        log "Pas de scanner détecté" "Red"
        log_action_end_msg 1
    fi

    log "Téléchargement des pilotes" "Blue"
    for pkg in "${printer[@]}"; do
        # On ajoute la liste des pilotes trouvés au fichier de journalisation
        if test -n "$pkg"; then
            echo " - Paquet trouvé : $pkg" &>> "$Logfile"
            # On télécharge les pilotes trouvés si ils ne le sont pas deja
            if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
                Url_Deb="$Url_Pkg"/"$pkg"
                # le paquet 'udev-rules' est situé a un autre emplacement
                if test "$pkg" == "${printer[udev_rules]}"; then Url_Deb="$Udev_Deb_Url"/"$pkg"; fi
                log "Téléchargement du paquet : $pkg"
                wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
                if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
                  Url_Deb2="$Url_Pkg2"/"$pkg"
                  wget -cP "$Temp_Dir" "$Url_Deb2" &>> "$Logfile"
                fi
                log_action_end_msg $?
            else
                log "Le paquet : $pkg a deja été telechargé"
                log_action_end_msg 0
            fi
        fi
    done
}

############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
	log "Installation des pilotes" "Blue"
	for pkg in "${printer[@]}"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log "Installation du paquet : $pkg"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo "" &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	log "Configuration de l'imprimante" "Blue"
	log "Recherche d'un fichier PPD sur votre système"
	for pkg in "${printer[prn_cups]}" "${printer[prn_drv]}"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | gawk '/ppd/{sub(".","",$NF); print $NF}')
		fi
	done
	if test -z "$Ppd_File"; then
		for file in /usr/share/cups/model/**/brother*@($Model_Name|$Printer_Name)*.ppd; do Ppd_File="$file";done
	fi
	if test -n "$Ppd_File"; then
		log_action_end_msg 0
		echo " - Fichier PPD : ' $Ppd_File ' trouvé" &>> "$Logfile"
	else
		echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
		log_action_end_msg 1
	fi
	# On ajoute la nouvelle imprimante
	log "Ajout de l'imprimante $Model_Name"
	{
		echo " - Backup du fichier /etc/cups/printers.conf.O"
		cp /etc/cups/printers.conf.O "$Temp_Dir"
		echo " - Arret du service CUPS"
		echo " - Restauration du fichier printers.conf"
		systemctl stop cups
		cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf
		echo " - Redémarrage du service CUPS"
		systemctl restart cups
		sleep 1
	} &>> "$Logfile"
	case "$Connection" in
	"USB")
		lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File" &>> "$Logfile"
	;;
	"Réseau")
		lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File" &>> "$Logfile"
	;;
	esac
	log_action_end_msg $?
	{
		cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf.O
		echo " - Restauration du fichier printers.conf.O"
		echo ""
	} &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	log "Configuration du scanner" "Blue"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log "Configuration du scanner USB"
			# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
			if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
				log_action_end_msg $?
				echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"

			else
				# ?????????? n ' ajoute pas la regle correctement .
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
				log_action_end_msg $?
				echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
				# On recharge les règles udev
				# udevadm control --reload
				udevadm control --reload-rules
			fi
		elif [[ $Connection == "Réseau" ]]; then
			log "Configuration du scanner réseau"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
				log_action_end_msg $?
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
				log_action_end_msg $?
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
				log_action_end_msg $?
			elif [[ -x /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
				brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
				log_action_end_msg $?
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then cd "$Lib_Dir" || exit;
				log "Copie des bibliotheques nécessaires brsaneconfig"
				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 "$Lib_Dir"
				ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
				ln -sf libbrscandec.so.1 libbrscandec.so
				cd "$Lib_Dir"/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
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig2 ]]; then cd "$Lib_Dir" || exit
				log "Copie des bibliotheques nécessaires brsaneconfig2"
				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 "$Lib_Dir"/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
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig3 ]]; then cd "$Lib_Dir" || exit
				log "Copie des bibliotheques nécessaires brsaneconfig3"
				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 "$Lib_Dir"/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
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig4 ]]; then cd "$Lib_Dir"/sane || exit
				log "Copie des bibliotheques nécessaires brsaneconfig4"
				ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
				ln -sf libsane-brother4.so.1 libsane-brother4.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig5 ]]; then cd "$Lib_Dir"/sane || exit
				log "Copie des bibliotheques nécessaires brsaneconfig5"
				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
				log_action_end_msg 0
			else
				log_action_end_msg 1
				log "No config binary found." "Red"
			fi
		fi
	fi
	echo "" &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd || exit
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	log "Configuration de votre imprimante Brother $Model_Name terminée. Bye :D" "Blue"
  	log "Vous pouvez supprimer le dossier $Temp_Dir avec la commande suivante :  rm -r $Temp_Dir" "Blue"
	exit 0
}

main () {
	do_init_script
	do_check_prerequisites
	do_download_drivers
	do_install_drivers
	do_configure_printer
	do_configure_scanner
	do_clean
}
main

Dernière modification par iznobe (Le 11/08/2025, à 23:53)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#159 Hier à 00:12

iznobe

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

ton code pour valider une IP ne fonctionne pas :
ce code :

#check IP
until test -n "$IP"
do
    test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
    [[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break

    IFS='.' read -ra ip <<< "$IP"
    for i in ${ip[@]}
    do
        echo "TAB IP == $i"
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
    done
    if ! ping -qc2 "$IP"
        then read -rp "Entrez l'adresse IP de votre imprimante : " IP
        unset IP
    fi
done

donne :

iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: y
Entrez l'adresse IP de votre imprimante : 11.1
TAB IP == 11
Entrez l'adresse IP de votre imprimante :

j ' en suis à la 8eme ligne de ton code ( sans compter les declarations ) et c ' est dejà la cata pour debugguer mad
, alors ça , c' est peut etre pas à ton gout , mais au moins ça marche sans soucis tongue :

IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]

et si je dois modifier un jour , demain comme dans 10 ans , ca ne sera pas un probleme .


Watael a écrit :

je serais très surpris que ça fonctionne sans correction, mais je ne peux pas le tester en entier.

j' ai plutôt l' impression que tu n' as pas testé du tout roll ou alors tu t ' es arreté de testé apres les declarations de variables tongue car desuite apres :

#check IP

rien ne va , il faut reprendre tout le code a chaque ligne .
c' estpas de l' aspirine qu ' il faut , c ' est un semi-remorque plein , vu qu ' il reste encore 329 lignes a debugguer ensuite big_smile

Dernière modification par iznobe (Hier à 00:22)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#160 Hier à 01:53

Watael

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

vérifier que le tableau ip comporte bien 4 éléments devrait corriger ce problème oubli.

j'ai dit que je ne peux pas tester le script en entier, parce que je n'ai pas d'imprimante compatible, et je ne suis pas sur Ubuntu*.

rien ne va , il faut reprendre tout le code a chaque ligne .

rho, t'éxagère. wink je savais qu'il y en aurait des problèmes, mais je ne pensais pas qu'il y aurait autant.
ce n'est d'ailleurs pas à toi de débugguer.
est-ce que tu peux quand même m'envoyer la sortie du script, stp. ?
que je vois ce qui merdoie.

#!/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
############################
user="$SUDO_USER"
codeName="$(lsb_release -cs)"
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

#########################
 # gestion des arguments
#########################
declare -u modelName=$1
until test -n "$modelName"
do
    read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}"
#check IP
until test -n "$IP"
do
    read -p 'vous voulez configurer votre imprimante pour qu'\''elle fonctionne en réseau ? [y/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 -c2 "$IP"
    then
        err=0
        unset IP
    fi
done

#################
 # infos Brother
#################
Url_Info="http://www.brother.com/pub/bsc/linux/infs"
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"

printerInf="$Url_Info/$printerName"
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 [[ $arch != @(i386|i686|x86_64) ]]
then
    errQuit "système non compatible."
fi
if ((EUID))
then
    errQuit "must be root."
fi
if ! nc -z -w5 'brother.com' 80
then
    errQuit "\"brother.com\" n'est pas joignable"
fi

##################################################
 # initialisation du tableau associatif `printer'
##################################################
while IFS='=' read -r k v
do
    printer[$k]=$v
done < <(wget -qO- "$printerInf" | sed '/\(]\|rpm\|=\)$/d')
########################################################
 # vérification de variables disponibles dans `printer'
########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
    errQuit "les données du fichier .inf et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
    printerInf="$Url_Info/${printer[LNK]}"
fi

if test -n "${printer[SCANNER_DRV]}"
then
    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')
    case $arch in
        i[36]86)
            printer[SCANNER_DRV]="$scanner_DEB32"
            printer[SCANKEY_DRV]="$scanKey_DEB32"
            ;;
        x86_64)
            printer[SCANNER_DRV]="$scanner_DEB64"
            printer[SCANKEY_DRV]="$scanKey_DEB64"

            . /etc/lsb-release #TODO: test file exists
            if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
            then
                printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb" #mais pourquoi Brother ne donnent-ils pas la bonne info ?
            fi
            ;;
    esac
else
    errQuit "pas de pilote pour le scanner."
fi

##########################
 # préparation du système
##########################
if test -f "$Logfile"
then
    mv -v "$Logfile" "$Logfile.$date"
fi
for d in  "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
    if ! test -d "$d"
    then
        mkdir -pv "$d"
    fi
done

apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
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
    for addr in "$Url_Pkg" "$Url2_Pkg"
    do
        if ! test -f "$tmpDir/$drv"
        then
            Url_Deb="$addr/$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
#installation des pilotes
dpkg --install --force-all  "${pkg2install[@]}"
##

#################################
 # configuration de l'imprimante
#################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in PRN_CUPS PRN_DRV
do
    pkg=${printer[$drv]}
    if test -n "$pkg" -a -f "$tmpDir/$pkg"
    then
        while read -d '' 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
case ${#PPDs[*]} in
    0) errQuit "no ppd"
        ;;
    1) : echo one ppd
        ;;
    *) errQuit "more than one ppd" # et s'il y en a plusieurs, y en a-t-il un à privilégier ?
        ;;
esac


#sauvegarde fichier conf.0 (n'existe pas chez moi)
cp /etc/cups/printers.conf.O "$tmpDir"
systemctl stop cups

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
#restauration fichier conf
cp "$tmpDir/printers.conf.O" /etc/cups/printers.conf
systemctl restart cups
sleep 1

############################
 # configuration du scanner
############################
if test -z "ÎP"
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 "$arch" = "x86_64" -a -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

--
* tu me diras de quoi je me mêle alors
je me mêle du shell; et du shell, il y en a partout.
mais là, j'ai un peu l'impression de jouer au jenga avec un bandeau sur les yeux. lol

Dernière modification par Watael (Hier à 12:00)


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

Hors ligne

#161 Hier à 09:49

iznobe

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

un truc que je ne comprends pas dans ton check IP :

for i in ${ip[@]}
    do
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
    done

la variable " $n " , elle sort d' ou ?
elle n' est pas declarée nulle part ...

dans mes tests , j ' ai fait genre :

for i in ${ip[@]}
    do
echo "$n" 
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
    done

au 1er tour , n vaut "" . normal vu que pas initialisée / declarée .
puis ensuite , la valeur reste a 1 . des fois les résultats sont pas identiques ...
en gros je sais pas pourquoi , des fois elle passe de "" à " 2 " ...
je m ' attendais plutôt a ce que ce soit :
""
" 1 "
" 2 "
" 3 "
si le tableau fournit 4 champs et donc 4 tours de boucle .

on voit bien que le tableau pour IP n ' est pas rempli correctement dans un message précedent :

Entrez l'adresse IP de votre imprimante : 11.1
TAB IP == 11

le echo devrait donner : TAB IP == 11 1 ( avec le code associé ) si ton check IP fonctionnait .


Sinon , dans le code que tu fournis , je n ' ai toujours pas compris a quoi peut bien servir le shift(#) ...


#check IP
until test -n "$IP"
do
    test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
    [[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break

    IFS='.' read -ra ip <<< "$IP"
    for i in ${ip[@]}
    do
        echo "TAB IP == $i"
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
    done
    if ! ping -qc2 "$IP"
        unset IP
        then read -rp "Entrez l'adresse IP de votre imprimante : " IP
        
    fi
done

TRADUCTION EN FRANCAIS :
#check IP
tant que $IP n ' est pas remplie :
 $2 existe ? si oui , IP =$2 , si non , poser la question à l' utilisateur : "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
 si la reponse de l' utilisateur est oui , alors lui demander d ' entrer son IP .
 
 prendre l ' IP et la dispatcher dans un tableau en coupant au niveau des points .
 
 afficher toutes les valeurs du tableau
 si n est incrémenté , alors testé si i est >= 0 et i<=255 , si n est pas incrementé , testé si i est > 0 et i<=255 , si ce n' est pas vrai , supprimé le contenu de IP et poser la question à l' utilisateur : "Entrez l'adresse IP de votre imprimante et mettre ce qu ' il a entré dans la variable IP .
 
 ping sur $IP , si pas bon , on demande à l' utilisateur d ' entrer une nouvelle IP

Perso j ' aurais plutot fait un truc dans le genre de :

 for i in ${ip[@]}
    do
        echo "TAB IP == $i"
        ((n++))
        ((n>0 ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
    done

je suis pas sur que " ((n++ ? " soit correctement interpreté ...
meme pas essyaé de faire un test d' ailleurs , je m' y colle tiens , ca va m ' occuper 5 minutes .

Dernière modification par iznobe (Hier à 10:19)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#162 Hier à 10:38

iznobe

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

bon , et bien si , ca marche :

iznobe@k-pi3:~ $ bash test.sh
TAB IP == 0
BOOOO!
TAB IP == 1
OK
TAB IP == 2
OK
TAB IP == 3
OK
iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash

for i in {0..3}
    do
        echo "TAB IP == $i"
        #((n++))
        if ((n++));then echo "OK"; else echo "BOOOO!";fi
    done
iznobe@k-pi3:~ $ 
iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash

for i in {0..3}
    do
        #echo "Avant : TAB IP == $i , N == $n"
        ((n++ ? i++ : i--))
        echo "Apres : TAB IP == $i , N == $n"
    done
iznobe@k-pi3:~ $ bash test.sh
Apres : TAB IP == -1 , N == 1
Apres : TAB IP == 2 , N == 2
Apres : TAB IP == 3 , N == 3
Apres : TAB IP == 4 , N == 4
iznobe@k-pi3:~ $

Dernière modification par iznobe (Hier à 11:02)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#163 Hier à 12:00

Watael

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

shift décale les paramètres positionnels
ça sert à "consommer" les paramètres positionnels par la gauche
à chaque fois qu'elle est appelée, la commande fait disparaître $1
alors $2 devient $1, $3 devient $2, etc.
c'est paramétrable : on peut supprimer N paramètres positionnels :

shift 2

fera disparaître les deux premiers paramètres positionnels.
pseudoCode:
Si existe $2
alors IP=$2 et supprimer tous les paramètres positionnels (shift $#)*
autrement read IP
si IP == faux, alors recommencer
finPseudoCode

$2 n'existe plus => read IP

* je pourrais faire un shift après l'assignation de modelName, puis utiliser $1 assigner IP

Dernière modification par Watael (Hier à 12:16)


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

Hors ligne

#164 Hier à 12:03

iznobe

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

un check IP qui fonctionne pour de vrai tongue:

iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash

#IP="abcd"
#check IP
echo "check IP"
until test -n "$IP"
do
    test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
    if test -z "$IP" && [[ $REPLY == [YyOo] ]]
    then
      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))
        echo "$n"
    done

    if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -c2 "$IP"
    then
        unset IP
        read -rp "Entrez l'adresse IP de votre imprimante : " IP
    fi
    echo "GOOD !"
done
iznobe@k-pi3:~ $

ou pas roll :

iznobe@k-pi3:~ $ bash test.sh 00 192.168.1.
check IP
1
2
3
Entrez l'adresse IP de votre imprimante : 0.1.1.1
GOOD !
iznobe@k-pi3:~ $ 

Dernière modification par iznobe (Hier à 12:04)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#165 Hier à 12:17

Watael

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

je regarde ça en soirée.


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

Hors ligne

#166 Hier à 12:26

iznobe

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

Avec ce code :

#!/bin/bash


declare -i err
#check IP
echo "check IP"
until test -n "$IP"
do
    test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
    [[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || unset IP


    IFS="." read -ra ip <<< "$IP"
    for i in "${ip[@]}"
    do
        ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
        echo "N==$n , IP==$i"
    done
    echo "Apres boucle : $IP"
    if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -c2 "$IP"
    then
        unset IP
        read -rp "Entrez l'adresse IP de votre imprimante : " IP
    fi
    
    echo "GOOD !"
done

si je tape une IP directement ( en argument au script ), ca marche .
si je tape pas d' argument ca marche .
si je tape une IP incorrecte en argument au script , il me re demande une ip ( normal ) , puis il ne fait plus le reste du code et affiche " GOOD ! " directement ...
ca ne serait pas à cause du type de boucle : " until " ?

Dernière modification par iznobe (Hier à 12:28)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#167 Hier à 12:44

Watael

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

le deuxième read n'est pas utile, et le GOOD devrait être en dehors de la boucle.

à ce soir.


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

Hors ligne

#168 Hier à 12:48

iznobe

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

Watael a écrit :

est-ce que tu peux quand même m'envoyer la sortie du script, stp. ?
que je vois ce qui merdoie.

voilà :

iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
[sudo] Mot de passe de iznobe : 
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: 
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-12 12:46:16--  https://download.brother.com/pub/com/linux/linux/packages/MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-12 12:46:18 erreur 404 : Not Found.

/MFCL2710DW: Schéma manquant.
--2025-08-12 12:46:18--  https://download.brother.com/pub/com/linux/linux/packages/no
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-12 12:46:19 erreur 404 : Not Found.

/no: Schéma manquant.
dpkg: erreur: ne peut pas accéder à l'archive « /tmp/packages/MFCL2710DW »: Aucun fichier ou dossier de ce nom
lpadmin: Unable to connect to server: Mauvais descripteur de fichier
"SCANNER" is already registered.
iznobe@iznobe-pc:~$

il n' a pas demander l' IP big_smile


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#169 Hier à 13:53

iznobe

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

j ' ai commencé a débugué de mon coté , malgré tout .
j ' en suis a la ligne 245 pour info .
voici le code :

#!/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
############################
user="$SUDO_USER"
codeName="$(lsb_release -cs)"
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

#########################
 # gestion des arguments
#########################
declare -u modelName=$1
until test -n "$modelName"
do
    read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}"
#check IP
until test -n "$IP"
do
    read -p "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/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

#################
 # 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"

printerInf="$Url_Info/$printerName"
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 [[ $arch != @(i386|i686|x86_64) ]]
then
    errQuit "système non compatible."
fi
if ((EUID))
then
    errQuit "must be root."
fi
if ! nc -z -w5 'brother.com' 80
then
    errQuit "\"brother.com\" n'est pas joignable"
fi

##################################################
 # initialisation du tableau associatif `printer'
##################################################
while IFS='=' read -r k v
do
    printer[$k]=$v
done < <(wget -qO- "$printerInf" | sed '/\(]\|rpm\|=\)$/d')
########################################################
 # vérification de variables disponibles dans `printer'
########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
    errQuit "les données du fichier .inf et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
    printerInf="$Url_Info/${printer[LNK]}"
fi

if test -n "${printer[SCANNER_DRV]}"
then
    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')
    case $arch in
        i[36]86)
            printer[SCANNER_DRV]="$scanner_DEB32"
            printer[SCANKEY_DRV]="$scanKey_DEB32"
            ;;
        x86_64)
            printer[SCANNER_DRV]="$scanner_DEB64"
            printer[SCANKEY_DRV]="$scanKey_DEB64"

            . /etc/lsb-release #TODO: test file exists
            if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
            then
                printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb" #mais pourquoi Brother ne donnent-ils pas la bonne info ?
            fi
            ;;
    esac
else
    errQuit "pas de pilote pour le scanner."
fi

##########################
 # préparation du système
##########################
if test -f "$Logfile"
then
    mv -v "$Logfile" "$Logfile.$date"
fi
for d in  "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
    if ! test -d "$d"
    then
        mkdir -pv "$d"
    fi
done

apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
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 test $drv = $printerName; then continue;fi
    if test $drv = "no"; then continue;fi
    for addr in "$Url_Pkg" "$Url2_Pkg"
    do
        if ! test -f "$tmpDir/$drv"
        then
            Url_Deb="$addr/$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
dpkg --install --force-all  "${pkg2install[@]}"
##

#################################
 # configuration de l'imprimante
#################################
#retrouver le fichier `.ppd' pour l'imprimante
#for drv in PRN_CUPS PRN_DRV
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 -d '' fileName
        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) #errQuit "no ppd"
        echo "no ppd"
        ;;
    1)  echo one ppd
        ;;
    *) #errQuit "more than one ppd" # et s'il y en a plusieurs, y en a-t-il un à privilégier ?
        echo "more than one ppd"
        ;;
esac


#sauvegarde fichier conf.0 (n'existe pas chez moi)
cp /etc/cups/printers.conf.O "$tmpDir"
systemctl stop cups
cp "$tmpDir/printers.conf.O" /etc/cups/printers.conf
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
#restauration fichier conf


############################
 # configuration du scanner
############################
if test -z "ÎP"
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 "$arch" = "x86_64" -a -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

et le retour terminal

iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: 
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
 DL DRV TAB == MFCL2710DW mfcl2710dwpdrv-4.0.0-1.i386.deb no brother-udev-rule-type1-1.0.2-0.all.deb brscan-skey-0.3.4-0.amd64.deb brscan4-0.4.11-1.amd64.deb
PKG2INSTALL == /tmp/packages/mfcl2710dwpdrv-4.0.0-1.i386.deb /tmp/packages/brother-udev-rule-type1-1.0.2-0.all.deb /tmp/packages/brscan-skey-0.3.4-0.amd64.deb /tmp/packages/brscan4-0.4.11-1.amd64.deb
(Lecture de la base de données... 305352 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.
lpadmin : The printer or class does not exist.
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.
pkg == 
pkg == mfcl2710dwpdrv-4.0.0-1.i386.deb
gawk: ligne de commande:1: BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF}
gawk: ligne de commande:1:                      ^ syntax error
dpkg-deb: erreur: le sous-processus tar a été tué par le signal (Relais brisé (pipe))
PPDs == 
one ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpadmin: Unable to open PPD "": Unable to open PPD file on line 0.
"SCANNER" is already registered.
iznobe@iznobe-pc:~$ 

il ne devrait plus rester grand chose ... la partie .ppd / scnanner seulement .


ca a beau etre un script mieux structuré , je prefere largement celui avec les fonctions pour debugguer et faire le suivi de ce qu ' il se passe .
là il faut monter descendre pour trouver les tableaux , sur que dans 10 ans , il me faudra 2 jours mini pour me re " approprier " le code ....

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#170 Hier à 17:59

Watael

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

là il faut monter descendre pour trouver les tableaux

j'vois pas d'quoi tu parles.
tmp-t-XTqcf-D9-JB.png
big_smile

Dernière modification par Watael (Hier à 18:08)


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

Hors ligne

#171 Hier à 18:07

ylag

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

Bonjour,

[HS]
Vu au #169 :

"lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS."

Ça devrait être le cas lorsque les distributions passeront à Cups version 3 ?

https://github.com/OpenPrinting/cups/wiki/CUPS-3.0

https://wiki.debian.org/CUPSNewArchitecture

Ça ne semble pas encore le cas pour le moment dans les dépôts de la future Questing 25.10, qui serait encore sur cups 2.4 :

Paquet cups
[/HS]

A+

Dernière modification par ylag (Hier à 19:10)

Hors ligne

#172 Hier à 19:24

iznobe

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

Salut @ylag , oula , ca n' a pas l' air d' etre un petit morceau cette histoire !
j ' espere que ca ne fera pas comme pour les snaps ...

Mais je pense que ca ne sortira pas avant 26.10 ou + . ca ne semble pas encore finalisé , beaucoup trop d' activité en cours tongue
Avec de la " chance " peut etre pour 26.04 ?

@Watael , oui , je connais pas encore toutes les subtilités de sublime text non plus roll
Merci : Capture-d-cran-du-2025-08-12-19-15-32.png

Dernière modification par iznobe (Hier à 19:29)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#173 Hier à 19:34

ylag

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

Bonjour,

iznobe a écrit :

Avec de la " chance " peut etre pour 26.04 ?

Sauf erreur de ma part, ce genre de changement est implémenté sur une version intermédiare en premier. Donc, probablement pas avant la 26.10 ?

A+

Dernière modification par ylag (Hier à 19:35)

Hors ligne

#174 Hier à 19:40

iznobe

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

tout à fait d' accord .
je n' ai pas cherché a trouver leur date de sortie prévue , c' était purement au fealing . Mais c' est ce qui semble le plus judicieux , et permettra de corriger les bugs de jeunnesse pendant les 3 test suivantes avant la prochaine LTS ( 28.04 donc ) .


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#175 Hier à 19:43

Watael

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

je connais pas encore toutes les subtilités de sublime text non plus

c'est vim; juste vim, simplement vim.


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

Hors ligne