#151 Le 11/08/2025, à 15:59
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
cf. #150
mais je vois pas l ' interet de creer un tableau , surtout qu ' on ne peut a priori utiliser qu ' un seul fichier ppd ( enfin je pense , pas verifié ).
c'est la question que je pose dans le script : que faire s'il y a plus d'un .ppd ?
Dernière modification par Watael (Le 11/08/2025, à 16:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#152 Le 11/08/2025, à 16:07
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
si la première URL fonctionne, il n'y a pas besoin de (il ne faut pas) faire un second tour.
exact , mais dans ce cas , ne faut il pas plutot " continue " que " break " pour ne pas sortir de la boucle et faire la verif pour le paquet suivant ?
-------------------------------------------------
cela fait quoi ? un double test ?
if test "$arch" = "x86_64" -a -d "$libDir"
test 1 -a 2 == test 1 && test 2
-------------------------------------------------
faudrait que je teste le script , mais ca ne sera pas avant ce soir ...
Dernière modification par iznobe (Le 11/08/2025, à 16:09)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#153 Le 11/08/2025, à 16:29
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
continue comme son nom l'indique reprend la boucle, on ne sort pas de la boucle, on interrompt seulement sa poursuite pour reprendre au début avec l'argument suivant.
break fait sortir de la boucle définitivement; c'est ce qu'on veut : ne pas reprendre la boucle.
cela fait quoi ? un double test ?
oui,
test condition1 && test codition2
mais avec une seule commande test
EXPR1 -a EXPR2 Vrai si les deux expressions sont vraies.
test "$arch" = "x86_64" -a -d "$libDir"
TEST [ EXPR1 ] -a [ EXPR2 ]
il existe un OU : -o
Dernière modification par Watael (Le 11/08/2025, à 16:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#154 Le 11/08/2025, à 16:45
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
cf. #150
mais je vois pas l ' interet de creer un tableau , surtout qu ' on ne peut a priori utiliser qu ' un seul fichier ppd ( enfin je pense , pas verifié ).
c'est la question que je pose dans le script : que faire s'il y a plus d'un .ppd ?
c' est deja un 2eme choix la trouvaille d ' un .ppd dans ce dossier . theoriquement , le .ppd est fourni avec le pilote maintenant si j' ai bien compris .
c ' est d' ailleurs ce que faisait le code de base de demonipuch ( la commande " dpk --contents " que tu as deja modifiée .
c ' est pour cela , que je n ' ai pas trouvé l' interet de me casser la tete avec un tableau de fichiers .ppd
un seul me suffit , cellui que le script trouvera fera parfaitement l' affaire
Et à mon avis , dans le cas ou il y en aurais plusieurs , il y a de grandes chances que leur contenu soit de toute maniere identique ...
Apres , si tu veux vraiment etre parfait , je dirais qu ' il faudrait installer le fichier .ppd avec le plus de " poids " , vu qu ' il contiendra probablement plus de fonctions .
ha ben oui , j ' ai pas collé la 1ere ligne la boucle de " base " , au #149 ...
on interrompt seulement sa poursuite pour reprendre au début avec l'argument suivant.
si il y en a.
donc le break , interrompt la boucle imbriquée seulement . ok , je comprends mieux là . un continue " saute " le else , comme il n' y a que 2 arguments , ca interromp la boucle , ce qui revient au meme finalement dans ce cas .
Quand a :
Pourquoi brother ne fournit pas les bonnes infos
au sujet du paquet brscankey , aucune idée , ce que je sais , c' est que la version xxx.4 à la place de xxx.2 sur 24.04 , ca fonctionne .
et je suppose qu il en est de meme avec les versions suivantes d' ubuntu . on a pu verifier ça pour 25.04 deja .
Dernière modification par iznobe (Le 11/08/2025, à 17:10)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#155 Le 11/08/2025, à 17:53
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
ça ne revient pas au même.
si on a l'info dès le premier tour, alors on n'exécute pas le second tour, qui pourrait écraser l'info obtenue précédemment.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#156 Le 11/08/2025, à 19:07
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
1er essai , retour :
sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW 192.168.1.2
[sudo] Mot de passe de iznobe :
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]:
puis :
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-11 19:09:13-- https://download.brother.com/pub/com/linux/linux/packages//MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:09:16 erreur 404 : Not Found.
/MFCL2710DW: Schéma manquant.
--2025-08-11 19:09:16-- https://download.brother.com/pub/com/linux/linux/packages//no
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:09:17 erreur 404 : Not Found.
/no: Schéma manquant.
dpkg: erreur: ne peut pas accéder à l'archive « /tmp/packages/MFCL2710DW »: Aucun fichier ou dossier de ce nom
lpadmin: Unable to connect to server: Mauvais descripteur de fichier
Invalid IP address or NODENAME
iznobe@iznobe-pc:~$
correction 1 ? :
#check IP
IP="$2"
until test -n "$IP"
do
#read -p 'vous voulez configurer votre imprimante pour qu'\''elle fonctionne en réseau ? [y/N]: '
#[[ $REPLY == [YyOo] ]] || break
if test -n "$IP"
then
#IP=$2
shift $#
else
read -p "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] read -rp "Entrez l'adresse IP de votre imprimante : " IP || break
fi
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
if ((err)) && ! ping -c2 "$IP"
then
err=0
unset IP
fi
done
correction 2 , pas de slash aux fins d ' urls :
#################
# infos Brother
#################
Url_Info="http://www.brother.com/pub/bsc/linux/infs"
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
printerInf="$Url_Info/$printerName"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$printerName""_us_eu_as"
Le controle de l' IP ne fonctionne pas :
iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW 1111111111
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-11 19:36:19-- https://download.brother.com/pub/com/linux/linux/packages/MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-11 19:36:20 erreur 404 : Not Found.
heu , je vais pas aller plus loin
je vais pas tout redebugger alors que le script actuel fonctionne au poil .
il reste " juste " la regle UDEV à gerer et c' est fini .
Pour le fun , la correction du check IP:
#check IP
until test -n "$IP"
do
test -n "$2" && IP="$2" || read -p "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
if ((err))
then
err=0
unset IP
fi
if ! ping -qc2 "$IP";then read -rp "Entrez l'adresse IP de votre imprimante : " IP;fi
done
Dernière modification par iznobe (Le 11/08/2025, à 20:22)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#157 Le 11/08/2025, à 20:44
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
le script actuel fonctionne au poil .
soit, mais il est mal conçu. C'est surtout ça que veut montrer ma version sans fonctions superflues*.
--
* je suis surpris qu'il n'y ait pas une fonction main() pour exécuter toutes les autres fonctions.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#158 Le 11/08/2025, à 23:49
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
soit, mais il est mal conçu.
je suis plutot d' accord , mais je peux pas passer plusieurs semaines sur mon temps libre a debug des scripts .
Surtout le tien pour lequel , je n' ai pas un niveau suffisant .
je ne maitrise qu ' une infime partie du bash , et il y a enormément de subtilité et de choses que je ne connais pas . trop
* je suis surpris qu'il n'y ait pas une fonction main() pour exécuter toutes les autres fonctions.
![]()
![]()
pour le fun :
#!/bin/bash
# Script d'installation pour imprimantes Brother
# ecrit par @demonipuch .
# re-ecrit par ubuntu team : https://forum.ubuntu-fr.org/viewtopic.php?id=2091835&p=2
# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...
if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
shopt -s nullglob globstar extglob
valid_ip() {
IFS='.' read -ra ip <<< "$1"
[[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}
control_ip() {
if [[ -n "$IP" ]]; then
if valid_ip "$IP"; then
if ping -q -c2 "$IP"; then log_action_end_msg 0
else
log "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
unset IP
log_action_end_msg 1
fi
else
log "L ' adresse IP que vous avez entrée est incorrecte"
unset IP
log_action_end_msg 1
fi
fi
}
install_pkg() {
for pkg do
log "Recherche du paquet : ' $pkg ' sur votre système"
if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
log_action_end_msg 0
else
echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
log_action_end_msg 1
log "Installation du paquet : ' $pkg ' sur votre système"
apt-get install -qq "$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_rep() {
for dir do
log "Recherche du dossier ' $dir ' sur votre système"
if [[ -d "$dir" ]]; then log_action_end_msg 0;
else
log_action_end_msg 1
log "Creation du dossier ' $dir '"
mkdir -pv "$dir" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_lien() { # utilisation : # verif_lien "lien" "cible" . affichage de ls -l ' lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible '
# Musique -> /datas/iznobe/Musique
# lien -> cible
lien=$1
cible=$2
log "Recherche du lien ' $lien ' sur votre système"
if ! test -L "$lien"; then
log_action_end_msg 1
log "Creation du lien ' $lien '"
ln -s "$cible" "$lien" &>> "$Logfile"
log_action_end_msg $?
else log_action_end_msg $?;
fi
}
log() {
message="$1"
if test -z "$2"; then
log_action_begin_msg "$message"
echo -e " - $message" &>> "$Logfile"
else
if test "$2" == "Blue"; then color="\\033[1;34m";fi
if test "$2" == "Red"; then color="\\033[1;31m";fi
echo -e "$color $message \\033[0;0m" # Resetcolor
echo -e "
# $message" &>> "$Logfile"
fi
}
############################
# définitions de variables
############################
Model_Name="$1"
if [ -n "$2" ]; then
IP="$2"
if control_ip "$IP"; then Connection="Réseau"; fi
fi
User="$SUDO_USER"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Temp_Dir="/tmp/packages"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Logfile="/home/$User/brprinter_install.log"
#Logfile="/home/$User/brprinter_install.$date.log"
declare -A printer
#################
# infos Brother
#################
# ancienne adresse d' obtention des infos :
#Url_Info="http://www.brother.com/pub/bsc/linux/infs"
# nouvelle adresse :
Url_Info="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d' obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
# On vérifie qu'on lance le script en root
if ((EUID)); then log "Vous devez lancer ce script en tant que root : sudo bash $0" "Red"; exit 1;fi
if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then # && [[ $Arch != "armv7l" ]]
log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
exit 2
fi
# on verifie la connection au serveur
if ! nc -z -w5 'brother.com' 80; then
log "serveur brother injoignable ! script interrompu." "Red"
log "Veuillez verifier votre connexion internet." "Red"
exit 3
fi
# Si le premier argument est vide on demande le modèle de l'imprimante
while [[ -z "$Model_Name" ]]; do read -rp "Entrez votre modèle d' imprimante : " Model_Name;done
Model_Name=${Model_Name^^}
# Si le 2eme argument est vide on demande comment est connectée l'imprimante
while [[ -z "$Connection" ]]; do
read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
case $REPLY in
0)
Connection="USB"
;;
1)
Connection="Réseau"
log "Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe." "Red"
log "Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml" "Red"
;;
esac
done
# Si connection == reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# On transforme le nom de l'imprimante ( enleve le " - " )
Printer_Name="${Model_Name//-/}"
# On construit l'URL du fichier contenant les informations
Printer_Url_Info="$Url_Info/$Printer_Name"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$Printer_Name""_us_eu_as"
# resumé pour logfile
log " $date
# Ubuntu Codename : $Codename
# Architecture : $Arch
# Modèle de l'imprimante : $Model_Name
# Type de connexion : $Connection
# Adresse IP : $IP
# Repertoire courant : $Temp_Dir
# Repertoire de telechargement des pilotes : $Temp_Dir
# Fichier d'informations : $Printer_Url_Info
# page de telechargement des pilotes : $Printer_dl_url" "Blue"
log "initialisation du script." "Blue"
# on cree le repertoire temporaire de travail.
verif_rep "$Temp_Dir"
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
wget -q "$Printer_Url_Info" -O "$Printer_Info"
#while IFS='=' read -r k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')
log_action_end_msg $?
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
#if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : $Printer_dl_url
afin de télécharger les pilotes et les installer manuellement." "Red"
exit 2
fi
# ???????? pas compris a quoi sert ce controle , ni quelles infos il est censé recuperé . peut etre certaines URL comporte des liens vers d' autres pages
#if test -n "${printer[LNK]}"; then Printer_Url_Info="$Url_Info/${printer[LNK]}";log "LNK = ${printer[LNK]}" "Red";fi
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
}
###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
log "Vérification des pré-requis" "Blue"
log "Mise à jour de la liste des paquets"
apt-get update -qq
log_action_end_msg $?
# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
log "installation des paquets requis"
if ! install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "gawk"; then
log "impossible d' installer les paquets indispensables" "Red"
exit 4
fi
# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
if [[ -n $Scanner_Deb ]]; then install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"; fi
# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
if [[ "$Model_Name" == "$i" ]]; then install_pkg "csh"; fi
done
# On vérifie que le dossier de téléchargement temporaire et /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
verif_rep "/usr/share/cups/model" "/var/spool/lpd"
# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
if [[ "$Model_Name" == "$i" ]]; then verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"; # verif_lien "lien" "cible" 'lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible'
# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
if [[ -L /sbin/init ]]; then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service" # ' lien : /lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service: cible'
systemd daemon-reload
fi
fi
done
echo "" &>> "$Logfile"
}
##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
log "Recherche des pilotes" "Blue"
log "Recherche des pilotes pour l' imprimante"
printer=(
[prn_lpd]="$(grep PRN_LPD_DEB "$Printer_Info" | cut -d= -f2)"
[prn_cups]="$(grep PRN_CUP_DEB "$Printer_Info" | cut -d= -f2)"
[prn_drv]="$(grep PRN_DRV_DEB "$Printer_Info" | cut -d= -f2)"
)
log_action_end_msg $?
Scanner_Deb=$(grep SCANNER_DRV "$Printer_Info" | cut -d= -f2)
if test -n "$Scanner_Deb"; then
printer+=(
[udev_rules]="$Udev_Deb_Name"
)
log "Recherche des pilotes pour le scanner"
Scankey_Deb=$(grep SCANKEY_DRV "$Printer_Info" | cut -d= -f2)
Scanner_Url_Info="$Url_Info/$Scanner_Deb.lnk"
Scankey_Url_Info="$Url_Info/$Scankey_Deb.lnk"
echo " - Scanner infos :
$Scanner_Url_Info
$Scankey_Url_Info" &>> "$Logfile"
Scanner_Info="$Temp_Dir/Scanner_Url_Info.html"
wget -q "$Scanner_Url_Info" -O "$Scanner_Info"
Scankey_Info="$Temp_Dir/Scankey_Url_Info.html"
wget -q "$Scankey_Url_Info" -O "$Scankey_Info"
# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
case "$Arch" in
i386|i686)
printer+=(
[scanner_drv]="$(grep DEB32 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB32 "$Scankey_Info" | cut -d= -f2)"
)
log_action_end_msg 0
;;
x86_64)
printer+=(
[scanner_drv]="$(grep DEB64 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB64 "$Scankey_Info" | cut -d= -f2)"
)
# pour ubuntu 24.04 et superieurs
if [[ $(grep DISTRIB_RELEASE= /etc/lsb*release | cut -d= -f2 | cut -c1-2) -ge 24 ]]; then
if test "${printer[scanKey_drv]}" = "brscan-skey-0.3.2-0.amd64.deb"; then printer[scanKey_drv]="$Scankey_Drv_Deb_Name";fi
fi
log_action_end_msg 0
;;
*)
log "Architecture inconnue: $Arch" "Red"
;;
esac
else
log "Pas de scanner détecté" "Red"
log_action_end_msg 1
fi
log "Téléchargement des pilotes" "Blue"
for pkg in "${printer[@]}"; do
# On ajoute la liste des pilotes trouvés au fichier de journalisation
if test -n "$pkg"; then
echo " - Paquet trouvé : $pkg" &>> "$Logfile"
# On télécharge les pilotes trouvés si ils ne le sont pas deja
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb="$Url_Pkg"/"$pkg"
# le paquet 'udev-rules' est situé a un autre emplacement
if test "$pkg" == "${printer[udev_rules]}"; then Url_Deb="$Udev_Deb_Url"/"$pkg"; fi
log "Téléchargement du paquet : $pkg"
wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb2="$Url_Pkg2"/"$pkg"
wget -cP "$Temp_Dir" "$Url_Deb2" &>> "$Logfile"
fi
log_action_end_msg $?
else
log "Le paquet : $pkg a deja été telechargé"
log_action_end_msg 0
fi
fi
done
}
############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
log "Installation des pilotes" "Blue"
for pkg in "${printer[@]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
log "Installation du paquet : $pkg"
dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
echo "" &>> "$Logfile"
}
#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
log "Configuration de l'imprimante" "Blue"
log "Recherche d'un fichier PPD sur votre système"
for pkg in "${printer[prn_cups]}" "${printer[prn_drv]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | gawk '/ppd/{sub(".","",$NF); print $NF}')
fi
done
if test -z "$Ppd_File"; then
for file in /usr/share/cups/model/**/brother*@($Model_Name|$Printer_Name)*.ppd; do Ppd_File="$file";done
fi
if test -n "$Ppd_File"; then
log_action_end_msg 0
echo " - Fichier PPD : ' $Ppd_File ' trouvé" &>> "$Logfile"
else
echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
log_action_end_msg 1
fi
# On ajoute la nouvelle imprimante
log "Ajout de l'imprimante $Model_Name"
{
echo " - Backup du fichier /etc/cups/printers.conf.O"
cp /etc/cups/printers.conf.O "$Temp_Dir"
echo " - Arret du service CUPS"
echo " - Restauration du fichier printers.conf"
systemctl stop cups
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf
echo " - Redémarrage du service CUPS"
systemctl restart cups
sleep 1
} &>> "$Logfile"
case "$Connection" in
"USB")
lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File" &>> "$Logfile"
;;
"Réseau")
lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File" &>> "$Logfile"
;;
esac
log_action_end_msg $?
{
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf.O
echo " - Restauration du fichier printers.conf.O"
echo ""
} &>> "$Logfile"
}
############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
log "Configuration du scanner" "Blue"
if [[ -n "$Scanner_Deb" ]]; then
if [[ $Connection == "USB" ]]; then
log "Configuration du scanner USB"
# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
log_action_end_msg $?
echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"
else
# ?????????? n ' ajoute pas la regle correctement .
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
log_action_end_msg $?
echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
# On recharge les règles udev
# udevadm control --reload
udevadm control --reload-rules
fi
elif [[ $Connection == "Réseau" ]]; then
log "Configuration du scanner réseau"
if [[ -x /usr/bin/brsaneconfig ]]; then
brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig2 ]]; then
brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig3 ]]; then
brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig4 ]]; then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig5 ]]; then
# ??????????????
brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
fi
fi
# On copie les bibliotheques
if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
if [[ -e /usr/bin/brsaneconfig ]]; then cd "$Lib_Dir" || exit;
log "Copie des bibliotheques nécessaires brsaneconfig"
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$Lib_Dir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig2 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig2"
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig3 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig3"
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig4 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig4"
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig5 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig5"
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
log_action_end_msg 0
else
log_action_end_msg 1
log "No config binary found." "Red"
fi
fi
fi
echo "" &>> "$Logfile"
}
#################
# FIN DU SCRIPT #
#################
do_clean() {
cd || exit
# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
chown -R "$User": "$Temp_Dir" "$Logfile"
log "Configuration de votre imprimante Brother $Model_Name terminée. Bye :D" "Blue"
log "Vous pouvez supprimer le dossier $Temp_Dir avec la commande suivante : rm -r $Temp_Dir" "Blue"
exit 0
}
main () {
do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean
}
main
Dernière modification par iznobe (Le 11/08/2025, à 23:53)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#159 Hier à 00:12
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ton code pour valider une IP ne fonctionne pas :
ce code :
#check IP
until test -n "$IP"
do
test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
echo "TAB IP == $i"
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
done
if ! ping -qc2 "$IP"
then read -rp "Entrez l'adresse IP de votre imprimante : " IP
unset IP
fi
done
donne :
iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: y
Entrez l'adresse IP de votre imprimante : 11.1
TAB IP == 11
Entrez l'adresse IP de votre imprimante :
j ' en suis à la 8eme ligne de ton code ( sans compter les declarations ) et c ' est dejà la cata pour debugguer
, alors ça , c' est peut etre pas à ton gout , mais au moins ça marche sans soucis :
IFS='.' read -ra ip <<< "$1"
[[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
et si je dois modifier un jour , demain comme dans 10 ans , ca ne sera pas un probleme .
je serais très surpris que ça fonctionne sans correction, mais je ne peux pas le tester en entier.
j' ai plutôt l' impression que tu n' as pas testé du tout ou alors tu t ' es arreté de testé apres les declarations de variables
car desuite apres :
#check IP
rien ne va , il faut reprendre tout le code a chaque ligne .
c' estpas de l' aspirine qu ' il faut , c ' est un semi-remorque plein , vu qu ' il reste encore 329 lignes a debugguer ensuite
Dernière modification par iznobe (Hier à 00:22)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#160 Hier à 01:53
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
vérifier que le tableau ip comporte bien 4 éléments devrait corriger ce problème oubli.
j'ai dit que je ne peux pas tester le script en entier, parce que je n'ai pas d'imprimante compatible, et je ne suis pas sur Ubuntu*.
rien ne va , il faut reprendre tout le code a chaque ligne .
rho, t'éxagère. je savais qu'il y en aurait des problèmes, mais je ne pensais pas qu'il y aurait autant.
ce n'est d'ailleurs pas à toi de débugguer.
est-ce que tu peux quand même m'envoyer la sortie du script, stp. ?
que je vois ce qui merdoie.
#!/bin/bash -x
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
# définitions de variables
# gestion des arguments
# infos Brother
# quelques fonctions
# quelques vérifications
# initialisation du tableau associatif `printer'
# vérification de variables disponibles dans `printer'
# préparation du système
# téléchargement des pilotes
# configuration de l'imprimante
# configuration du scanner
# <
shopt -s extglob nullglob globstar
############################
# définitions de variables
############################
user="$SUDO_USER"
codeName="$(lsb_release -cs)"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
#Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"
declare -A printer
declare -i err
#########################
# gestion des arguments
#########################
declare -u modelName=$1
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}"
#check IP
until test -n "$IP"
do
read -p 'vous voulez configurer votre imprimante pour qu'\''elle fonctionne en réseau ? [y/N]: '
[[ $REPLY == [YyOo] ]] || break
if test -n "$2"
then
IP=$2
shift $#
else
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -c2 "$IP"
then
err=0
unset IP
fi
done
#################
# infos Brother
#################
Url_Info="http://www.brother.com/pub/bsc/linux/infs"
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
printerInf="$Url_Info/$printerName"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as"
######################
# quelques fonctions
######################
errQuit()
{
>&2 echo "$@"
exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
local lien=$1 cible=$2
if ! test -L "$lien"
then
ln -s "$cible" "$lien"
fi
}
install_pkg()
{
for pkg do
if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
then
apt-get install -qq "$pkg"
fi
done
}
##########################
# quelques vérifications
##########################
if [[ $arch != @(i386|i686|x86_64) ]]
then
errQuit "système non compatible."
fi
if ((EUID))
then
errQuit "must be root."
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit "\"brother.com\" n'est pas joignable"
fi
##################################################
# initialisation du tableau associatif `printer'
##################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInf" | sed '/\(]\|rpm\|=\)$/d')
########################################################
# vérification de variables disponibles dans `printer'
########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
errQuit "les données du fichier .inf et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInf="$Url_Info/${printer[LNK]}"
fi
if test -n "${printer[SCANNER_DRV]}"
then
printer[udev_rules]="$Udev_Deb_Name"
. <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
. <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
case $arch in
i[36]86)
printer[SCANNER_DRV]="$scanner_DEB32"
printer[SCANKEY_DRV]="$scanKey_DEB32"
;;
x86_64)
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
. /etc/lsb-release #TODO: test file exists
if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
then
printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb" #mais pourquoi Brother ne donnent-ils pas la bonne info ?
fi
;;
esac
else
errQuit "pas de pilote pour le scanner."
fi
##########################
# préparation du système
##########################
if test -f "$Logfile"
then
mv -v "$Logfile" "$Logfile.$date"
fi
for d in "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
if ! test -d "$d"
then
mkdir -pv "$d"
fi
done
apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
for i in DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
if test "$i" = "$modelName"
then
install_pkg "csh"
fi
done
for i in \
DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
FAX-{2{850,900},3800,4{100,750e},5750e} \
HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
if test "$i" = "$modelName"
then
verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
if test -L /sbin/init
then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
systemd daemon-reload
fi
fi
done
##
##############################
# téléchargement des pilotes
##############################
for drv in "${printer[@]}"
do
for addr in "$Url_Pkg" "$Url2_Pkg"
do
if ! test -f "$tmpDir/$drv"
then
Url_Deb="$addr/$drv"
if test "$drv" = "${printer[udev_rules]}"
then
Url_Deb="$Udev_Deb_Url/$drv"
fi
wget -cP "$tmpDir" "$Url_Deb"
else
break
fi
done
pkg2install+=( "$tmpDir/$drv" )
done
#installation des pilotes
dpkg --install --force-all "${pkg2install[@]}"
##
#################################
# configuration de l'imprimante
#################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in PRN_CUPS PRN_DRV
do
pkg=${printer[$drv]}
if test -n "$pkg" -a -f "$tmpDir/$pkg"
then
while read -d '' fileName
do
PPDs+=( "$fileName" )
done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF}')
fi
done
if test -z "$Ppd_File"
then
PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
0) errQuit "no ppd"
;;
1) : echo one ppd
;;
*) errQuit "more than one ppd" # et s'il y en a plusieurs, y en a-t-il un à privilégier ?
;;
esac
#sauvegarde fichier conf.0 (n'existe pas chez moi)
cp /etc/cups/printers.conf.O "$tmpDir"
systemctl stop cups
if test -n "$IP"
then
lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi
#restauration fichier conf
cp "$tmpDir/printers.conf.O" /etc/cups/printers.conf
systemctl restart cups
sleep 1
############################
# configuration du scanner
############################
if test -z "ÎP"
then #USB
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
then
echo " - Règle udev deja presente dans le fichier $Udev_Rules"
else
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
udevadm control --reload-rules
fi
else #network
for saneConf in /usr/bin/brsaneconfig{,{2..5}}
do
test -x "$saneConf" && cmd=$saneConf
done
if test -z "$cmd"
then
errQuit "no brsaneconfig found."
elif test "$cmd" = '/usr/bin/brsaneconfig4'
then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
fi
$cmd -a name=SCANNER model="$modelName" ip="$IP"
fi
if test "$arch" = "x86_64" -a -d "$libDir"
then
case $cmd in
/usr/bin/brsaneconfig)
cd "$libDir" || exit;
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
;;
/usr/bin/brsaneconfig2)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
;;
/usr/bin/brsaneconfig3)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
;;
/usr/bin/brsaneconfig4)
cd "$libDir"/sane || exit
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
;;
/usr/bin/brsaneconfig5)
cd "$libDir"/sane || exit
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
;;
esac
fi
--
* tu me diras de quoi je me mêle alors
je me mêle du shell; et du shell, il y en a partout.
mais là, j'ai un peu l'impression de jouer au jenga avec un bandeau sur les yeux.
Dernière modification par Watael (Hier à 12:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#161 Hier à 09:49
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
un truc que je ne comprends pas dans ton check IP :
for i in ${ip[@]}
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
la variable " $n " , elle sort d' ou ?
elle n' est pas declarée nulle part ...
dans mes tests , j ' ai fait genre :
for i in ${ip[@]}
do
echo "$n"
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
au 1er tour , n vaut "" . normal vu que pas initialisée / declarée .
puis ensuite , la valeur reste a 1 . des fois les résultats sont pas identiques ...
en gros je sais pas pourquoi , des fois elle passe de "" à " 2 " ...
je m ' attendais plutôt a ce que ce soit :
""
" 1 "
" 2 "
" 3 "
si le tableau fournit 4 champs et donc 4 tours de boucle .
on voit bien que le tableau pour IP n ' est pas rempli correctement dans un message précedent :
Entrez l'adresse IP de votre imprimante : 11.1
TAB IP == 11
le echo devrait donner : TAB IP == 11 1 ( avec le code associé ) si ton check IP fonctionnait .
Sinon , dans le code que tu fournis , je n ' ai toujours pas compris a quoi peut bien servir le shift(#) ...
#check IP
until test -n "$IP"
do
test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || break
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
echo "TAB IP == $i"
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
done
if ! ping -qc2 "$IP"
unset IP
then read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
done
TRADUCTION EN FRANCAIS :
#check IP
tant que $IP n ' est pas remplie :
$2 existe ? si oui , IP =$2 , si non , poser la question à l' utilisateur : "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
si la reponse de l' utilisateur est oui , alors lui demander d ' entrer son IP .
prendre l ' IP et la dispatcher dans un tableau en coupant au niveau des points .
afficher toutes les valeurs du tableau
si n est incrémenté , alors testé si i est >= 0 et i<=255 , si n est pas incrementé , testé si i est > 0 et i<=255 , si ce n' est pas vrai , supprimé le contenu de IP et poser la question à l' utilisateur : "Entrez l'adresse IP de votre imprimante et mettre ce qu ' il a entré dans la variable IP .
ping sur $IP , si pas bon , on demande à l' utilisateur d ' entrer une nouvelle IP
Perso j ' aurais plutot fait un truc dans le genre de :
for i in ${ip[@]}
do
echo "TAB IP == $i"
((n++))
((n>0 ? i >=0 && i<=255 : i>0 && i<=255)) || unset IP; read -rp "Entrez l'adresse IP de votre imprimante : " IP
done
je suis pas sur que " ((n++ ? " soit correctement interpreté ...
meme pas essyaé de faire un test d' ailleurs , je m' y colle tiens , ca va m ' occuper 5 minutes .
Dernière modification par iznobe (Hier à 10:19)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#162 Hier à 10:38
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
bon , et bien si , ca marche :
iznobe@k-pi3:~ $ bash test.sh
TAB IP == 0
BOOOO!
TAB IP == 1
OK
TAB IP == 2
OK
TAB IP == 3
OK
iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash
for i in {0..3}
do
echo "TAB IP == $i"
#((n++))
if ((n++));then echo "OK"; else echo "BOOOO!";fi
done
iznobe@k-pi3:~ $
iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash
for i in {0..3}
do
#echo "Avant : TAB IP == $i , N == $n"
((n++ ? i++ : i--))
echo "Apres : TAB IP == $i , N == $n"
done
iznobe@k-pi3:~ $ bash test.sh
Apres : TAB IP == -1 , N == 1
Apres : TAB IP == 2 , N == 2
Apres : TAB IP == 3 , N == 3
Apres : TAB IP == 4 , N == 4
iznobe@k-pi3:~ $
Dernière modification par iznobe (Hier à 11:02)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#163 Hier à 12:00
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
shift décale les paramètres positionnels
ça sert à "consommer" les paramètres positionnels par la gauche
à chaque fois qu'elle est appelée, la commande fait disparaître $1
alors $2 devient $1, $3 devient $2, etc.
c'est paramétrable : on peut supprimer N paramètres positionnels :
shift 2
fera disparaître les deux premiers paramètres positionnels.
pseudoCode:
Si existe $2
alors IP=$2 et supprimer tous les paramètres positionnels (shift $#)*
autrement read IP
si IP == faux, alors recommencer
finPseudoCode
$2 n'existe plus => read IP
* je pourrais faire un shift après l'assignation de modelName, puis utiliser $1 assigner IP
Dernière modification par Watael (Hier à 12:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#164 Hier à 12:03
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
un check IP qui fonctionne pour de vrai :
iznobe@k-pi3:~ $ cat test.sh
#!/bin/bash
#IP="abcd"
#check IP
echo "check IP"
until test -n "$IP"
do
test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
if test -z "$IP" && [[ $REPLY == [YyOo] ]]
then
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
IFS="." read -ra ip <<< "$IP"
for i in "${ip[@]}"
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255))
echo "$n"
done
if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -c2 "$IP"
then
unset IP
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
echo "GOOD !"
done
iznobe@k-pi3:~ $
ou pas :
iznobe@k-pi3:~ $ bash test.sh 00 192.168.1.
check IP
1
2
3
Entrez l'adresse IP de votre imprimante : 0.1.1.1
GOOD !
iznobe@k-pi3:~ $
Dernière modification par iznobe (Hier à 12:04)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#165 Hier à 12:17
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
je regarde ça en soirée.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#166 Hier à 12:26
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Avec ce code :
#!/bin/bash
declare -i err
#check IP
echo "check IP"
until test -n "$IP"
do
test -n "$2" && IP="$2" || read -rp "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] && read -rp "Entrez l'adresse IP de votre imprimante : " IP || unset IP
IFS="." read -ra ip <<< "$IP"
for i in "${ip[@]}"
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
echo "N==$n , IP==$i"
done
echo "Apres boucle : $IP"
if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -c2 "$IP"
then
unset IP
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
echo "GOOD !"
done
si je tape une IP directement ( en argument au script ), ca marche .
si je tape pas d' argument ca marche .
si je tape une IP incorrecte en argument au script , il me re demande une ip ( normal ) , puis il ne fait plus le reste du code et affiche " GOOD ! " directement ...
ca ne serait pas à cause du type de boucle : " until " ?
Dernière modification par iznobe (Hier à 12:28)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#167 Hier à 12:44
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
le deuxième read n'est pas utile, et le GOOD devrait être en dehors de la boucle.
à ce soir.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#168 Hier à 12:48
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
est-ce que tu peux quand même m'envoyer la sortie du script, stp. ?
que je vois ce qui merdoie.
voilà :
iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
[sudo] Mot de passe de iznobe :
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]:
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
--2025-08-12 12:46:16-- https://download.brother.com/pub/com/linux/linux/packages/MFCL2710DW
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-12 12:46:18 erreur 404 : Not Found.
/MFCL2710DW: Schéma manquant.
--2025-08-12 12:46:18-- https://download.brother.com/pub/com/linux/linux/packages/no
Résolution de download.brother.com (download.brother.com)… 184.31.170.139
Connexion à download.brother.com (download.brother.com)|184.31.170.139|:443… connecté.
requête HTTP transmise, en attente de la réponse… 404 Not Found
2025-08-12 12:46:19 erreur 404 : Not Found.
/no: Schéma manquant.
dpkg: erreur: ne peut pas accéder à l'archive « /tmp/packages/MFCL2710DW »: Aucun fichier ou dossier de ce nom
lpadmin: Unable to connect to server: Mauvais descripteur de fichier
"SCANNER" is already registered.
iznobe@iznobe-pc:~$
il n' a pas demander l' IP
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#169 Hier à 13:53
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
j ' ai commencé a débugué de mon coté , malgré tout .
j ' en suis a la ligne 245 pour info .
voici le code :
#!/bin/bash -x
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
# définitions de variables
# gestion des arguments
# infos Brother
# quelques fonctions
# quelques vérifications
# initialisation du tableau associatif `printer'
# vérification de variables disponibles dans `printer'
# préparation du système
# téléchargement des pilotes
# configuration de l'imprimante
# configuration du scanner
# <
shopt -s extglob nullglob globstar
############################
# définitions de variables
############################
user="$SUDO_USER"
codeName="$(lsb_release -cs)"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
#Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"
declare -A printer
declare -i err
#########################
# gestion des arguments
#########################
declare -u modelName=$1
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}"
#check IP
until test -n "$IP"
do
read -p "vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]: "
[[ $REPLY == [YyOo] ]] || break
if test -n "$2"
then
IP=$2
shift $#
else
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
IFS='.' read -ra ip <<< "$IP"
for i in ${ip[@]}
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
then
err=0
unset IP
fi
done
#################
# infos Brother
#################
# ancienne adresse d' obtention des infos :
#Url_Info="http://www.brother.com/pub/bsc/linux/infs"
# nouvelle adresse :
Url_Info="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
printerInf="$Url_Info/$printerName"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as"
######################
# quelques fonctions
######################
errQuit()
{
>&2 echo "$@"
exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
local lien=$1 cible=$2
if ! test -L "$lien"
then
ln -s "$cible" "$lien"
fi
}
install_pkg()
{
for pkg do
if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
then
apt-get install -qq "$pkg"
fi
done
}
##########################
# quelques vérifications
##########################
if [[ $arch != @(i386|i686|x86_64) ]]
then
errQuit "système non compatible."
fi
if ((EUID))
then
errQuit "must be root."
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit "\"brother.com\" n'est pas joignable"
fi
##################################################
# initialisation du tableau associatif `printer'
##################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInf" | sed '/\(]\|rpm\|=\)$/d')
########################################################
# vérification de variables disponibles dans `printer'
########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
errQuit "les données du fichier .inf et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInf="$Url_Info/${printer[LNK]}"
fi
if test -n "${printer[SCANNER_DRV]}"
then
printer[udev_rules]="$Udev_Deb_Name"
. <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
. <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
case $arch in
i[36]86)
printer[SCANNER_DRV]="$scanner_DEB32"
printer[SCANKEY_DRV]="$scanKey_DEB32"
;;
x86_64)
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
. /etc/lsb-release #TODO: test file exists
if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
then
printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb" #mais pourquoi Brother ne donnent-ils pas la bonne info ?
fi
;;
esac
else
errQuit "pas de pilote pour le scanner."
fi
##########################
# préparation du système
##########################
if test -f "$Logfile"
then
mv -v "$Logfile" "$Logfile.$date"
fi
for d in "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
if ! test -d "$d"
then
mkdir -pv "$d"
fi
done
apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
for i in DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
if test "$i" = "$modelName"
then
install_pkg "csh"
fi
done
for i in \
DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
FAX-{2{850,900},3800,4{100,750e},5750e} \
HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
if test "$i" = "$modelName"
then
verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
if test -L /sbin/init
then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
systemd daemon-reload
fi
fi
done
##
##############################
# téléchargement des pilotes
##############################
echo " DL DRV TAB == ${printer[*]}"
for drv in "${printer[@]}"
do
if test $drv = $printerName; then continue;fi
if test $drv = "no"; then continue;fi
for addr in "$Url_Pkg" "$Url2_Pkg"
do
if ! test -f "$tmpDir/$drv"
then
Url_Deb="$addr/$drv"
if test "$drv" = "${printer[udev_rules]}"
then
Url_Deb="$Udev_Deb_Url/$drv"
fi
wget -cP "$tmpDir" "$Url_Deb"
else
break
fi
done
pkg2install+=( "$tmpDir/$drv" )
done
echo "PKG2INSTALL == ${pkg2install[@]}"
#installation des pilotes
dpkg --install --force-all "${pkg2install[@]}"
##
#################################
# configuration de l'imprimante
#################################
#retrouver le fichier `.ppd' pour l'imprimante
#for drv in PRN_CUPS PRN_DRV
for drv in "PRN_CUP_DEB" "PRN_DRV_DEB"
do
pkg=${printer[$drv]}
echo "pkg == $pkg"
if test -n "$pkg" -a -f "$tmpDir/$pkg"
then
while read -d '' fileName
do
PPDs+=( "$fileName" )
done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF}')
fi
done
echo "PPDs == ${PPDs[*]}"
if test -z "$Ppd_File"
then
PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
0) #errQuit "no ppd"
echo "no ppd"
;;
1) echo one ppd
;;
*) #errQuit "more than one ppd" # et s'il y en a plusieurs, y en a-t-il un à privilégier ?
echo "more than one ppd"
;;
esac
#sauvegarde fichier conf.0 (n'existe pas chez moi)
cp /etc/cups/printers.conf.O "$tmpDir"
systemctl stop cups
cp "$tmpDir/printers.conf.O" /etc/cups/printers.conf
systemctl restart cups
sleep 1
if test -n "$IP"
then
lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi
#restauration fichier conf
############################
# configuration du scanner
############################
if test -z "ÎP"
then #USB
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
then
echo " - Règle udev deja presente dans le fichier $Udev_Rules"
else
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
udevadm control --reload-rules
fi
else #network
for saneConf in /usr/bin/brsaneconfig{,{2..5}}
do
test -x "$saneConf" && cmd=$saneConf
done
if test -z "$cmd"
then
errQuit "no brsaneconfig found."
elif test "$cmd" = '/usr/bin/brsaneconfig4'
then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
fi
$cmd -a name=SCANNER model="$modelName" ip="$IP"
fi
if test "$arch" = "x86_64" -a -d "$libDir"
then
case $cmd in
/usr/bin/brsaneconfig)
cd "$libDir" || exit;
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
;;
/usr/bin/brsaneconfig2)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
;;
/usr/bin/brsaneconfig3)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
;;
/usr/bin/brsaneconfig4)
cd "$libDir"/sane || exit
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
;;
/usr/bin/brsaneconfig5)
cd "$libDir"/sane || exit
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
;;
esac
fi
et le retour terminal
iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh MFCL-2710DW
vous voulez configurer votre imprimante pour qu'elle fonctionne en réseau ? [y/N]:
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
E: Impossible de trouver le paquet multiarch-support
DL DRV TAB == MFCL2710DW mfcl2710dwpdrv-4.0.0-1.i386.deb no brother-udev-rule-type1-1.0.2-0.all.deb brscan-skey-0.3.4-0.amd64.deb brscan4-0.4.11-1.amd64.deb
PKG2INSTALL == /tmp/packages/mfcl2710dwpdrv-4.0.0-1.i386.deb /tmp/packages/brother-udev-rule-type1-1.0.2-0.all.deb /tmp/packages/brscan-skey-0.3.4-0.amd64.deb /tmp/packages/brscan4-0.4.11-1.amd64.deb
(Lecture de la base de données... 305352 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../mfcl2710dwpdrv-4.0.0-1.i386.deb ...
Restarting lpd (via systemctl): lpd.service.
lpadmin : The printer or class does not exist.
Dépaquetage de mfcl2710dwpdrv:i386 (4.0.0-1) sur (4.0.0-1) ...
Restarting lpd (via systemctl): lpd.service.
Préparation du dépaquetage de .../brother-udev-rule-type1-1.0.2-0.all.deb ...
Dépaquetage de brother-udev-rule-type1 (1.0.2) sur (1.0.2) ...
Préparation du dépaquetage de .../brscan-skey-0.3.4-0.amd64.deb ...
Dépaquetage de brscan-skey (0.3.4-0) sur (0.3.4-0) ...
Préparation du dépaquetage de .../brscan4-0.4.11-1.amd64.deb ...
Dépaquetage de brscan4 (0.4.11-1) sur (0.4.11-1) ...
Paramétrage de mfcl2710dwpdrv:i386 (4.0.0-1) ...
Restarting lpd (via systemctl): lpd.service.
lpadmin -p MFCL2710DW -E -v usb://dev/usb/lp0 -P /usr/share/ppd/brother/brother-MFCL2710DW-cups-en.ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
Paramétrage de brother-udev-rule-type1 (1.0.2) ...
Paramétrage de brscan-skey (0.3.4-0) ...
Paramétrage de brscan4 (0.4.11-1) ...
This software is based in part on the work of the Independent JPEG Group.
pkg ==
pkg == mfcl2710dwpdrv-4.0.0-1.i386.deb
gawk: ligne de commande:1: BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF}
gawk: ligne de commande:1: ^ syntax error
dpkg-deb: erreur: le sous-processus tar a été tué par le signal (Relais brisé (pipe))
PPDs ==
one ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpadmin: Unable to open PPD "": Unable to open PPD file on line 0.
"SCANNER" is already registered.
iznobe@iznobe-pc:~$
il ne devrait plus rester grand chose ... la partie .ppd / scnanner seulement .
ca a beau etre un script mieux structuré , je prefere largement celui avec les fonctions pour debugguer et faire le suivi de ce qu ' il se passe .
là il faut monter descendre pour trouver les tableaux , sur que dans 10 ans , il me faudra 2 jours mini pour me re " approprier " le code ....
Dernière modification par iznobe (Hier à 15:06)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#170 Hier à 17:59
#171 Hier à 18:07
- ylag
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
[HS]
Vu au #169 :
"lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS."
Ça devrait être le cas lorsque les distributions passeront à Cups version 3 ?
https://github.com/OpenPrinting/cups/wiki/CUPS-3.0
https://wiki.debian.org/CUPSNewArchitecture
Ça ne semble pas encore le cas pour le moment dans les dépôts de la future Questing 25.10, qui serait encore sur cups 2.4 :
Paquet cups
[/HS]
A+
Dernière modification par ylag (Hier à 19:10)
Hors ligne
#172 Hier à 19:24
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Salut @ylag , oula , ca n' a pas l' air d' etre un petit morceau cette histoire !
j ' espere que ca ne fera pas comme pour les snaps ...
Mais je pense que ca ne sortira pas avant 26.10 ou + . ca ne semble pas encore finalisé , beaucoup trop d' activité en cours
Avec de la " chance " peut etre pour 26.04 ?
@Watael , oui , je connais pas encore toutes les subtilités de sublime text non plus
Merci :
Dernière modification par iznobe (Hier à 19:29)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#173 Hier à 19:34
- ylag
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
Avec de la " chance " peut etre pour 26.04 ?
Sauf erreur de ma part, ce genre de changement est implémenté sur une version intermédiare en premier. Donc, probablement pas avant la 26.10 ?
A+
Dernière modification par ylag (Hier à 19:35)
Hors ligne
#174 Hier à 19:40
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
tout à fait d' accord .
je n' ai pas cherché a trouver leur date de sortie prévue , c' était purement au fealing . Mais c' est ce qui semble le plus judicieux , et permettra de corriger les bugs de jeunnesse pendant les 3 test suivantes avant la prochaine LTS ( 28.04 donc ) .
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#175 Hier à 19:43
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
je connais pas encore toutes les subtilités de sublime text non plus
c'est vim; juste vim, simplement vim.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne