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.

#26 Le 03/08/2025, à 00:30

iznobe

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

eric63 a écrit :

essai de la 4ème mouture
pas de choix usb ou réseau ??
erreur

 Configuration de l'imprimante 
 * Recherche d'un fichier PPD sur votre système...                                                                                         dpkg-deb: erreur: erreur de lecture de numéro magique de version de l'archive depuis le fichier /tmp/packages/: Is a directory
/home/kubu/script_iznobe.sh: line 318: MFCJ4510DW: command not found 

" erreur " corrigée .

tu devrais avoir le choix entre USB ou Réseau dans la 4eme mouture et celle-ci :

#!/bin/bash
# Script d'installation pour imprimantes Brother

. /lib/lsb/init-functions

Model_Name="$1"
Con_Typ="$2"
if ((Con_Typ)); then Connection="Réseau"; #else Connection="USB"
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"


Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$(date +"$Logfile.%F_%T")"
	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^^}
	# 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"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red 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 $Resetcolor"
				#read -rp "Entrez l'adresse IP de votre imprimante : " IP
				# On valide le format de l'adresse IP de l'imprimante
				#IP=$(echo "$IP" | awk -F'[.]' '{w=$1+0; x=$2+0; y=$3+0; z=$4+0; print w"."x"."y"."z}')
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename" &>> "$Logfile"
	echo "# Architecture : $Arch" &>> "$Logfile"
	echo "# Modèle de l'imprimante : $Model_Name" &>> "$Logfile"
	echo "# Type de connexion : $Connection" &>> "$Logfile"
	echo "# Repertoire courant : $Dir" &>> "$Logfile"

	RegIP="^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"

	if [[ "$Connection" == "Réseau" ]]; then
		while [[ -z "$IP" ]]; do
			read -rp "Entrez l'adresse IP de votre imprimante : " IP
		    if [[ $IP =~ $RegIP ]]; then
      			echo "# Adresse IP : $IP" &>> "$Logfile"
	      	else
	    		unset IP
	    	fi
	    done
	fi
	echo "# Repertoire courant : $Dir" &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	# On transforme le nom de l'imprimante
	log_action_begin_msg "Recherche des pilotes"
	Printer_Name=$(echo "$Model_Name" | sed -e 's/-//')
	# On construit l'URL du fichier contenant les informations
	Printer_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
		log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
		wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
		log_action_end_msg $?
	fi

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			log_action_end_msg 0
			# On télécharge les pilotes trouvés
			Url_Deb="$Url_Pkg"/"$pkg"
			echo &>> "$Logfile"
			echo "# Téléchargement du paquet : $pkg" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $pkg"
			wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que le paquet multiarch-support est installé et on l'installe le cas échéant (Ubuntu 64-bits seulement)
	if [[ "$Arch" == "x86_64" ]]; then
		log_action_begin_msg "Recherche du paquet 'multiarch-support' sur votre système"
		if dpkg -s multiarch-support &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'multiarch-support' deja installé" &>> "$Logfile"
		else
			log_action_end_msg 1
			echo " - Paquet 'multiarch-support' non installé" &>> "$Logfile"
			apt-get install -qq multiarch-support &>> "$Logfile"
			log_action_end_msg $?
		fi
		log_action_begin_msg "Recherche du paquet 'lib32stdc++6' sur votre système"
		if dpkg -s lib32stdc++6 &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'lib32stdc++6' deja installé" &>> "$Logfile"
		else
			log_action_end_msg 1
			echo " - Paquet 'lib32stdc++6' non installé" &>> "$Logfile"
			apt-get install -qq lib32stdc++6 &>> "$Logfile"
			log_action_end_msg $?
		fi
	fi
	# On vérifie que le paquet cups est installé et on l'installe le cas échéant
	log_action_begin_msg "Recherche du paquet 'cups' sur votre système"
	if dpkg -s cups &>/dev/null; then
		log_action_end_msg $?
		echo " - Paquet 'cups' deja installé" &>> "$Logfile"
	else
		log_action_end_msg 1
		apt-get install -qq cups &>> "$Logfile"
		log_action_end_msg $?
	fi
	# Si un pilote pour le scanner a été trouvé on vérifie que sane-utils est installé
	if [[ -n $Scanner_Deb ]]; then
		log_action_begin_msg "Recherche du paquet 'sane-utils' sur votre système"
		if dpkg -s sane-utils &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'sane-utils' deja installé" &>> "$Logfile"
		else
			log_action_end_msg 1
			echo " - Paquet 'sane-utils' non installé" &>> "$Logfile"
			apt-get install -qq sane-utils &>> "$Logfile"
			log_action_end_msg $?
		fi
		# On vérifie que libusb-0.1-4:i386 est installé
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Recherche du paquet 'libusb-0.1-4' sur votre système"
			if dpkg -s libusb-0.1-4 &>/dev/null; then
				log_action_end_msg $?
				echo " - Paquet 'libusb-0.1-4' deja installé" &>> "$Logfile"
			else
				log_action_end_msg 1
				echo " - Paquet 'libusb-0.1-4' non installé" &>> "$Logfile"
				apt-get install -qq libusb-0.1-4 &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
	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
			log_action_begin_msg "Recherche du paquet 'csh' sur votre système"
			if [[ ! -x /bin/csh ]]; then
				log_action_end_msg 1
				apt-get install -qq csh &>> "$Logfile"
				log_action_end_msg "$?"

			else
				echo " - Paquet 'csh' deja installé" &>> "$Logfile"
			fi
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/usr/share/cups/model' sur votre système"
	if [[ -d /usr/share/cups/model ]]; then
		log_action_begin_msg "Le dossier '/usr/share/cups/model' existe deja"
		log_action_end_msg $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -pv /usr/share/cups/model &>> "$Logfile"
		log_action_end_msg $?
	fi
	# On vérifie que le dossier /var/spool/lpd existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/var/spool/lpd' sur votre système"
	if [[ -d /var/spool/lpd ]]; then
		log_action_begin_msg "Le dossier '/var/spool/lpd' existe deja"
		log_action_end_msg $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -pv /var/spool/lpd &>> "$Logfile"
		log_action_end_msg $?
	fi
	# 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
			log_action_begin_msg "Recherche du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups' sur votre système"
			if [[ -L /etc/init.d/lpd ]]; then
				log_action_end_msg 0
			else
				log_action_end_msg 1
				log_action_begin_msg "Creation du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups'"
				ln -s /etc/init.d/cups /etc/init.d/lpd
				# On crée un lien symbolique vers cups.service si systemd est utilisé
				if [[ -L /sbin/init ]]; then
					ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
					systemd-daemon reload
				fi
				log_action_end_msg $?
			fi
		fi
	done
}

############################
# INSTALLATION DES PAQUETS #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo &>> "$Logfile"
			echo "# Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo &>> "$Logfile"
	echo "# Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			fi
		done
	fi
	echo " - Fichier PPD : $Ppd_File" &>> "$Logfile"
	log_action_end_msg 0
	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo &>> "$Logfile"
	echo "# Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	if [[ -n "$Scanner_Deb" ]]; then
		echo -e "$Blue Configuration du scanner $Resetcolor"
		echo &>> "$Logfile"
		echo "# Configuration du scanner" &>> "$Logfile"

		if [[ $Connection == "USB" ]]; then
			# On ajoute une entrée au fichier udev
			if [[ ! $(grep "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules") ]]; then
				echo "Adding ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" to "$Udev_Rules" &>> "$Logfile"
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
			else
				echo "Règle udev trouvée dans le fichier $Udev_Rules" &>> "$Logfile"
			fi
			# On recharge les règles udev
			udevadm control --reload
		elif [[ $Connection == "Réseau" ]]; then
			log_action_begin_msg "Configuration du scanner réseau"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			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"
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			log_action_begin_msg "Copie des bibliotheques nécessaires"
			if [[ -e /usr/bin/brsaneconfig ]]; then
				cd "$Lib_Dir" || 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 "$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
				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
				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
				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
				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
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_download_drivers
do_check_prerequisites
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

Dernière modification par iznobe (Le 03/08/2025, à 00:31)


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#27 Le 03/08/2025, à 01:16

eric63

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

ok plus de problème et choix accessible pour usb et reseau


Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR

Hors ligne

#28 Le 03/08/2025, à 01:42

Watael

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

select connection in USB Réseau
do
  if (( connection == 2 )) #dans tout le reste du script il faudra tester 1=USB et 2=reseau
  then 
    echo "warning IP fixe"
    read IP
  fi
  break
done

?

éventuellement

connections=( [1]=USB [2]=Réseau )
connection=${connections[connection]} # pour ne pas avoir à tester 1 ou 2

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

Hors ligne

#29 Le 03/08/2025, à 05:11

Watael

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

tiens !
dans l'actualité, pense
« sous-marin caché »
lol


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

Hors ligne

#30 Le 03/08/2025, à 09:16

iznobe

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

Ajout d' une fonction de vérification de la validité de l' adresse IP entrée .


pour le type de connexion de l' imprimante , je ne sais pas trop encore comment mettre ça en place .
Après il me semble qu ' en l' état actuel , ce n' est pas si mal :
par défaut , c' est vide , il demande type de connexion .
si on met "1" en 2eme paramètre à la commande , alors il demande l' IP et considère ( normal puisque prévu pour ) que c' est une connexion reseau .
si on met un 3eme paramètre à la commande , alors il ne demande rien ( tant que l' IP est valide ) .

#!/bin/bash
# Script d'installation pour imprimantes Brother

. /lib/lsb/init-functions

valid_ip() {
    local  ip=$1
    local  retour=1

    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        [ "${ip[0]}" -le 255 ] && [ "${ip[1]}" -le 255 ] && [ "${ip[2]}" -le 255 ] && [ "${ip[3]}" -le 255 ]
        retour=$?
    fi
    return $retour
}

control_ip() {
	if ( (valid_ip "$IP") ); then
    	if ping -c2 "$IP"; then
    		echo "# Adresse IP : $IP" &>> "$Logfile"
    	else
			unset IP
		fi
	else
		unset IP
	fi
}

Model_Name="$1"
if [ -n "$2" ] && [ "$2" = "1" ]; then
	Connection="Réseau"
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"


Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$Logfile".old
	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^^}
	# 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"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red 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 $Resetcolor"
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename" &>> "$Logfile"
	echo "# Architecture : $Arch" &>> "$Logfile"
	echo "# Modèle de l'imprimante : $Model_Name" &>> "$Logfile"
	echo "# Type de connexion : $Connection" &>> "$Logfile"
	echo "# Repertoire courant : $Dir" &>> "$Logfile"

	if [[ "$Connection" == "Réseau" ]]; then
		control_ip "$IP"
		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
	Printer_Name=$(echo "$Model_Name" | sed -e 's/-//')
	# On construit l'URL du fichier contenant les informations
	Printer_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	echo " " &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Téléchargement des pilotes de l'imprimante" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	log_action_begin_msg "Recherche des pilotes"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
		log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
		wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
		log_action_end_msg $?
	fi

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			# On télécharge les pilotes trouvés
			Url_Deb="$Url_Pkg"/"$pkg"
			echo "# Téléchargement du paquet : $pkg" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $pkg"
			wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que le paquet multiarch-support est installé et on l'installe le cas échéant (Ubuntu 64-bits seulement)
	if [[ "$Arch" == "x86_64" ]]; then
		log_action_begin_msg "Recherche du paquet 'multiarch-support' sur votre système"
		if dpkg -s multiarch-support &>/dev/null; then
			echo " - Paquet 'multiarch-support' deja installé" &>> "$Logfile"
			log_action_end_msg $?
		else
			echo " - Paquet 'multiarch-support' non installé" &>> "$Logfile"
			apt-get install -qq multiarch-support &>> "$Logfile"
			log_action_end_msg $?
		fi
		log_action_begin_msg "Recherche du paquet 'lib32stdc++6' sur votre système"
		if dpkg -s lib32stdc++6 &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'lib32stdc++6' deja installé" &>> "$Logfile"
		else
			log_action_end_msg 1
			echo " - Paquet 'lib32stdc++6' non installé" &>> "$Logfile"
			apt-get install -qq lib32stdc++6 &>> "$Logfile"
			log_action_end_msg $?
		fi
	fi
	# On vérifie que le paquet cups est installé et on l'installe le cas échéant
	log_action_begin_msg "Recherche du paquet 'cups' sur votre système"
	if dpkg -s cups &>/dev/null; then
		log_action_end_msg $?
		echo " - Paquet 'cups' deja installé" &>> "$Logfile"
	else
		log_action_end_msg 1
		apt-get install -qq cups &>> "$Logfile"
		log_action_end_msg $?
	fi
	# Si un pilote pour le scanner a été trouvé on vérifie que sane-utils est installé
	if [[ -n $Scanner_Deb ]]; then
		log_action_begin_msg "Recherche du paquet 'sane-utils' sur votre système"
		if dpkg -s sane-utils &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'sane-utils' deja installé" &>> "$Logfile"
		else
			log_action_end_msg 1
			echo " - Paquet 'sane-utils' non installé" &>> "$Logfile"
			apt-get install -qq sane-utils &>> "$Logfile"
			log_action_end_msg $?
		fi
		# On vérifie que libusb-0.1-4:i386 est installé
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Recherche du paquet 'libusb-0.1-4' sur votre système"
			if dpkg -s libusb-0.1-4 &>/dev/null; then
				log_action_end_msg $?
				echo " - Paquet 'libusb-0.1-4' deja installé" &>> "$Logfile"
			else
				log_action_end_msg 1
				echo " - Paquet 'libusb-0.1-4' non installé" &>> "$Logfile"
				apt-get install -qq libusb-0.1-4 &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
	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
			log_action_begin_msg "Recherche du paquet 'csh' sur votre système"
			if [[ ! -x /bin/csh ]]; then
				log_action_end_msg 1
				apt-get install -qq csh &>> "$Logfile"
				log_action_end_msg "$?"

			else
				echo " - Paquet 'csh' deja installé" &>> "$Logfile"
			fi
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/usr/share/cups/model' sur votre système"
	if [[ -d /usr/share/cups/model ]]; then
		log_action_begin_msg "Le dossier '/usr/share/cups/model' existe deja"
		log_action_end_msg $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -pv /usr/share/cups/model &>> "$Logfile"
		log_action_end_msg $?
	fi
	# On vérifie que le dossier /var/spool/lpd existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/var/spool/lpd' sur votre système"
	if [[ -d /var/spool/lpd ]]; then
		log_action_begin_msg "Le dossier '/var/spool/lpd' existe deja"
		log_action_end_msg $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -pv /var/spool/lpd &>> "$Logfile"
		log_action_end_msg $?
	fi
	# 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
			log_action_begin_msg "Recherche du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups' sur votre système"
			if [[ -L /etc/init.d/lpd ]]; then
				log_action_end_msg 0
			else
				log_action_end_msg 1
				log_action_begin_msg "Creation du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups'"
				echo "Creation du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups'" &>> "$Logfile"
				ln -s /etc/init.d/cups /etc/init.d/lpd
				# On crée un lien symbolique vers cups.service si systemd est utilisé
				if [[ -L /sbin/init ]]; then
					ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
					systemd-daemon reload
				fi
				log_action_end_msg $?
			fi
		fi
	done
	echo " " &>> "$Logfile"
}

############################
# INSTALLATION DES PAQUETS #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo "# Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo " " &>> "$Logfile"
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo "# Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			else
				echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
				log_action_end_msg 1
			fi
		done
	fi
	if [[ -n "$Ppd_File" ]]; then
		echo " - Fichier PPD : $Ppd_File trouvé " &>> "$Logfile"
		log_action_end_msg 0
	fi

	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo "# Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
	echo " " &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	#echo " " &>> "$Logfile"
	echo -e "$Blue Configuration du scanner $Resetcolor"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Configuration du scanner USB"
			echo " - Configuration du scanner USB" &>> "$Logfile"
			# On ajoute une entrée au fichier udev
			if [[ ! $(grep "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules") ]]; then
				echo "Adding ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" to "$Udev_Rules" &>> "$Logfile"
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
				echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
				# On recharge les règles udev
				udevadm control --reload
			else
				echo " - Règle udev trouvée dans le fichier $Udev_Rules" &>> "$Logfile"
			fi
		elif [[ $Connection == "Réseau" ]]; then
			log_action_begin_msg "Configuration du scanner réseau"
			echo " - Configuration du scanner réseau" &>> "$Logfile"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			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"
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				echo
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig"
				echo " - Copie des bibliotheques nécessaires brsaneconfig" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig2"
				echo " - Copie des bibliotheques nécessaires brsaneconfig2" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig3"
				echo " - Copie des bibliotheques nécessaires brsaneconfig3" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig4"
				echo " - Copie des bibliotheques nécessaires brsaneconfig4" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig5"
				echo " - Copie des bibliotheques nécessaires brsaneconfig5" &>> "$Logfile"
				cd "$Lib_Dir"/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
				log_action_end_msg 0
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
	echo " " &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_download_drivers
do_check_prerequisites
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

ce n' est certes pas parfait , mais c' est tout de meme largement mieux que ce que c' etait au depart .

Reste à tester à " grande echelle " .

PS : pour des raisons de test , j ' ai remis les logs en version originale , cela permet d ' avoir le log toujours dans le meme fichier , plus pratique pour les tests .
je remodifierai pour avoir un log " temporel " en version finale .

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#31 Le 03/08/2025, à 10:48

Watael

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

par défaut , c' est vide

select ne devrait pas permettre ça.

ce n'est pas si simple de tester une IP; le mieux c'est de vérifier que l'IP est joignable.
-le 255, alors -1 est valide, mais pas dans une IP. hmm


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

Hors ligne

#32 Le 03/08/2025, à 11:49

iznobe

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

Watael a écrit :

par défaut , c' est vide

select ne devrait pas permettre ça.

ce n'est pas si simple de tester une IP; le mieux c'est de vérifier que l'IP est joignable.
-le 255, alors -1 est valide, mais pas dans une IP. hmm

par defaut , c' est le comportement voulu , de façon a proposer a l' utilisateur d' entrer son choix .
ping permet de verfier si une ip est joignable .

pour ta derniere remarque je vois sur le net que :

INT1 -le INT2     Vrai si INT1 est inférieur ou égal à INT2 (<=)

la regex de la fonction , elimine de toute maniere les nombres autres que 0 à 9 , donc aucun soucis ...


PS : j ' ai modifié le code du message precedent pour y ajouter une autre fonction qui controle que l' ip est joignable .

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#33 Le 03/08/2025, à 12:22

eric63

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

j’ai utilisé la version 5 en usb et réseau aucun problème


Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR

Hors ligne

#34 Le 03/08/2025, à 12:33

Watael

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

par defaut , c' est le comportement voulu , de façon a proposer a l' utilisateur d' entrer son choix .

alors pas de problème. wink
"par défaut", signifie "défini sans intervention", c'est à dire «a une valeur» avant d'être modifié par l'utilisteur.

ping permet de verfier si une ip est joignable .

non. ce n'est pas aussi facile. sftw. il vaut mieux tester que le serveur est en ligne.
cf. ton edit : pas vu. wink

sois sûr de ce que tu testes : des nombres, des regex, du texte... une variable définie( ou pas) vide...ou pas...


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

Hors ligne

#35 Le 03/08/2025, à 14:19

iznobe

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

Bien que le code ait l' air pas trop mal , il doit rester des améliorations possible .

Cependant , il me reste un soucis , je ne sais pas quoi mettre dans le " elif " de la ligne 427 ... alors que pour celui de la ligne 484 j ' ai pu trouver facilement .

reste a voir pour le problème soulevé par @eric63 , ainsi que pour libsane/libsane1 ... pour ce dernier , peut etre en ajoutant un lien supplémentaire ?

Dernière modification par iznobe (Le 03/08/2025, à 14:21)


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#36 Le 03/08/2025, à 15:18

Watael

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

ping permet de verfier si une ip est joignable .

il y a des faux négatifs, parce que un serveur peut refuser les pings; renseigne-toi encore : un ping n'est pas suffisant.

il doit rester des améliorations possible

je confirme.
mais tu progresses*, c'est bien.

--
* en m'écoutant, continue lol


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

Hors ligne

#37 Le 03/08/2025, à 16:19

iznobe

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

Watael a écrit :

il y a des faux négatifs, parce que un serveur peut refuser les pings; renseigne-toi encore : un ping n'est pas suffisant.

oui , d' accord , mais là on est sur une imprimante ( censée etre en reseau local ) , le script n' a pas vocation a faire du pro / distant ( et n ' est pas fait pour gerer des serveurs dont le ping serait désactivé ! tongue ) , dans le cas basique ennoncé , cela me semble pas si mal comme mesure de validation d' IP / accessibilité .

quelques modifications / ajouts mineurs / harmonisation sortie terminal et fichier log :

#!/bin/bash
# Script d'installation pour imprimantes Brother

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

. /lib/lsb/init-functions

valid_ip() {
    local  ip=$1
    local  retour=1

    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        [ "${ip[0]}" -le 255 ] && [ "${ip[1]}" -le 255 ] && [ "${ip[2]}" -le 255 ] && [ "${ip[3]}" -le 255 ]
        retour=$?
    fi
    return $retour
}

control_ip() {
	if [[ -n "$IP" ]]; then
		if ( (valid_ip "$IP") ); then
			if ping -c2 "$IP"; then
				echo "# Adresse IP : $IP" &>> "$Logfile"
				log_action_end_msg 0
			else
				log_action_begin_msg "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_action_begin_msg "L ' adresse IP que vous avez entrée est incorrecte"
			unset IP
			log_action_end_msg 1
		fi
	fi
}

Model_Name="$1"
if [ -n "$2" ] && [ "$2" = "1" ]; then
	Connection="Réseau"
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$Logfile".old
	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^^}
	# 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"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red 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 $Resetcolor"
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename" &>> "$Logfile"
	echo "# Architecture : $Arch" &>> "$Logfile"
	echo "# Modèle de l'imprimante : $Model_Name" &>> "$Logfile"
	echo "# Type de connexion : $Connection" &>> "$Logfile"
	echo "# Repertoire courant : $Dir" &>> "$Logfile"
	echo "# Repertoire de telechargement des pilotes : $Temp_Dir" &>> "$Logfile"

	if [[ "$Connection" == "Réseau" ]]; then
		control_ip "$IP"
		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
	Printer_Name=$(echo "$Model_Name" | sed -e 's/-//')
	# On construit l'URL du fichier contenant les informations
	Printer_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	echo " " &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Téléchargement des pilotes de l'imprimante" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets si il n' existe pas deja
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	log_action_begin_msg "Recherche des pilotes"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			# On télécharge les pilotes trouvés
			if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
				Url_Deb="$Url_Pkg"/"$pkg"
				echo " - Téléchargement du paquet : $pkg" &>> "$Logfile"
				log_action_begin_msg "Téléchargement du paquet : $pkg"
				wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
				log_action_end_msg $?
			else
				log_action_begin_msg "Le paquet : $pkg a deja été telechargé"
				log_action_end_msg 0
			fi
		fi
	done

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		if [[ ! -f "$Temp_Dir"/"$Udev_Deb" ]]; then
			echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
			wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
			log_action_end_msg $?
		else
			log_action_begin_msg "Le paquet : $Udev_Deb a deja été telechargé"
			log_action_end_msg 0
		fi
	fi
	echo " " &>> "$Logfile"
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que le paquet multiarch-support est installé et on l'installe le cas échéant (Ubuntu 64-bits seulement)
	if [[ "$Arch" == "x86_64" ]]; then
		log_action_begin_msg "Recherche du paquet 'multiarch-support' sur votre système"
		if dpkg -s multiarch-support &>/dev/null; then
			echo " - Paquet 'multiarch-support' deja installé" &>> "$Logfile"
			log_action_end_msg 0
		else
			echo " - Paquet 'multiarch-support' non installé" &>> "$Logfile"
			apt-get install -qq multiarch-support &>> "$Logfile"
			log_action_end_msg 1
		fi
		log_action_begin_msg "Recherche du paquet 'lib32stdc++6' sur votre système"
		if dpkg -s lib32stdc++6 &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'lib32stdc++6' deja installé" &>> "$Logfile"
		else
			echo " - Paquet 'lib32stdc++6' non installé" &>> "$Logfile"
			apt-get install -qq lib32stdc++6 &>> "$Logfile"
			log_action_end_msg $?
		fi
	fi
	# On vérifie que le paquet cups est installé et on l'installe le cas échéant
	log_action_begin_msg "Recherche du paquet 'cups' sur votre système"
	if dpkg -s cups &>/dev/null; then
		log_action_end_msg $?
		echo " - Paquet 'cups' deja installé" &>> "$Logfile"
	else
		apt-get install -qq cups &>> "$Logfile"
		log_action_end_msg $?
	fi
	# Si un pilote pour le scanner a été trouvé on vérifie que sane-utils est installé
	if [[ -n $Scanner_Deb ]]; then
		log_action_begin_msg "Recherche du paquet 'sane-utils' sur votre système"
		if dpkg -s sane-utils &>/dev/null; then
			log_action_end_msg $?
			echo " - Paquet 'sane-utils' deja installé" &>> "$Logfile"
		else
			echo " - Paquet 'sane-utils' non installé" &>> "$Logfile"
			apt-get install -qq sane-utils &>> "$Logfile"
			log_action_end_msg $?
		fi
		# On vérifie que libusb-0.1-4:i386 est installé
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Recherche du paquet 'libusb-0.1-4' sur votre système"
			if dpkg -s libusb-0.1-4 &>/dev/null; then
				log_action_end_msg $?
				echo " - Paquet 'libusb-0.1-4' deja installé" &>> "$Logfile"
			else
				echo " - Paquet 'libusb-0.1-4' non installé" &>> "$Logfile"
				apt-get install -qq libusb-0.1-4 &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
	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
			log_action_begin_msg "Recherche du paquet 'csh' sur votre système"
			if dpkg -s csh &>/dev/null; then
				log_action_end_msg $?
				echo " - Paquet 'csh' deja installé" &>> "$Logfile"
			else
				echo " - Paquet 'csh' non installé" &>> "$Logfile"
				apt-get install -qq csh &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/usr/share/cups/model' sur votre système"
	if [[ -d /usr/share/cups/model ]]; then
		log_action_end_msg 0
	else
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -pv /usr/share/cups/model &>> "$Logfile"
		log_action_end_msg $?
	fi
	# On vérifie que le dossier /var/spool/lpd existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/var/spool/lpd' sur votre système"
	if [[ -d /var/spool/lpd ]]; then
		log_action_end_msg 0
	else
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -pv /var/spool/lpd &>> "$Logfile"
		log_action_end_msg $?
	fi
	# 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
			log_action_begin_msg "Recherche du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups' sur votre système"
			if [[ -L /etc/init.d/lpd ]]; then
				log_action_end_msg 0
			else
				log_action_begin_msg "Creation du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups'"
				ln -sfv /etc/init.d/cups /etc/init.d/lpd &>> "$Logfile"
				log_action_end_msg $?
				# On crée un lien symbolique vers cups.service si systemd est utilisé
				if [[ -L /sbin/init ]]; then
					ln -sfv /lib/systemd/system/cups.service /lib/systemd/system/lpd.service &>> "$Logfile"
					log_action_end_msg $?
					#systemd-daemon reload &>> "$Logfile"
					systemctl daemon-reload &>> "$Logfile"
				fi
			fi
		fi
	done
	echo " " &>> "$Logfile"
}

############################
# INSTALLATION DES PAQUETS #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	echo "# Installation des pilotes" &>> "$Logfile"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo " - Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo " " &>> "$Logfile"
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	echo "# Configuration de l'imprimante" &>> "$Logfile"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo " - Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			else
				echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
				log_action_end_msg 1
			fi
		done
	fi
	if [[ -n "$Ppd_File" ]]; then
		echo " - Fichier PPD : $Ppd_File trouvé " &>> "$Logfile"
		log_action_end_msg 0
	fi

	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo " - Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
	echo " " &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	echo -e "$Blue Configuration du scanner $Resetcolor"
	echo "# Configuration du scanner" &>> "$Logfile"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Configuration du scanner USB"
			echo " - Configuration du scanner USB" &>> "$Logfile"
			# On ajoute une entrée au fichier udev
			if [[ ! $(grep "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules") ]]; then
				echo "Adding ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" to "$Udev_Rules" &>> "$Logfile"
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
				echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
				# On recharge les règles udev
				udevadm control --reload
			else
				echo " - Règle udev trouvée dans le fichier $Udev_Rules" &>> "$Logfile"
			fi
		elif [[ $Connection == "Réseau" ]]; then
			log_action_begin_msg "Configuration du scanner réseau"
			echo " - Configuration du scanner réseau" &>> "$Logfile"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			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"
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				brsaneconfig5 -a name=SCANNER model= "$Model_Name" ip="$IP" &>> "$Logfile"
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig"
				echo " - Copie des bibliotheques nécessaires brsaneconfig" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig2"
				echo " - Copie des bibliotheques nécessaires brsaneconfig2" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig3"
				echo " - Copie des bibliotheques nécessaires brsaneconfig3" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig4"
				echo " - Copie des bibliotheques nécessaires brsaneconfig4" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig5"
				echo " - Copie des bibliotheques nécessaires brsaneconfig5" &>> "$Logfile"
				cd "$Lib_Dir"/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
				log_action_end_msg 0
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
	echo " " &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd || exit
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_download_drivers
do_check_prerequisites
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

je pense avoir fait le tour " rapidement " roll de ce que j' ai vu de flagrant de façon a obtenir un truc a peu pres fiable .
j ' attends les remontées des intervenants / utilisateurs quelques jours , et je mettrai a disposition en lien sur le github plus tard ?

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#38 Le 03/08/2025, à 21:54

eric63

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

eric63 a écrit :

@boursicot avait justement ce problème avant de lui faire installer cette lib

oups je me suis trompé c’est smooth la bonne personne, je l’ai contacté on va voir s’il répond


Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR

Hors ligne

#39 Le 03/08/2025, à 23:43

iznobe

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

As tu le lien de la discussion ?


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#40 Hier à 08:35

eric63

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

oui c’est


Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR

Hors ligne

#41 Hier à 12:32

iznobe

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

Salut , ok et merci .
je viens de verifier sur ma 24.04 , la libusb n ' est installé que pour x64 :

iznobe@iznobe-pc:~$ apt policy libusb-0.1-4:i386
libusb-0.1-4:i386:
  Installé : (aucun)
  Candidat : 2:0.1.12-35build1
 Table de version :
     2:0.1.12-35build1 500
        500 http://fr.archive.ubuntu.com/ubuntu noble/main i386 Packages
iznobe@iznobe-pc:~$ apt policy libusb-0.1-4
libusb-0.1-4:
  Installé : 2:0.1.12-35build1
  Candidat : 2:0.1.12-35build1
 Table de version :
 *** 2:0.1.12-35build1 500
        500 http://fr.archive.ubuntu.com/ubuntu noble/main amd64 Packages
        100 /var/lib/dpkg/status
iznobe@iznobe-pc:~$ 

je vais modifier le script en consequence .

Par contre , dans quel cas faut il l ' installer ?
tous les cas ?
seulement pour un scanner en USB dont les paquets pilotes sont eux aussi en :i386 ?
autre ?

PS : actuellement ( par demonipuch , bien que bugué ... ) , c' est prévu de l' installer uniquement dans le cas ou un scanner en connextion de type USB sera installé .

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#42 Hier à 13:22

iznobe

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

Bon , j ' ai modifié pour une meilleure évolution du code et simplification . cette fois , cela fonctionne correctement .

Dernière modification par iznobe (Hier à 14:25)


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#43 Hier à 13:28

eric63

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

Par contre , dans quel cas faut il l ' installer ?
tous les cas ?
seulement pour un scanner en USB dont les paquets pilotes sont eux aussi en :i386 ?
autre ?

Ça je ne sais pas trop, n’ayant jamais pu savoir d’où venait le problème réellement
cela tient parfois aux paquets disponibles suivant l’imprimante; normalement il y a une version 32 et 64bits pour chaque type de paquets mais c’est pas systématique.
j’avais pas fait attention que le script de demonipuch le prévoyait uniquement pour l’usb mais j’avais envoyé une demande pour qu’il prenne en compte la libusb:i386 à un moment parce que ce n’étais pas prévu du tout au départ cette lib en 32bits
Dans la plupart des cas que j’ai croisé, avoir les 2 versions de la lib résolvait le problème (les cas les plus problématiques se posaient avec le paquet brscan3 . Pas eut affaire avec les brscan1 et 2)
Donc je dirais que de mettre les deux versions 32 et 64 bits est plus crade mais plus efficace sans se prendre la tête (je peux me tromper sur les effets que ça entraîne) .
Usb et réseau peuvent cohabiter pour une même machine et même session suivant l’humeur de l’utilisateur, juste les pilotes ou l’imprimante à changer
Avant le driverless c’est ce que j‘utilisais: une imprimante par pilote.


Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR

Hors ligne

#44 Hier à 14:05

iznobe

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

ok , je verrais donc à l ' usage , merci @eric63 .


@watael : je viens de creer une fonction " simple " qui permet d' eclaircir le script , afin d' installer les paquets .
dejà , elle n ' est pas " conforme " , un coup de main serait grandement approprié pour la rendre conforme :

install_pkg() {
	if [[ -n "$1" ]]; then local pkg1="$1"; else unset pkg1; fi
	if [[ -n "$2" ]]; then local pkg2="$2"; else unset pkg2; fi
	if [[ -n "$3" ]]; then local pkg3="$3"; else unset pkg3; fi
	if [[ -n "$4" ]]; then local pkg4="$4"; else unset pkg4; fi
	if [[ -n "$5" ]]; then local pkg5="$5"; else unset pkg5; fi

	for pkg in "$pkg1" "$pkg2" "$pkg3" "$pkg4" "$pkg5"; do
		log_action_begin_msg "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_action_begin_msg "Installation du paquet : ' $pkg ' sur votre système"
			apt-get install -qq "$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

ce qui produit dans le cas ou les variables ne sont pas au nombre de 5 des :

* Installation du paquet : '  ' sur votre système...         

je me demandais , si en ajoutant un dernier ( ou 1er paramètre plutôt , puisqu ' on ne connaît pas le nombre de paramètres total au départ ) on pourrait l' étendre de façon a installer aussi les pilotes .
Actuellement le code pour installer les pilotes est celui-ci :

do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	echo "# Installation des pilotes" &>> "$Logfile"

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo " - Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done

	echo " " &>> "$Logfile"
}

grosso modo , la principale différence est l ' utilisation de " dpkg --force " à la place de " apt " .
pour le reste , je m' arrangerais .
on pourrait utiliser " dpkg --force " partout , et finir par un " apt install -f " ? moins " propre " certes , mais plus simple et plus rapide non ?

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#45 Hier à 14:19

iznobe

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

ok , j ' ai trouve :

install_pkg() {
	declare -a tab=($1 $2 $3 $4 $5 $6 $7 $8 $9 $10)
	#echo ${tab[@]}

	for pkg in "${tab[@]}"; do
		log_action_begin_msg "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_action_begin_msg "Installation du paquet : ' $pkg ' sur votre système"
			apt-get install -qq "$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

reste plus qu ' a voir si on peut " étendre " la fonction  à l ' installation des pilotes , j ' avoue que pour mla part je ne vois pas trop comment m ' y prendre pour le moment .
voir fin message précédent . Apres ce n' est pas indispensable wink

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#46 Hier à 14:45

iznobe

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

shellcheck me dit :

Line 8:
. /lib/lsb/init-functions
  ^-- SC1091 (info): Not following: /lib/lsb/init-functions was not specified as input (see shellcheck -x).
 
Line 75:
date=$(date +%F_%T)
^-- SC2034 (warning): date appears unused. Verify use (or export if used externally).
 
Line 126:
        echo "# Ubuntu Codename : $Codename" &>> "$Logfile"
        ^-- SC2129 (style): Consider using { cmd1; cmd2; } >> file instead of individual redirects.
 
Line 141:
        Printer_Name=$(echo "$Model_Name" | sed -e 's/-//')
                       ^-- SC2001 (style): See if you can use ${variable//search/replace} instead.
 
Line 324:
                for file in $(find /usr/share/cups/model -type f); do
                            ^-- SC2044 (warning): For loops over find output are fragile. Use find -exec or a while read loop.
 
Line 340:
        echo " - Ajout de l'imprimante $Model_Name" &>> "$Logfile"
        ^-- SC2129 (style): Consider using { cmd1; cmd2; } >> file instead of individual redirects.
 
Line 358:
        echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
        ^-- SC2129 (style): Consider using { cmd1; cmd2; } >> file instead of individual redirects.
 
Line 374:
                        if [[ ! $(grep "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules") ]]; then
                                ^-- SC2143 (style): Use grep -q instead of comparing output with [ -n .. ].

Y a t il moyen de " corriger les dernieres erreurs que mentionne shellcheck ?

Dernière modification par iznobe (Hier à 21:30)


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#47 Hier à 21:29

iznobe

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

j ' ai corrigé quelques alertes supplémentaires :

#!/bin/bash
# Script d'installation pour imprimantes Brother

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

. /lib/lsb/init-functions

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 -c2 "$IP"; then
				echo "# Adresse IP : $IP" &>> "$Logfile"
				log_action_end_msg 0
			else
				log_action_begin_msg "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_action_begin_msg "L ' adresse IP que vous avez entrée est incorrecte"
			unset IP
			log_action_end_msg 1
		fi
	fi
}

install_pkg() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

	for pkg in "${tab[@]}"; do
		log_action_begin_msg "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_action_begin_msg "Installation du paquet : ' $pkg ' sur votre système"
			apt-get install -qq "$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

Model_Name="$1"
if [ -n "$2" ] && [ "$2" = "1" ]; then
	Connection="Réseau"
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$Logfile".old
	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^^}
	# 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"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red 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 $Resetcolor"
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename
			# Architecture : $Arch
			# Modèle de l'imprimante : $Model_Name
			Type de connexion : $Connection
			# Repertoire courant : $Dir
			# Repertoire de telechargement des pilotes : $Temp_Dir" &>> "$Logfile"

	if [[ "$Connection" == "Réseau" ]]; then
		control_ip "$IP"
		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_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	echo " " &>> "$Logfile"
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "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
	install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget"

	# 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
			log_action_begin_msg "Recherche du paquet 'csh' sur votre système"
			if dpkg -s csh &>/dev/null; then
				log_action_end_msg $?
				echo " - Paquet 'csh' deja installé" &>> "$Logfile"
			else
				echo " - Paquet 'csh' non installé" &>> "$Logfile"
				log_action_end_msg 1
				log_action_begin_msg "Installation du paquet : ' csh ' sur votre système"
				apt-get install -qq csh &>> "$Logfile"
				log_action_end_msg $?
			fi
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/usr/share/cups/model' sur votre système"
	if [[ -d /usr/share/cups/model ]]; then
		log_action_end_msg 0
	else
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -pv /usr/share/cups/model &>> "$Logfile"
		log_action_end_msg $?
	fi
	# On vérifie que le dossier /var/spool/lpd existe et on le crée le cas échéant
	log_action_begin_msg "Recherche du dossier '/var/spool/lpd' sur votre système"
	if [[ -d /var/spool/lpd ]]; then
		log_action_end_msg 0
	else
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -pv /var/spool/lpd &>> "$Logfile"
		log_action_end_msg $?
	fi
	# 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
			install_pkg "csh"
		fi
	done
	echo " " &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Téléchargement des pilotes de l'imprimante" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets si il n' existe pas deja
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	log_action_begin_msg "Recherche des pilotes"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			# On télécharge les pilotes trouvés
			if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
				Url_Deb="$Url_Pkg"/"$pkg"
				echo " - Téléchargement du paquet : $pkg" &>> "$Logfile"
				log_action_begin_msg "Téléchargement du paquet : $pkg"
				wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
				log_action_end_msg $?
			else
				log_action_begin_msg "Le paquet : $pkg a deja été telechargé"
				log_action_end_msg 0
			fi
		fi
	done

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		if [[ ! -f "$Temp_Dir"/"$Udev_Deb" ]]; then
			echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
			wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
			log_action_end_msg $?
		else
			log_action_begin_msg "Le paquet : $Udev_Deb a deja été telechargé"
			log_action_end_msg 0
		fi
	fi
	echo " " &>> "$Logfile"
}

############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	echo "# Installation des pilotes" &>> "$Logfile"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo " - Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo " " &>> "$Logfile"
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	echo "# Configuration de l'imprimante" &>> "$Logfile"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo " - Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			else
				echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
				log_action_end_msg 1
			fi
		done
	fi
	if [[ -n "$Ppd_File" ]]; then
		echo " - Fichier PPD : $Ppd_File trouvé " &>> "$Logfile"
		log_action_end_msg 0
	fi

	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo " - Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
	echo " " &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	echo -e "$Blue Configuration du scanner $Resetcolor"
	echo "# Configuration du scanner" &>> "$Logfile"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Configuration du scanner USB"
			echo " - Configuration du scanner USB" &>> "$Logfile"
			# 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
				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"
				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_action_begin_msg "Configuration du scanner réseau"
			echo " - Configuration du scanner réseau" &>> "$Logfile"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			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"
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig"
				echo " - Copie des bibliotheques nécessaires brsaneconfig" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig2"
				echo " - Copie des bibliotheques nécessaires brsaneconfig2" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig3"
				echo " - Copie des bibliotheques nécessaires brsaneconfig3" &>> "$Logfile"
				cd "$Lib_Dir" || 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 "$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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig4"
				echo " - Copie des bibliotheques nécessaires brsaneconfig4" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				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
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig5"
				echo " - Copie des bibliotheques nécessaires brsaneconfig5" &>> "$Logfile"
				cd "$Lib_Dir"/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
				log_action_end_msg 0
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
	echo " " &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd || exit
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

il en reste 2 a corriger :

$ shellcheck myscript
 
Line 8:
. /lib/lsb/init-functions
  ^-- SC1091 (info): Not following: /lib/lsb/init-functions was not specified as input (see shellcheck -x).
 
Line 325:
                for file in $(find /usr/share/cups/model -type f); do
                            ^-- SC2044 (warning): For loops over find output are fragile. Use find -exec or a while read loop.
 

PS : j ' ai scanné avec xsane sur mon raspberry pi en utilisant ce script ( configuration : brsaneconfig5 ) et mon imprimante DCP-L3560CDW , ca a fonctionné , deja un bon point big_smile
j ' ai ajouté un " todo " en debut de script et des commentaires " # ??????? " au milieu pour ceux / celles qui voudrait se pencher sur la question et m ' aider a finaliser ce script .
je n' ai pas trouvé comment faire pour eviter de casser les dependances avec le manque de " libsane " vu que ce paquet en 24.04 et versions superieures se nomme maintenant " libsane1 " que de supprimer le paquet brscan-skey apres coup .

je suis ouvert aux propositions / tests , modifications bien entendu tongue

Dernière modification par iznobe (Aujourd'hui à 01:13)


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#48 Hier à 21:59

Watael

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

^[0-9]{1,3}

0.1.2.3 va être validée, alors que ce n'est pas une IP possible

${ip[0]} -le 255 #${ip[X]} sont des nombres (normalement), les guillemets sont inutiles.

-12.1.2.3 va être validée, alors que ce n'est pas une IP possible. wink

je laisserais tomber la regex*, et simplement :

$ ip=0.456.789.123
$ IFS=. read -ra IP <<<$ip
$ for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || >&2 echo error $i; done                                                                                                              
error 0                                                                                                                                                                                                                                        
error 456                                                                                                                                                                                                                                      
error 789
$ unset n

--
* j'ai déjà eu l'ocassion de faire des recherches à ce sujet, et une regex de validation d'IP est beaucoup plus compliquée que ça


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

Hors ligne

#49 Hier à 22:21

iznobe

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

Watael a écrit :

-12.1.2.3 va être validée, alors que ce n'est pas une IP possible. wink

tu as testé pour dire ?
d' apres mon test , ce n' est pas le cas :

#!/bin/bash
# Script d'installation pour imprimantes Brother

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

. /lib/lsb/init-functions

valid_ip() {
    local  ip=$1
    local  retour=1

    if [[ $ip =~ ^[0-9]\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        #ip=($ip)
        read -r -a ip <<< "$ip"
        IFS=$OIFS
        [ ${ip[0]} -le 255 ] && [ ${ip[1]} -le 255 ] && [ ${ip[2]} -le 255 ] && [ ${ip[3]} -le 255 ]
        retour=$?
    fi
    return $retour
}

while [[ -z "$IP" ]]; do
            read -rp "Entrez l'adresse IP de votre imprimante : " IP
            valid_ip "$IP"
            echo " IP valide = 0 , IP non valide = 1 , retour = $? "
        done
    echo $IP
iznobe@iznobe-pc:~$ bash ~/Scripts/testip.sh 
Entrez l'adresse IP de votre imprimante : -12.1.2.3
 IP valide = 0 , IP non valide = 1 , retour = 1 
-12.1.2.3
iznobe@iznobe-pc:~$

Quant à :

Watael a écrit :

0.1.2.3 va être validée, alors que ce n'est pas une IP possible

voilà la solution simpliste :

valid_ip() {
    local  ip=$1
    local  retour=1

    if [[ $ip =~ ^[0-9]\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        OIFS=$IFS
        IFS='.'
        #ip=($ip)
        read -r -a ip <<< "$ip"
        IFS=$OIFS
        [ ${ip[0]} -le 255 ] && [ ${ip[0]} -ne 0 ] && [ ${ip[1]} -le 255 ] && [ ${ip[2]} -le 255 ] && [ ${ip[3]} -le 255 ]
        retour=$?
    fi
    return $retour
}

resultat :

iznobe@iznobe-pc:~$ bash ~/Scripts/testip.sh 
Entrez l'adresse IP de votre imprimante : 0.1.2.3
 IP valide = 0 , IP non valide = 1 , retour = 1 
0.1.2.3
iznobe@iznobe-pc:~$ bash ~/Scripts/testip.sh 
Entrez l'adresse IP de votre imprimante : 1.0.0.0
 IP valide = 0 , IP non valide = 1 , retour = 0 
1.0.0.0
iznobe@iznobe-pc:~$ 
Watael a écrit :

* j'ai déjà eu l'ocassion de faire des recherches à ce sujet, et une regex de validation d'IP est beaucoup plus compliquée que ça

je ne sais pas pourquoi tu focalises sur " regex " .
Dans le cas present il s' agit d ' une fonction , pas d' une regex .
Cette fonction combine une regex et des tests comparatifs . isoler la regex n ' a pas de sens vu que j' utilise la fonction , et pas la regex seule .

Sur le fond tu as tout à fait raison , et c' est bien pour cela que j' ai choisi une fonction de validation et pas un simple regex tongue

En tout cas je te remercie d' avoir porter mon attention sur mon oublie pour le 1er bit a 0 de l ' IP .
je corrige big_smile

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

En ligne

#50 Hier à 22:49

Watael

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

tu utilises une regex ET un test numérique (parce que la regex est incomplète), alors qu'un "simple" test numérique (comme celui que je montre) dans une boucle fait parfaitement le boulot tout seul.

wink

Dernière modification par Watael (Hier à 22:49)


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

Hors ligne