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.

#1 Le 17/07/2025, à 16:06

iznobe

remise au gout du jour du script de demonipuch imprimante brother

Bonjour ,

j ' aurais besoin d' un peu d' aide pour corriger le tir du script de demonipuch pour installer les imprimantes scanner brother .
le code source est dispo a cette adresse : https://bitbucket.org/demonipuch/brprin … rc/master/ , mais impossible de le modifier ou d' envoyer des commits roll

un fichier log est disponible afin de voir le resultat du script et les soucis a traiter sur une 25.04 : https://forum.ubuntu-fr.org/viewtopic.p … #p22847624


Bref , deja , j ' ai corrigé pour le scanner et l' installation du paquet qui va avec , voici ce que ça  donne :

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

. /lib/lsb/init-functions

MODEL_NAME=$1
USER=${SUDO_USER}
DIR=$(pwd)/$(dirname $0)
TEMP_DIR="${DIR}/packages"
CODENAME=$(lsb_release -cs)
ARCH=$(uname -m)
LOGFILE="${DIR}/brprinter-installer.log"
LIB_DIR="/usr/lib/${ARCH}-linux-gnu"
URL_INF="http://www.brother.com/pub/bsc/linux/infs"
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 #
#########################
function do_init_script() {
	# On vérifie qu'on lance le script en root
	if [[ ${EUID} != "0" ]]; 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 [[ -e ${LOGFILE} ]]; then
		mv ${LOGFILE} ${LOGFILE}.old
	fi
	touch ${LOGFILE}
	# Si le premier argument est vide on demande le modèle de l'imprimante
	while [[ -z "${MODEL_NAME}" ]]; do
		read -p "Entrez votre modèle : " MODEL_NAME
	done
	MODEL_NAME=$(echo ${MODEL_NAME} | tr [a-z] [A-Z])
	# On demande comment est connectée l'imprimante
	echo "Sélectionner le type de connectivité : [0] USB - [1] Réseau"
	while [[ -z ${CONNECTION} ]]; do
		read -p "Entrez votre choix : "
		case $REPLY in
			0)
				CONNECTION="USB"
			;;
			1)
				CONNECTION="Réseau"
				echo -e ${RED}"Vous devriez 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 -p "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 "# Connexion : ${CONNECTION}" &>> ${LOGFILE}
	if [[ ${CONNECTION} == "Réseau " ]]; then
		echo "# Adresse IP : ${IP}" &>> ${LOGFILE}
	fi
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
function do_download_drivers() {
	echo -e ${BLUE}"Téléchargement des pilotes de l'imprimante"${RESETCOLOR}
	# On transforme le nom de l'imprimante
	log_action_begin_msg "Recherche des pilotes"
	PRINTER_NAME=$(echo ${MODEL_NAME} | sed -e 's/-//' | tr [a-z] [A-Z])
	# 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)
	SCANNER_INFO="${URL_INF}/${SCANNER_DEB}.lnk"
	SCANKEY_DEB=$(wget -q ${PRINTER_INFO} -O - | grep SCANKEY_DRV - | cut -d\= -f2)
	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
	# On ajoute la liste des pilotes trouvés au fichier de journalisation
	for PKG in ${PRINTER_LPD_DEB} ${PRINTER_CUPS_DEB} ${PRINTER_DRV_DEB} ${SCANNER_DRV_DEB} ${SCANKEY_DRV_DEB}; do
		if [[ ! -z ${PKG} ]]; then
			echo " - Paquet trouvé : ${PKG}" &>> ${LOGFILE}
		fi
	done
	log_action_end_msg 0
	# On crée le dossier de téléchargement des paquets
	if [[ ! -d ${TEMP_DIR} ]]; then
		mkdir ${TEMP_DIR}
	fi
	# On télécharge les pilotes trouvés
	for PKG in ${PRINTER_LPD_DEB} ${PRINTER_CUPS_DEB} ${PRINTER_DRV_DEB} ${SCANNER_DRV_DEB} ${SCANKEY_DRV_DEB}; do
		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 $?
	done
	# On télécharge le fichier pour udev pour les scanners
	if [[ ! -z ${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
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
function 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' installé" &>> ${LOGFILE}
		else
			log_action_end_msg 1
			echo " - Paquet 'multiarch-support' non installé" &>> ${LOGFILE}
			log_action_begin_msg "Installation du paquet 'multiarch-support'"
			echo "# Installation de 'multiarch-support'" &>> ${LOGFILE}
			apt-get install -qq multiarch-support &>> ${LOGFILE}
			log_action_end_msg $?
			echo " - Paquet 'multiarch-support' installé" &>> ${LOGFILE}
		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' installé" &>> ${LOGFILE}
		else
			log_action_end_msg 1
			echo " - Paquet 'lib32stdc++6' non installé" &>> ${LOGFILE}
			log_action_begin_msg "Installation du paquet 'lib32stdc++6'"
			echo "# Installation de 'lib32stdc++6'" &>> ${LOGFILE}
			apt-get install -qq lib32stdc++6 &>> ${LOGFILE}
			log_action_end_msg $?
			echo " - Paquet 'lib32stdc++6' installé" &>> ${LOGFILE}
		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' installé" &>> ${LOGFILE}
	else
		log_action_end_msg 1
		log_action_begin_msg "Installation du paquet 'cups'"
		echo "# Installation de 'cups'" &>> ${LOGFILE}
		apt-get install -qq cups &>> ${LOGFILE}
		log_action_end_msg $?
		echo " - Paquet 'cups' installé" &>> ${LOGFILE}
	fi
	# Si un pilote pour le scanner a été trouvé on vérifie que sane-utils est installé
	if [[ ! -z ${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' installé" &>> ${LOGFILE}
		else
			log_action_end_msg 1
			echo " - Paquet 'sane-utils' non installé" &>> ${LOGFILE}
			log_action_begin_msg "Installation du paquet 'sane-utils'"
			echo "# Installation de 'sane-utils'" &>> ${LOGFILE}
			apt-get install -qq sane-utils &>> ${LOGFILE}
			log_action_end_msg $?
			echo " - Paquet 'sane-utils' installé" &>> ${LOGFILE}
		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' installé" &>> ${LOGFILE}
			else
				log_action_end_msg 1
				echo " - Paquet 'libusb-0.1-4' non installé" &>> ${LOGFILE}
				log_action_begin_msg "Installation du paquet 'libusb-0.1-4'"
				echo "# Installation de 'libusb-0.1-4'" &>> ${LOGFILE}
				apt-get install -qq libusb-0.1-4 &>> ${LOGFILE}
				log_action_end_msg $?
				echo " - Paquet 'libusb-0.1-4' installé" &>> ${LOGFILE}
			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
				log_action_begin_msg "Installation du paquet 'csh'"
				echo "# Installation du paquet 'csh'" &>> ${LOGFILE}
				apt-get install -qq csh &>> ${LOGFILE}
				log_action_end_msg $?
				echo " - Paquet 'csh' installé" &>> ${LOGFILE}
			else
				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 $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -p /usr/share/cups/model
		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 $?
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -p /var/spool/lpd
		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 #
############################
function 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}; do
		log_action_begin_msg "Installation du paquet : ${PKG}"
		echo &>> ${LOGFILE}
		echo "# Installation du paquet : ${PKG}" &>> ${LOGFILE}
		dpkg -i --force-all "${TEMP_DIR}/${PKG}" &>> ${LOGFILE}
		log_action_end_msg $?
	done
	if [[ ! -z ${SCANNER_DRV_DEB} ]]; then
		log_action_begin_msg "Installation du paquet : ${UDEV_DEB}"
		echo &>> ${LOGFILE}
		echo "# Installation du paquet : ${UDEV_DEB}" &>> ${LOGFILE}
		dpkg -i --force-all "${TEMP_DIR}/${UDEV_DEB}" &>> ${LOGFILE}
		log_action_end_msg $?
	fi
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
function 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
		PPD_FILE=$(dpkg --contents ${TEMP_DIR}/${PKG} | grep ppd | awk '{print $6}' | sed 's/^.//g')
	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 #
############################
function do_configure_scanner() {
	if [[ ! -z ${SCANNER_DEB} ]]; then
		echo -e ${BLUE}"Configuration du scanner"${RESETCOLOR}
		echo &>> ${LOGFILE}
		echo "# Configuration du scanner" &>> ${LOGFILE}
		if [[ ${CONNECTION} == "USB" ]]; then
			# Installation du paquet brother-udev
			dpkg -i --force-all "${TEMP_DIR}/${UDEV_DEB}" &>> ${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}
			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 librairies
		if [[ ${ARCH} == "x86_64" ]] && [[ -d ${LIB_DIR} ]]; then
			log_action_begin_msg "Copie des librairies nécessaires"
			if [[ -e /usr/bin/brsaneconfig ]]; then
				cd ${LIB_DIR}
				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
				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}
				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
				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}
				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
				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
				cp --force /usr/lib64/sane/libsane-brother4.so.1.0.7 .
				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
			else
				log_action_end_msg 1
				echo -e ${RED}"No config binary found."${RESETCOLOR}
			fi
		fi
	fi
}

#################
# FIN DU SCRIPT #
#################
function 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

il reste a modifier pour l ' installation du paquet multiarch-support ( plus dispo sous 25.04 )
pour libsane / libsane1 et curl .

je dispose d ' un stockage sur github pour le mettre en ligne une fois finalisé si besoin .

je n' aurais pas trop le temps de m ' y pencher pendant les jours à venirs ... MAIS je peux tester le script et je dispose d ' une imprimante brother pour effectuer les tests si besoin .

Dernière modification par iznobe (Le 17/07/2025, à 17:04)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#2 Le 17/07/2025, à 17:18

Watael

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

if ((EUID))

évaluation arithmétique

if test -e "$LOGFILE"

test simple, simplement test

#touch "$LOGFILE"

inutile

while test -z "$MODEL_NAME"

idem point 2

vire les accolades inutiles, et mets systématiquement des guillemets.

. /lib/lsb/init-functions

ça n'existe pas chez moi; si c'est indispensable il faut en tester l'existence.

de toute façon, je n'ai pas de Brother. sad

wink big_smile

Dernière modification par Watael (Le 17/07/2025, à 17:19)


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

Hors ligne

#3 Le 17/07/2025, à 17:56

geole

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

Bonjour
Il me semble que brother fournit les  scripts nécessaires. https://www.brother.com/apps/ps/fr/index.htm


Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity

Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248

Hors ligne

#4 Le 17/07/2025, à 17:59

iznobe

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

Salut geole , ils ne sont pas à jours non plus roll


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#5 Hier à 10:06

eric63

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

Salut
je ne sais pas si ton script en tient compte
mais il existe 2 librairies de libusb-0.1-4
une pour l’ architecture 32bits qui se nomme  libusb-0.1-4:i386
et l’autre pour le 64bits qui se nomme libusb-0.1-4 tout simplement.
Il me semble que ton script ne tient compte que de voir si libusb-0.1-4  (64bits) est installé
et ce n’est pas suffisant (les paquets normalement doivent exister en 32 et 64 bits mais parfois ils n’existent ou ne sont pris en compte (problème de script demonipuch??) qu’en 32 bits

Pour le problème d’architecture en 25.04 on doit chercher la lib32stdc++6 pour remplacer le paquet arch ce que le script de demonipuch fait

l’idéal serait d’abord de passer avec les pilotes driverless qui n’ont pas besoin de ces scripts (demonipuch et brother) .
Lorsque qu’on installe une 25.04 ou une 24.04 le driverless est fait de base, on a rien a faire pour que l’imprimante et le scanner soit reconnus.
Mais si on part d’une mise à niveau, les driverless ne sont pas reconnues et je ne sais pas comment les faire reconnaître à ce stade j’ai essayé et chercher mais bon …
(les 2 peuvent cohabiter ensemble  sauf liste d’attente des impressions qui ne sont pas compatibles entre elles)

il y a aussi 3 librairies

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

qui ne vont pas aux mêmes endroits suivant l’architecture 32 ou 64 bits
soit dans /lib/i386-linux-gnu/ ou /lib/X64_86-linux-gnu/

Dernière modification par eric63 (Hier à 10:27)


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

#6 Hier à 10:37

iznobe

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

eric63 a écrit :

je ne sais pas si ton script en tient compte

Salut eric ,il ne s' agit pas de " mon " script , comme indiqué dans le titre , j ' ai recupéré le dernier script de demonipuch pour corriger les bugs qu ' il comporte , et a y etre , le remettre en etat de fonctionner correctement pour 24.04 et supérieures .

le " soucis " pour 24.04 et supérieures etant que brother n ' a pas mis à jour ses scripts non plus .
il faudra donc refaire manuellement l ' install ( ou les liens ) des " bons / nouveaux " paquets dans le script en plus .

je remet le nez dedans , en commençant par les modifs indiquées par @Watael .

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#7 Hier à 11:09

eric63

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

oui c’est vrai j’aurais du écrire «le script de demonipuch modifié par iznobe et aidés par … » au lieu de «ton script» mais c’est un raccourci conscient que je faisais, je n’enlève rien aux contributions de l’un ou l’autre et de toutes les aides que vous avez reçues pour valider ces scripts smile continuer pour le meilleur du libre


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

#8 Hier à 17:29

iznobe

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

j ' ai rectifié et amelioré des bricoles , la syntaxe , etc ...

ca m' a l' air d' être un début .

reste à inclure les modifs pour paquets , bibliothèques etc ... a tester pour ceux qui veulent .

par exemple en copiant le script et et en mettant la commande :

sudo bash Scripts/demonipuch.sh    DCP-L2530DW   1    192.168.1.1
sudo bash Scripts/demonipuch.sh    Nom_Imprimante    type de connexion    IP

type de connection : 0 pour USB ou 1 pour reseau .

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

. /lib/lsb/init-functions

Model_Name="$1"
Connection="$2"
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)/$(dirname "$0")"
Temp_Dir="$Dir/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
Logfile="/home/$User/brprinter-installer.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 #
#########################
function 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
	touch "$Logfile"
	# 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 : " Model_Name
	done
	Model_Name=$(echo "$Model_Name" | tr 'a-z' 'A-Z')
	# On demande comment est connectée l'imprimante
	echo "Sélectionner le type de connectivité : [0] USB - [1] Réseau"
	while [[ -z "$Connection" ]]; do
		read -rp "Entrez 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 "# Connexion : $Connection" &>> "$Logfile"
	if [[ "$Connection" == "Réseau" ]]; then
		echo "# Adresse IP : $IP" &>> "$Logfile"
	fi
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
function do_download_drivers() {
	# On crée le dossier de téléchargement des paquets
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi

	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	# On transforme le nom de l'imprimante
	log_action_begin_msg "Recherche des pilotes"
	Printer_Name=$(echo "$Model_Name" | sed -e 's/-//' | tr 'a-z' 'A-Z')
	# 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 #
###############################
function 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"
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/usr/share/cups/model'"
		mkdir -p /usr/share/cups/model
		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"
	else
		log_action_end_msg 1
		log_action_begin_msg "Creation du dossier '/var/spool/lpd'"
		mkdir -p /var/spool/lpd
		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 #
############################
function 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 du paquet par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
function 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
		Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
	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 #
############################
function 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
				cp --force /usr/lib64/sane/libsane-brother4.so.1.0.7 .
				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
				#cp --force /usr/lib64/sane/libsane-brother5.so.1.0.7 .
				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 #
#################
function 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 (Hier à 19:12)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#9 Hier à 17:31

iznobe

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

Watael a écrit :

de toute façon, je n'ai pas de Brother. sad

wink big_smile

Il n ' y en a pas besoin pour utiliser le script , ni pour verifier sa validité wink


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#10 Hier à 18:33

Watael

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

comment je vérifie que le matériel est correctement installé ?


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

Hors ligne

#11 Hier à 18:59

iznobe

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

ça je m ' en occuperais moi-meme et avec d' autres intervenants , vu que tu ne pourras pas faire cette partie .


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#12 Hier à 19:13

iznobe

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

edit du code précédent , j ' avais oublié deux " ' " ...


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#13 Hier à 21:35

eric63

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

faudrait voir aussi avec le cas pour les paquets en 32bits et le comportement de la libusbb-0.1-4:i386 si elle est correctement prise en compte

* Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb...     [ OK ]
* Téléchargement du paquet : brscan-skey-0.3.2-0.amd64.deb...[ OK ]
* Recherche du paquet 'libusb-0.1-4' sur votre système...       
kubu@kubu-System-Product-Name:~$ /home/kubu/script_iznobe.sh 
 Vous devez lancer ce script en tant que root : sudo bash /home/kubu/script_iznobe.sh 
kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
[sudo] password for kubu: 
Entrez votre modèle : MFC-j4510dw
Sélectionner le type de connectivité : [0] USB - [1] Réseau
Entrez votre choix : 0
mkdir: cannot create directory ‘/home/kubu//home/kubu/packages’: No such file or directory
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                                                                         * Téléchargement du paquet : brother-udev-rule-type1-1.0.2-0.all.deb...                                                                                                    [ OK ] 
                                                                                                                                                                            [ OK ]
 * Téléchargement du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb...                                                                                                             [ OK ] 
                                                                                                                                                                            [ OK ]
 * Téléchargement du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb...                                                                                                     [ OK ] 
                                                                                                                                                                            [ OK ]
 * Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb...                                                                                                                 [ OK ] 
                                                                                                                                                                            [ OK ]
 * Téléchargement du paquet : brscan-skey-0.3.2-0.amd64.deb...                                                                                                              [ OK ] 
 Vérification des pré-requis 
 * Mise à jour de la liste des paquets...                                                                                                                                   [ OK ] 
 * Recherche du paquet 'multiarch-support' sur votre système...                                                                                                             [fail] 
                                                                                                                                                                            [fail]
 * Recherche du paquet 'lib32stdc++6' sur votre système...                                                                                                                  [ OK ] 
 * Recherche du paquet 'cups' sur votre système...                                                                                                                          [ OK ] 
 * Recherche du paquet 'sane-utils' sur votre système...                                                                                                                    [ OK ] 
 * Recherche du paquet 'libusb-0.1-4' sur votre système...                                                                                                                  [ OK ] 
 * Recherche du dossier '/usr/share/cups/model' sur votre système...                                                                                                                * Le dossier '/usr/share/cups/model' existe deja...                                                                                                                                * Recherche du dossier '/var/spool/lpd' sur votre système...                                                                                                                       * Le dossier '/var/spool/lpd' existe deja...                                                                                                                                       Installation des pilotes 
 * Installation du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb...                                                                                                               [ OK ] 
 * Installation du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb...                                                                                                       [ OK ] 
 * Installation du paquet : brscan4-0.4.11-1.amd64.deb...                                                                                                                   [ OK ] 
 * Installation du paquet : brscan-skey-0.3.2-0.amd64.deb...                                                                                                                [ OK ] 
 * Installation du paquet : brother-udev-rule-type1-1.0.2-0.all.deb...                                                                                                      [ OK ] 
 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 /home/kubu//home/kubu/packages/: Is a directory
/home/kubu/script_iznobe.sh: line 306: MFCJ4510DW: command not found
                                                                                                                                                                            [ OK ]
 * Ajout de l'imprimante  MFC-J4510DW...                                                                                                                                           lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpadmin: Unable to open PPD "": Impossible d'ouvrir le fichier PPD on line 0.
                                                                                                                                                                            [fail]
 Configuration du scanner 
 * Copie des bibliotheques nécessaires...                                                                                                                                          cp: '/usr/lib64/sane/libsane-brother4.so.1.0.7' and './libsane-brother4.so.1.0.7' are the same file
                                                                                                                                                                            [ OK ]
kubu@kubu-System-Product-Name:~$ 

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


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

#14 Hier à 22:14

eric63

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

un fichier de log existe si on utilise le script de demonipuch et il contient beaucoup d’informations utiles à comparer avec ton script si ça peut être utile

# Ubuntu Codename : plucky
# Architecture : x86_64
# Modèle de l'imprimante : MFC-J4510DW
# Connexion : USB
# Fichier d'informations : http://www.brother.com/pub/bsc/linux/infs/MFCJ4510DW
# Téléchargement du paquet : brother-udev-rule-type1-1.0.2-0.all.deb
--2025-08-02 19:23:52--  http://download.brother.com/welcome/dlf006654/brother-udev-rule-type1-1.0.2-0.all.deb
Resolving download.brother.com (download.brother.com)... 23.217.245.108
Connecting to download.brother.com (download.brother.com)|23.217.245.108|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1558 (1,5K) [image/x-deb]
Saving to: ‘/home/kubu//home/kubu/packages/brother-udev-rule-type1-1.0.2-0.all.deb’

     0K .                                                     100%  133M=0s

2025-08-02 19:23:52 (133 MB/s) - ‘/home/kubu//home/kubu/packages/brother-udev-rule-type1-1.0.2-0.all.deb’ saved [1558/1558]

 - Paquet trouvé : mfcj4510dwlpr-3.0.1-1.i386.deb

# Téléchargement du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb
--2025-08-02 19:23:52--  http://www.brother.com/pub/bsc/linux/packages/mfcj4510dwlpr-3.0.1-1.i386.deb
Resolving www.brother.com (www.brother.com)... 104.85.53.149
Connecting to www.brother.com (www.brother.com)|104.85.53.149|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://download.brother.com/pub/com/linux/linux/packages/mfcj4510dwlpr-3.0.1-1.i386.deb [following]
--2025-08-02 19:23:53--  https://download.brother.com/pub/com/linux/linux/packages/mfcj4510dwlpr-3.0.1-1.i386.deb
Resolving download.brother.com (download.brother.com)... 23.217.245.108
Connecting to download.brother.com (download.brother.com)|23.217.245.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3038108 (2,9M) [text/plain]
Saving to: ‘/home/kubu//home/kubu/packages/mfcj4510dwlpr-3.0.1-1.i386.deb’

     0K .......... .......... .......... .......... ..........  1% 2,55M 1s
    50K .......... .......... .......... .......... ..........  3% 5,65M 1s
   100K .......... .......... .......... .......... ..........  5% 10,3M 1s
   150K .......... .......... .......... .......... ..........  6% 13,9M 0s
   200K .......... .......... .......... .......... ..........  8% 13,8M 0s
   250K .......... .......... .......... .......... .......... 10% 23,2M 0s
   300K .......... .......... .......... .......... .......... 11% 18,1M 0s
   350K .......... .......... .......... .......... .......... 13% 25,3M 0s
   400K .......... .......... .......... .......... .......... 15% 22,4M 0s
   450K .......... .......... .......... .......... .......... 16% 39,3M 0s
   500K .......... .......... .......... .......... .......... 18% 33,3M 0s
   550K .......... .......... .......... .......... .......... 20% 41,6M 0s
   600K .......... .......... .......... .......... .......... 21% 50,1M 0s
   650K .......... .......... .......... .......... .......... 23% 27,4M 0s
   700K .......... .......... .......... .......... .......... 25% 68,8M 0s
   750K .......... .......... .......... .......... .......... 26% 43,5M 0s
   800K .......... .......... .......... .......... .......... 28% 64,2M 0s
   850K .......... .......... .......... .......... .......... 30% 39,1M 0s
   900K .......... .......... .......... .......... .......... 32% 59,3M 0s
   950K .......... .......... .......... .......... .......... 33% 83,0M 0s
  1000K .......... .......... .......... .......... .......... 35% 60,0M 0s
  1050K .......... .......... .......... .......... .......... 37% 83,1M 0s
  1100K .......... .......... .......... .......... .......... 38% 63,4M 0s
  1150K .......... .......... .......... .......... .......... 40% 58,8M 0s
  1200K .......... .......... .......... .......... .......... 42%  100M 0s
  1250K .......... .......... .......... .......... .......... 43% 72,2M 0s
  1300K .......... .......... .......... .......... .......... 45% 95,7M 0s
  1350K .......... .......... .......... .......... .......... 47% 86,9M 0s
  1400K .......... .......... .......... .......... .......... 48% 96,3M 0s
  1450K .......... .......... .......... .......... .......... 50%  118M 0s
  1500K .......... .......... .......... .......... .......... 52% 89,3M 0s
  1550K .......... .......... .......... .......... .......... 53%  111M 0s
  1600K .......... .......... .......... .......... .......... 55%  141M 0s
  1650K .......... .......... .......... .......... .......... 57% 71,0M 0s
  1700K .......... .......... .......... .......... .......... 58%  134M 0s
  1750K .......... .......... .......... .......... .......... 60%  168M 0s
  1800K .......... .......... .......... .......... .......... 62%  140M 0s
  1850K .......... .......... .......... .......... .......... 64%  148M 0s
  1900K .......... .......... .......... .......... .......... 65%  124M 0s
  1950K .......... .......... .......... .......... .......... 67%  174M 0s
  2000K .......... .......... .......... .......... .......... 69%  118M 0s
  2050K .......... .......... .......... .......... .......... 70%  126M 0s
  2100K .......... .......... .......... .......... .......... 72%  141M 0s
  2150K .......... .......... .......... .......... .......... 74%  126M 0s
  2200K .......... .......... .......... .......... .......... 75%  258M 0s
  2250K .......... .......... .......... .......... .......... 77%  128M 0s
  2300K .......... .......... .......... .......... .......... 79%  128M 0s
  2350K .......... .......... .......... .......... .......... 80%  163M 0s
  2400K .......... .......... .......... .......... .......... 82% 71,0M 0s
  2450K .......... .......... .......... .......... .......... 84%  218M 0s
  2500K .......... .......... .......... .......... .......... 85%  261M 0s
  2550K .......... .......... .......... .......... .......... 87% 36,1M 0s
  2600K .......... .......... .......... .......... .......... 89%  241M 0s
  2650K .......... .......... .......... .......... .......... 91%  204M 0s
  2700K .......... .......... .......... .......... .......... 92%  258M 0s
  2750K .......... .......... .......... .......... .......... 94%  219M 0s
  2800K .......... .......... .......... .......... .......... 96%  189M 0s
  2850K .......... .......... .......... .......... .......... 97%  322M 0s
  2900K .......... .......... .......... .......... .......... 99%  160M 0s
  2950K .......... ......                                     100%  215M=0,08s

2025-08-02 19:23:53 (37,4 MB/s) - ‘/home/kubu//home/kubu/packages/mfcj4510dwlpr-3.0.1-1.i386.deb’ saved [3038108/3038108]

 - Paquet trouvé : mfcj4510dwcupswrapper-3.0.1-1.i386.deb

# Téléchargement du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb
--2025-08-02 19:23:53--  http://www.brother.com/pub/bsc/linux/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb
Resolving www.brother.com (www.brother.com)... 104.85.53.149
Connecting to www.brother.com (www.brother.com)|104.85.53.149|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://download.brother.com/pub/com/linux/linux/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb [following]
--2025-08-02 19:23:53--  https://download.brother.com/pub/com/linux/linux/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb
Resolving download.brother.com (download.brother.com)... 23.217.245.108
Connecting to download.brother.com (download.brother.com)|23.217.245.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15474 (15K) [text/plain]
Saving to: ‘/home/kubu//home/kubu/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb’

     0K .......... .....                                      100% 98,8M=0s

2025-08-02 19:23:53 (98,8 MB/s) - ‘/home/kubu//home/kubu/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb’ saved [15474/15474]

 - Paquet trouvé : brscan4-0.4.11-1.amd64.deb

# Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb
--2025-08-02 19:23:53--  http://www.brother.com/pub/bsc/linux/packages/brscan4-0.4.11-1.amd64.deb
Resolving www.brother.com (www.brother.com)... 104.85.53.149
Connecting to www.brother.com (www.brother.com)|104.85.53.149|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://download.brother.com/pub/com/linux/linux/packages/brscan4-0.4.11-1.amd64.deb [following]
--2025-08-02 19:23:53--  https://download.brother.com/pub/com/linux/linux/packages/brscan4-0.4.11-1.amd64.deb
Resolving download.brother.com (download.brother.com)... 23.217.245.108
Connecting to download.brother.com (download.brother.com)|23.217.245.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 111246 (109K) [text/plain]
Saving to: ‘/home/kubu//home/kubu/packages/brscan4-0.4.11-1.amd64.deb’

     0K .......... .......... .......... .......... .......... 46% 3,35M 0s
    50K .......... .......... .......... .......... .......... 92% 4,36M 0s
   100K ........                                              100% 16,1T=0,03s

2025-08-02 19:23:53 (4,12 MB/s) - ‘/home/kubu//home/kubu/packages/brscan4-0.4.11-1.amd64.deb’ saved [111246/111246]

 - Paquet trouvé : brscan-skey-0.3.2-0.amd64.deb

# Téléchargement du paquet : brscan-skey-0.3.2-0.amd64.deb
--2025-08-02 19:23:54--  http://www.brother.com/pub/bsc/linux/packages/brscan-skey-0.3.2-0.amd64.deb
Resolving www.brother.com (www.brother.com)... 104.85.53.149
Connecting to www.brother.com (www.brother.com)|104.85.53.149|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://download.brother.com/pub/com/linux/linux/packages/brscan-skey-0.3.2-0.amd64.deb [following]
--2025-08-02 19:23:54--  https://download.brother.com/pub/com/linux/linux/packages/brscan-skey-0.3.2-0.amd64.deb
Resolving download.brother.com (download.brother.com)... 23.217.245.108
Connecting to download.brother.com (download.brother.com)|23.217.245.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 73934 (72K) [text/plain]
Saving to: ‘/home/kubu//home/kubu/packages/brscan-skey-0.3.2-0.amd64.deb’

     0K .......... .......... .......... .......... .......... 69% 3,43M 0s
    50K .......... .......... ..                              100% 3,40M=0,02s

2025-08-02 19:23:54 (3,42 MB/s) - ‘/home/kubu//home/kubu/packages/brscan-skey-0.3.2-0.amd64.deb’ saved [73934/73934]

# Vérification des pré-requis
 - Paquet 'multiarch-support' non installé
E: Impossible de trouver le paquet multiarch-support
 - Paquet 'lib32stdc++6' deja installé
 - Paquet 'cups' deja installé
 - Paquet 'sane-utils' deja installé
 - Paquet 'libusb-0.1-4' deja installé

# Installation du paquet par 'dpkg' du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb
Sélection du paquet mfcj4510dwlpr:i386 précédemment désélectionné.
(Lecture de la base de données... 320332 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../mfcj4510dwlpr-3.0.1-1.i386.deb ...
Dépaquetage de mfcj4510dwlpr:i386 (3.0.1-1) ...
Paramétrage de mfcj4510dwlpr:i386 (3.0.1-1) ...

# Installation du paquet par 'dpkg' du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb
Sélection du paquet mfcj4510dwcupswrapper:i386 précédemment désélectionné.
(Lecture de la base de données... 320357 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../mfcj4510dwcupswrapper-3.0.1-1.i386.deb ...
Dépaquetage de mfcj4510dwcupswrapper:i386 (3.0.1-1) ...
Paramétrage de mfcj4510dwcupswrapper:i386 (3.0.1-1) ...
Restarting cups (via systemctl): cups.service.
lpadmin -p MFCJ4510DW -E -v usb://Brother/MFC-J4510DW?serial=BROD4F340436 -P /usr/share/cups/model/Brother/brother_mfcj4510dw_printer_en.ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.

# Installation du paquet par 'dpkg' du paquet : brscan4-0.4.11-1.amd64.deb
(Lecture de la base de données... 320361 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../brscan4-0.4.11-1.amd64.deb ...
Dépaquetage de brscan4 (0.4.11-1) sur (0.4.11-1) ...
Paramétrage de brscan4 (0.4.11-1) ...
This software is based in part on the work of the Independent JPEG Group.

# Installation du paquet par 'dpkg' du paquet : brscan-skey-0.3.2-0.amd64.deb
Sélection du paquet brscan-skey précédemment désélectionné.
(Lecture de la base de données... 320361 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../brscan-skey-0.3.2-0.amd64.deb ...
Dépaquetage de brscan-skey (0.3.2-0) ...
dpkg: brscan-skey : problèmes de dépendances, mais configuration comme demandé :
 brscan-skey dépend de libsane (>= 1.0.11-3); cependant :
  Le paquet libsane n'est pas installé.

Paramétrage de brscan-skey (0.3.2-0) ...

# Installation du paquet par 'dpkg' du paquet : brother-udev-rule-type1-1.0.2-0.all.deb
Sélection du paquet brother-udev-rule-type1 précédemment désélectionné.
(Lecture de la base de données... 320381 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../brother-udev-rule-type1-1.0.2-0.all.deb ...
Dépaquetage de brother-udev-rule-type1 (1.0.2) ...
Paramétrage de brother-udev-rule-type1 (1.0.2) ...

# Recherche d'un fichier PPD
 - Fichier PPD : 

# Ajout de l'imprimante MFC-J4510DW
 - Backup du fichier /etc/cups/printers.conf.O
 - Arret du service CUPS
 - Restauration du fichier printers.conf
 - Redémarrage du service CUPS
 - Restauration du fichier printers.conf.O

# Configuration du scanner
Adding ATTRS{idVendor}=="04f9", ENV{libsane_matched}="yes" to /lib/udev/rules.d/60-libsane1.rules

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

#15 Hier à 22:37

Watael

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

concernant la validation de l'adresse IP, la commande du script ne vérifie rien.

je verrai plutôt un avertissement pour que l'utilisateur vérifie que l'imprimante est allumée, puis, pour valider que l'IP est correcte, une commande netcat...
?

à part ça :

  • function et (), c'est redondant.

  • Dir="$PWD/${0%/*}"

    mais j'ai un gros doute, parce que $(pwd) peut être n'importe quel répertoire (ça dépend où "je suis"), et, chez moi, $0 sera sous $HOME/bin/.

  • mv "$Logfile" "$(date +"$LogFile.%F_%T")"

    je préfère avoir un log par exécution d'un script, plutôt que d'écraser le précédent.

  • Model_Name=${Model_Name^^}

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


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

Hors ligne

#16 Hier à 22:51

iznobe

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

nouveau code :

#!/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="$Dir/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
Logfile="/home/$User/brprinter-installer.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 #
#########################
function 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=${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"

	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
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
function do_download_drivers() {
	# On crée le dossier de téléchargement des paquets
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi

	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	# On transforme le nom de l'imprimante
	log_action_begin_msg "Recherche des pilotes"
	Printer_Name=$(echo "$Model_Name" | sed -e 's/-//' | tr 'a-z' 'A-Z')
	# 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 #
###############################
function 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 #
############################
function 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 #
#################################
function 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
		Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
	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 #
############################
function 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 #
#################
function 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 (Hier à 22:57)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#17 Hier à 22:57

iznobe

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

Watael a écrit :

à part ça :

    function et (), c'est redondant.

pas tout compris ...

eric63 a écrit :

un fichier de log existe si on utilise le script de demonipuch et il contient beaucoup d’informations utiles à comparer avec ton script si ça peut être utile

j ' ai lu le script , mais merci .
d' ailleurs , il y a trop de chose superflu , j' en ai enlevé dans le log .

eric63 a écrit :

faudrait voir aussi avec le cas pour les paquets en 32bits et le comportement de la libusbb-0.1-4:i386 si elle est correctement prise en compte

faut que je me penche sur la question , mais c' est quasiment inutile maintenant , les bibliotheques en 32 bit sont amenées à disparaitre , et c' est en partie justement a cause de ca que le script est à revoir avec des noms de paquets differents et le multiarch-support qui a disparu pour les versions 24.04 et superieures ... bref , a creuser .


eric63 a écrit :
mkdir: cannot create directory ‘/home/kubu//home/kubu/packages’: No such file or directory

j ' avais deja remarqué cette erreur . il faut corriger cela .
Selon moi , le probleme est dans cette partie de code :

Dir="$(pwd)/$(dirname "$0")"

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


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#18 Hier à 23:11

Watael

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

c'est function OU(xor) (); les deux, ensembles, c'est un de trop.


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

Hors ligne

#19 Hier à 23:30

eric63

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

marche plus avec le nouveau script

kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
[sudo] password for kubu: 
Entrez votre modèle d' imprimante : mfc j4510dw
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : MFC-J4510dw 
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : Mfc-j4510dw
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : MFC-J4510DW        
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ sudo /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : MFC-j4510dw
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ /home/kubu/script_iznobe.sh 
 Vous devez lancer ce script en tant que root : sudo bash /home/kubu/script_iznobe.sh 
kubu@kubu-System-Product-Name:~$ sudo bash /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : MFC-j4510DW
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                         [fail] 
 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. 
kubu@kubu-System-Product-Name:~$ 

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

#20 Hier à 23:31

iznobe

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

un de trop , je dirais superflu peut être , mais pas de trop vu que shellcheck ne dis rien à ce sujet , et que le script fonctionne de la sorte depuis bientot 9 ans ...

bref , j ' ai " simplifié " et apporté quelques modifications mineures :

#!/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 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
		Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
	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 (Hier à 23:53)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#21 Hier à 23:41

eric63

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

ok cette 3ème mouture est mieux, je trouve dommage que  la fin se termine sans savoir ce qui se passe pour le scanner

kubu@kubu-System-Product-Name:~$ sudo bash /home/kubu/script_iznobe.sh 
Entrez votre modèle d' imprimante : mfc-j4510dw
 Téléchargement des pilotes de l'imprimante 
 * Recherche des pilotes...                                                                                                                 * Téléchargement du paquet : brother-udev-rule-type1-1.0.2-0.all.deb...                                                            [ OK ] 
                                                                                                                                    [ OK ]
 * Téléchargement du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb...                                                                     [ OK ] 
                                                                                                                                    [ OK ]
 * Téléchargement du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb...                                                             [ OK ] 
                                                                                                                                    [ OK ]
 * Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb...                                                                         [ OK ] 
                                                                                                                                    [ OK ]
 * Téléchargement du paquet : brscan-skey-0.3.2-0.amd64.deb...                                                                      [ OK ] 
 Vérification des pré-requis 
 * Mise à jour de la liste des paquets...                                                                                           [ OK ] 
 * Recherche du paquet 'multiarch-support' sur votre système...                                                                     [fail] 
                                                                                                                                    [fail]
 * Recherche du paquet 'lib32stdc++6' sur votre système...                                                                          [ OK ] 
 * Recherche du paquet 'cups' sur votre système...                                                                                  [ OK ] 
 * Recherche du paquet 'sane-utils' sur votre système...                                                                            [ OK ] 
 * Recherche du paquet 'libusb-0.1-4' sur votre système...                                                                          [ OK ] 
 * Recherche du dossier '/usr/share/cups/model' sur votre système...                                                                        * Le dossier '/usr/share/cups/model' existe deja...                                                                                [ OK ] 
 * Recherche du dossier '/var/spool/lpd' sur votre système...                                                                               * Le dossier '/var/spool/lpd' existe deja...                                                                                       [ OK ] 
 Installation des pilotes 
 * Installation du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb...                                                                       [ OK ] 
 * Installation du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb...                                                               [ OK ] 
 * Installation du paquet : brscan4-0.4.11-1.amd64.deb...                                                                                                                                                                            [ OK ] 
 * Installation du paquet : brscan-skey-0.3.2-0.amd64.deb...                                                                                                                                                                         [ OK ] 
 * Installation du paquet : brother-udev-rule-type1-1.0.2-0.all.deb...                                                                                                                                                               [ OK ] 
 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 320: MFCJ4510DW: command not found
                                                                                                                                                                                                                                     [ OK ]
 * Ajout de l'imprimante  MFC-J4510DW...                                                                                                                                                                                                    lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpadmin: Unable to open PPD "": Impossible d'ouvrir le fichier PPD on line 0.
                                                                                                                                                                                                                                     [fail]
 Configuration du scanner 
 * Copie des bibliotheques nécessaires...                                                                                                                                                                                            [ OK ] 
kubu@kubu-System-Product-Name:~$ 
 

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

#22 Hier à 23:43

Watael

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

ce n'est pas une erreur de syntaxe, c'est sans doute pour ça que shellcheck reste muet.
un pléonasme n'est pas non plus une erreur de syntaxe, et si ce n'est pas une erreur, quand ce n'est pas intentionnel, ça reste une maladresse.

Dernière modification par Watael (Hier à 23:44)


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

Hors ligne

#23 Hier à 23:57

eric63

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

Quand même un petit problème je n’ai plus le choix entre usb ou réseau


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

#24 Aujourd'hui à 00:01

iznobe

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

eric63 a écrit :

je trouve dommage que  la fin se termine sans savoir ce qui se passe pour le scanner

et bien si , il le dit :

Configuration du scanner 
 * Copie des bibliotheques nécessaires...   

en fait il n' y a pas le detail , mais c' est lié a sane . les bibliothèques , souvent , ca reste de la creation de lien vers le dossier lib qui contient celles-ci justement .
il n' y a rien de special a dire à ce propos .

++++++++++++++++++++++++++++++++++++++++

j ' ai mis direct la date pour le fichier log .

++++++++++++++++++++++++++++++++++++++++++++++++

je ne comprends pas ce qu ' a voulu faire demonipuch avec cette portion de code :

echo &>> "$Logfile"

shellcheck me dit :

Line 296:
                        echo &>> "$Logfile"
                        ^-- SC2129 (style): Consider using { cmd1; cmd2; } >> file instead of individual redirects.

alors je suis pas certain , mais ls semble que ce soit purement de la cosmétique dans le fichier de log , histoire de sauter une ligne  ...

+++++++++++++++++++++++++++++++++++++++++++++++

en attendant , avec les dernieres petites modifs :

#!/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
		Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
	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 (Aujourd'hui à 00:19)


retour COMPLET et utilisable de commande  |  script montage partitions

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

Hors ligne

#25 Aujourd'hui à 00:16

eric63

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

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 

mise à jour provoque problème sur 25.04

<html>La résolution de dépendances a échoué:<br/><br/>The following packages have unmet dependencies:
  brscan-skey: Dépend: libsane (&gt;= 1.0.11-3) but it is not installable
</html>

Dernière modification par eric63 (Aujourd'hui à 00:31)


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