#251 Hier à 22:46
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
je reprendrais demain , si j' ai un peu de temps pour remplacer nmap par avahi , ca parait plus " sur " et c' est surtout plus rapide , niveau code , j ' ai pas l' impression que cela va changer grand chose ( a part qu ' on inverse le cheminement , recuperation de l' IP à la fin ) .
le code avec la modif pour le tableau , le deroulement du script à l' air d' etre OK , meme si certainement ca pourra etre amelioré .
#!/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
############################
if test -f /etc/lsb-release
then
. /etc/lsb-release
DistroName="$DISTRIB_ID"
VersionYear="${DISTRIB_RELEASE::2}"
codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
. /usr/lib/os-release
DistroName="$NAME"
VersionYear="${VERSION_ID::2}"
codeName="$VERSION_CODENAME"
fi
user="$SUDO_USER"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"
declare -A printer
declare -i err
#################
# 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"
printerInfo="$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 test "$DistroName" != "Ubuntu"; then errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles.";fi
if test "$SHELL" != "/bin/bash"; then errQuit "Shell non compatible. utilisez : bash"; fi
if test "$arch" != "x86_64"; then errQuit "Système non compatible."; fi
#if [[ $arch != @(i386|i686|x86_64) ]]
if ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; fi
if ! nc -z -w5 'brother.com' 80; then errQuit "le site \"brother.com\" n'est pas joignable.";fi
##########################
# DETECTION AUTOMATIQUE #
##########################
# printer_name= ???
declare -a printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
#echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
wget -E "$p_ip" -O "$tmpDir/index.html"
# version robuste :
printer_name+="$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)"
#echo "printer_name == ${printer_name[*]}"
done
# echo "printer_name RESULT ==
# TAB printer_IP == ${printer_IP[*]}
# TAB printer_name == ${printer_name[*]}"
# printer_name= ???
printer_name+="$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)"
# echo "printer_name == ${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?"
# on repars donc avec les questions de base : modele etc ...
;;
1) echo "une seule imprimante détectée"
modelName=${printer_name[0]} # ! printer_name != printerName
# pas besoin de poser de question , il ne reste plus qu ' a installer
;;
*) echo "plusieurs imprimantes ont été détectées"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
n_print=$(("${#printer_name[@]}"))
for n in "${!printer_name[@]}"; do
echo " $((n+1)) ⇒ ${printer_name[$n]}"
done
while test -z "$choix"; do
read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix
if ! ((choix > 0 && choix <= n_print)); then
echo "choix invalide !"
unset choix
fi
done
modelName="${printer_name[$((choix-1))]}"
;;
esac
##########################
# gestion des arguments #
##########################
if test -z $modelName; then
declare -u modelName=$1
else
modelName="${modelName^^}"
fi
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
until test -n "$IP"
do
read -rp "Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/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
###################################################
# initialisation du tableau associatif `printer' #
###################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInfo" | sed '/\(]\|rpm\|=\)$/d')
#########################################################
# vérification de variables disponibles dans `printer' #
#########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
errQuit "les données du fichier info recupéré et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInfo="$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')
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
if test -n "$VersionYear"; then
if (( VersionYear >= 24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
then
printer[SCANKEY_DRV]="$Scankey_Drv_Deb_Name"
fi
else
errQuit "Impossible d’évaluer la version de la distribution."
fi
else
err+=1
echo "pas de pilote pour le scanner."
fi
###########################
# préparation du système #
###########################
# if test -f "$Logfile"; then
# Old_Date="$(head -n1 "$Logfile")"
# mv -v "$Logfile" "$Logfile"."$Old_Date".log
# fi
# echo "$date" >> "$Logfile" # indispensable pour la rotation du log .
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" "nmap" "libxml2-utils" "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 [[ $drv == @($printerName|no|yes) ]]; 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_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) echo "no ppd"
err+=1
;;
1) echo one ppd
Ppd_File=${PPDs[0]}
;;
*) err+=1
echo "more than one ppd"
Ppd_File=${PPDs[0]}
;;
esac
cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
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
#############################
# 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 -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
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#252 Hier à 23:00
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
chez moi c’est mitigé
pas de scanner et ça serait cool de ne pas avoir à chercher l’IP fixe de l’imprimante (d’ailleurs comment différencier une ip non fixe d’une fixe ??)
le script verifie que :
+ tu as acces a internet .
+ que le serveur de brother est joignable
+ que l' ip que tu entres est valide
+ que l' ip que tu entres repond a un ping
Mais il ne verifie pas si tu as parametré une IP fixe pour ton imprimante d' une maniere ou d' une autre .
Par contre , si tu n' as pas configuré une IP fixe , forcément , ton imprimante en changera un jour ou l' autre , et donc l' installation en reseau enverra les requetes sur l' ancienne IP et donc plus rien ne fonctionnera ..
d' ou l ' avertissement .
Vu que tu n' as pas de scanner et que le script a un bug , peux tu me fournir ton fichier log stp ?
je verrais plus de details .
Merci .
je viens de verifier , pour l' imprimante : MFCJ4510DW : les pilotes pour le scanner sont bien dispo :
https://support.brother.com/g/b/downloa … ng=English
donc normal que le script les telecharge et les installe ...
Dernière modification par iznobe (Aujourd'hui à 06:35)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#253 Aujourd'hui à 07:14
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
… ########################## # DETECTION AUTOMATIQUE # ########################## … 0) echo "Aucune imprimante détectée ! Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?" … read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix …
Que tu aies une orthographe aléatoire sur le forum est une chose mais que tu imposes ces horribles fautes aux utilisateurs du script, non !
PAS D’ESPACE APRÈS UNE APOSTROPHE SCRONGNEUGNEU !
Et non plus avant, ce qui n’est pas le cas ici mais ça t’arrive fréquemment.
Sans oublier les accents.
Et puisqu’on parle d’apostrophe, je trouve l’apostrophe typographique (’) plus jolie que l’apostrophe dactylographique ('). En plus, ça permet de ne pas confondre avec une ouverture ou fermeture de guillemets simples droits (single quotes).
Bref :
Êtes vous sûr de l’avoir connectée au port USB de votre ordinateur ou à votre réseau local ?
read -rp "Choisissez le numéro qui correspond à l’imprimante que voulez installer : " choix
Question : si on met le nom du modèle de l’imprimante et éventuellement une adresse IP comme arguments au script, est-il vraiment nécessaire d’exécuter cette détection automatique ?
Hors ligne
#254 Aujourd'hui à 07:37
- eric63
Re : remise au gout du jour du script de demonipuch imprimante brother
pas de scanner
Désolé, quand je disais cela je ne disais pas que je n’avais pas de scanner
mais que mon scanner n’a pas été pris en compte par le script
log donné en #238
# Recherche des pilotes
- Recherche des pilotes pour l' imprimante
- Recherche des pilotes pour le scanner
- Scanner infos :
https://download.brother.com/pub/com/linux/linux/infs/brscan4.lnk
https://download.brother.com/pub/com/linux/linux/infs/brscan-skey.lnk
# Téléchargement des pilotes
- Paquet trouvé : brscan4-0.4.11-1.amd64.deb
- Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb
--2025-08-15 13:08:52-- https://download.brother.com/pub/com/linux/linux/packages/brscan4-0.4.11-1.amd64.deb
Resolving download.brother.com (download.brother.com)... 2.18.132.241
Connecting to download.brother.com (download.brother.com)|2.18.132.241|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 111246 (109K) [text/plain]
Saving to: ‘/tmp/packages/brscan4-0.4.11-1.amd64.deb’
0K .......... .......... .......... .......... .......... 46% 3,07M 0s
50K .......... .......... .......... .......... .......... 92% 4,32M 0s
100K ........ 100% 16,1T=0,03s
2025-08-15 13:08:52 (3,90 MB/s) - ‘/tmp/packages/brscan4-0.4.11-1.amd64.deb’ saved [111246/111246]
- Paquet trouvé : brscan-skey-0.3.4-0.amd64.deb
- Téléchargement du paquet : brscan-skey-0.3.4-0.amd64.deb
--2025-08-15 13:08:52-- https://download.brother.com/pub/com/linux/linux/packages/brscan-skey-0.3.4-0.amd64.deb
Resolving download.brother.com (download.brother.com)... 2.18.132.241
Connecting to download.brother.com (download.brother.com)|2.18.132.241|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 59150 (58K) [text/plain]
Saving to: ‘/tmp/packages/brscan-skey-0.3.4-0.amd64.deb’
0K .......... .......... .......... .......... .......... 86% 3,09M 0s
50K ....... 100% 6,33M=0,02s
2025-08-15 13:08:52 (3,32 MB/s) - ‘/tmp/packages/brscan-skey-0.3.4-0.amd64.deb’ saved [59150/59150]
…
Configuration du scanner
* Configuration du scanner réseau... [fail]
No config binary found.
Configuration de votre imprimante Brother MFC-J4510DW terminée. Bye :D
les paquets ont été correctement téléchargés
No config binary found. ???? qu’est ce que cela signifie ?
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
#255 Aujourd'hui à 08:06
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour ,
si grep ne se suffit pas à lui-même*, pense awk.
--
* pareil pour sed wink
, encore faut il savoir se servir correctement de ces outils ( mais OSEF , puisque ça marche
)
---------------------------------------
probleme , pour l' affichage de la liste , mais je pense qu ' en fait , ce n ' est pas dans la nature du script , et donc que ce n' est pas utile d ' afficher , le nom de l' imprimante et son IP ou le nom de l' imprimante et USB se lon le cas .
l ' utilisateur choisira d ' abord son nom , puis le type de connexion , et si besoin est son IP , comme ca a toujours été le cas jusqu ' a present .
---------------------------------------
Si quelqu ' un a plusieurs imprimantes de la marque brother , ca serait bien qu ' il teste le script et envoie la sortie
---------------------------------------
bref , le nouveau code avec le déroulement attendu du script qui fonctionne pour la partie autoamtique .
je sais pas ce que j' ai fait , mais la variable " ${printer[PRINTERNAME]} " , est tout le temps vide maintenant ...
#!/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
############################
if test -f /etc/lsb-release
then
. /etc/lsb-release
DistroName="$DISTRIB_ID"
VersionYear="${DISTRIB_RELEASE::2}"
codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
. /usr/lib/os-release
DistroName="$NAME"
VersionYear="${VERSION_ID::2}"
codeName="$VERSION_CODENAME"
fi
user="$SUDO_USER"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"
declare -A printer
declare -i err
#################
# 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"
printerInfo="$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 test "$DistroName" != "Ubuntu"; then errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles.";fi
if test "$SHELL" != "/bin/bash"; then errQuit "Shell non compatible. utilisez : bash"; fi
if test "$arch" != "x86_64"; then errQuit "Système non compatible."; fi
# if [[ $arch != @(i386|i686|x86_64) ]]
if ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; fi
if ! nc -z -w5 'brother.com' 80; then errQuit "le site \"brother.com\" n'est pas joignable.";fi
##########################
# DETECTION AUTOMATIQUE #
##########################
# tt="$(grep -oP '(?<=<title>).*?(?=</title>)' $file)"
# printer_name= ???
declare -a printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
if wget -E "$p_ip" -O "$tmpDir/index.html"; then
# version robuste :
printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
#echo "printer_name == ${printer_name[*]}"
fi
done
#echo "printer_name RESULT ==
#TAB printer_IP == ${printer_IP[*]}
#TAB printer_name == ${printer_name[*]}"
# printer_name= ???
if test lsusb | grep 04f9:; then
printer_name+=( "$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)" )
fi
#echo "printer_name ==
#${#printer_name[*]} ,
#${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?"
# on repars donc avec les questions de base : modele etc ...
;;
1) echo "une seule imprimante détectée"
modelName=${printer_name[0]^^} # ! printer_name != printerName
# pas besoin de poser de question , il ne reste plus qu ' a installer
;;
*) echo "plusieurs imprimantes ont été détectées"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
n_print=$(("${#printer_name[@]}"))
for n in "${!printer_name[@]}"; do
echo " $((n+1)) ⇒ ${printer_name[$n]}"
done
while test -z "$choix"; do
read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix
if ! ((choix > 0 && choix <= n_print)); then
echo "choix invalide !"
unset choix
fi
done
modelName="${printer_name[$((choix-1))]^^}"
;;
esac
##########################
# gestion des arguments #
##########################
# if test -n "$modelName"; then
# modelName="${modelName^^}"
# else
# declare -u modelName=$1
# fi
declare -u modelName=$1
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
until test -n "$IP"
do
read -rp "Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/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
###################################################
# initialisation du tableau associatif `printer' #
###################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInfo" | sed '/\(]\|rpm\|=\)$/d')
#########################################################
# vérification de variables disponibles dans `printer' #
#########################################################
if test "${printer[PRINTERNAME]}" != "$printerName"
then
echo "${printer[PRINTERNAME]} ......$printerName"
errQuit "les données du fichier info recupéré et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInfo="$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')
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
if test -n "$VersionYear"; then
if (( VersionYear >= 24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
then
printer[SCANKEY_DRV]="$Scankey_Drv_Deb_Name"
fi
else
errQuit "Impossible d’évaluer la version de la distribution."
fi
else
err+="1"
echo "pas de pilote pour le scanner."
fi
###########################
# préparation du système #
###########################
# a remettre le script en service
# if test -f "$Logfile"; then
# Old_Date="$(head -n1 "$Logfile")"
# mv -v "$Logfile" "$Logfile"."$Old_Date".log
# fi
# echo "$date" >> "$Logfile" # indispensable pour la rotation du log .
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" "nmap" "libxml2-utils" "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 [[ $drv == @($printerName|no|yes) ]]; 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_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) echo "no ppd"
err+="1"
;;
1) echo one ppd
Ppd_File=${PPDs[0]}
;;
*) err+="1"
echo "more than one ppd"
Ppd_File=${PPDs[0]}
;;
esac
cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
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
#############################
# 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 -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
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#256 Aujourd'hui à 08:25
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
PAS D’ESPACE APRÈS UNE APOSTROPHE SCRONGNEUGNEU !
roo
justement j' avais fait attention a éviter des le départ les " photees " d'orthographe ... un espace en plus ou en moins , c' est pas une faute .
De plus le script est en dev , aucun " utilisateur " ne devrait l' utiliser , puisque il ne fonctionne pas vraiment , il reste plein de corrections à apporter .
bref , j' ai corriger pour la future dépose du script .
log donné en #238
dans ce message , je n' ai pas vu le log , seulement la sortie du terminal , qui ne donne pas autant de détails que le fichier de log .
for f in ~/brprinter*.log;do echo $f;cat -n $f;echo;done
No config binary found. ???? qu’est ce que cela signifie ?
que le script n' a pas trouvé le dossier ou déposer les lib / binaires .
j ' ai modifier la phrase en anglais .
j ' ai modifier le script , si tu veux refaire un essai , ca devrait être bon maintenant . sauf si chez toi le répertoire en question n' existe pas .
Dans ce cas il est normal que ca dise qu ' il ne l' est pas trouvé . Mais j' en doute , il est sur toutes les distros .
Dernière modification par iznobe (Aujourd'hui à 08:35)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#257 Aujourd'hui à 08:53
- eric63
Re : remise au gout du jour du script de demonipuch imprimante brother
c’est bien mieux
sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/iznobe/brother_printer_install/refs/heads/main/brprinter_install.sh)"
2025-08-16_08:47:34
# Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe.
# 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
- Controle de l' adresse IP entrée
#
# Ubuntu Codename : plucky
# Architecture : x86_64
# Modèle de l'imprimante : MFC-J4510DW
# Type de connexion : Réseau
# Adresse IP : 192.168.1.180
# Repertoire courant : /home/kubu
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : https://download.brother.com/pub/com/linux/linux/infs/MFCJ4510DW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCJ4510DW_us_eu_as
# initialisation du script.
- Recherche du dossier ' /tmp/packages ' sur votre système
- Obtention des infos de l' imprimante
- Vérification du fichier obtenu
# Vérification des pré-requis
- Mise à jour de la liste des paquets
- installation des paquets requis
- Recherche du paquet : ' multiarch-support ' sur votre système
- Paquet ' multiarch-support ' non installé
- Installation du paquet : ' multiarch-support ' sur votre système
E: Impossible de trouver le paquet multiarch-support
- Recherche du paquet : ' lib32stdc++6 ' sur votre système
- Paquet ' lib32stdc++6 ' deja installé
- Recherche du paquet : ' cups ' sur votre système
- Paquet ' cups ' deja installé
- Recherche du paquet : ' curl ' sur votre système
- Paquet ' curl ' deja installé
- Recherche du paquet : ' wget ' sur votre système
- Paquet ' wget ' deja installé
- Recherche du paquet : ' gawk ' sur votre système
- Paquet ' gawk ' deja installé
- Recherche du dossier ' /usr/share/cups/model ' sur votre système
- Recherche du dossier ' /var/spool/lpd ' sur votre système
# Recherche des pilotes
- Recherche des pilotes pour l' imprimante
- Recherche des pilotes pour le scanner
- Scanner infos :
https://download.brother.com/pub/com/linux/linux/infs/brscan4.lnk
https://download.brother.com/pub/com/linux/linux/infs/brscan-skey.lnk
# Téléchargement des pilotes
- Paquet trouvé : brscan4-0.4.11-1.amd64.deb
- Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb
--2025-08-16 08:48:08-- 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: ‘/tmp/packages/brscan4-0.4.11-1.amd64.deb’
0K .......... .......... .......... .......... .......... 46% 3,80M 0s
50K .......... .......... .......... .......... .......... 92% 5,81M 0s
100K ........ 100% 16,1T=0,02s
2025-08-16 08:48:08 (4,99 MB/s) - ‘/tmp/packages/brscan4-0.4.11-1.amd64.deb’ saved [111246/111246]
- Paquet trouvé : brscan-skey-0.3.4-0.amd64.deb
- Téléchargement du paquet : brscan-skey-0.3.4-0.amd64.deb
--2025-08-16 08:48:08-- https://download.brother.com/pub/com/linux/linux/packages/brscan-skey-0.3.4-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: 59150 (58K) [text/plain]
Saving to: ‘/tmp/packages/brscan-skey-0.3.4-0.amd64.deb’
0K .......... .......... .......... .......... .......... 86% 3,69M 0s
50K ....... 100% 9,10M=0,01s
2025-08-16 08:48:08 (4,01 MB/s) - ‘/tmp/packages/brscan-skey-0.3.4-0.amd64.deb’ saved [59150/59150]
- Paquet trouvé : mfcj4510dwlpr-3.0.1-1.i386.deb
- Téléchargement du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb
--2025-08-16 08:48:08-- 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: ‘/tmp/packages/mfcj4510dwlpr-3.0.1-1.i386.deb’
0K .......... .......... .......... .......... .......... 1% 2,02M 1s
50K .......... .......... .......... .......... .......... 3% 6,01M 1s
100K .......... .......... .......... .......... .......... 5% 7,70M 1s
150K .......... .......... .......... .......... .......... 6% 13,8M 1s
200K .......... .......... .......... .......... .......... 8% 11,2M 1s
250K .......... .......... .......... .......... .......... 10% 17,5M 0s
300K .......... .......... .......... .......... .......... 11% 18,9M 0s
350K .......... .......... .......... .......... .......... 13% 13,4M 0s
400K .......... .......... .......... .......... .......... 15% 22,8M 0s
450K .......... .......... .......... .......... .......... 16% 30,2M 0s
500K .......... .......... .......... .......... .......... 18% 26,1M 0s
550K .......... .......... .......... .......... .......... 20% 37,7M 0s
600K .......... .......... .......... .......... .......... 21% 34,6M 0s
650K .......... .......... .......... .......... .......... 23% 36,2M 0s
700K .......... .......... .......... .......... .......... 25% 34,1M 0s
750K .......... .......... .......... .......... .......... 26% 29,8M 0s
800K .......... .......... .......... .......... .......... 28% 64,8M 0s
850K .......... .......... .......... .......... .......... 30% 65,7M 0s
900K .......... .......... .......... .......... .......... 32% 29,1M 0s
950K .......... .......... .......... .......... .......... 33% 68,7M 0s
1000K .......... .......... .......... .......... .......... 35% 82,0M 0s
1050K .......... .......... .......... .......... .......... 37% 61,7M 0s
1100K .......... .......... .......... .......... .......... 38% 54,3M 0s
1150K .......... .......... .......... .......... .......... 40% 51,0M 0s
1200K .......... .......... .......... .......... .......... 42% 56,8M 0s
1250K .......... .......... .......... .......... .......... 43% 179M 0s
1300K .......... .......... .......... .......... .......... 45% 57,4M 0s
1350K .......... .......... .......... .......... .......... 47% 78,8M 0s
1400K .......... .......... .......... .......... .......... 48% 63,5M 0s
1450K .......... .......... .......... .......... .......... 50% 123M 0s
1500K .......... .......... .......... .......... .......... 52% 71,0M 0s
1550K .......... .......... .......... .......... .......... 53% 69,5M 0s
1600K .......... .......... .......... .......... .......... 55% 82,2M 0s
1650K .......... .......... .......... .......... .......... 57% 94,3M 0s
1700K .......... .......... .......... .......... .......... 58% 165M 0s
1750K .......... .......... .......... .......... .......... 60% 81,0M 0s
1800K .......... .......... .......... .......... .......... 62% 98,8M 0s
1850K .......... .......... .......... .......... .......... 64% 56,8M 0s
1900K .......... .......... .......... .......... .......... 65% 189M 0s
1950K .......... .......... .......... .......... .......... 67% 105M 0s
2000K .......... .......... .......... .......... .......... 69% 99,3M 0s
2050K .......... .......... .......... .......... .......... 70% 89,0M 0s
2100K .......... .......... .......... .......... .......... 72% 7,71M 0s
2150K .......... .......... .......... .......... .......... 74% 238M 0s
2200K .......... .......... .......... .......... .......... 75% 205M 0s
2250K .......... .......... .......... .......... .......... 77% 114M 0s
2300K .......... .......... .......... .......... .......... 79% 210M 0s
2350K .......... .......... .......... .......... .......... 80% 290M 0s
2400K .......... .......... .......... .......... .......... 82% 121M 0s
2450K .......... .......... .......... .......... .......... 84% 156M 0s
2500K .......... .......... .......... .......... .......... 85% 155M 0s
2550K .......... .......... .......... .......... .......... 87% 229M 0s
2600K .......... .......... .......... .......... .......... 89% 206M 0s
2650K .......... .......... .......... .......... .......... 91% 157M 0s
2700K .......... .......... .......... .......... .......... 92% 172M 0s
2750K .......... .......... .......... .......... .......... 94% 275M 0s
2800K .......... .......... .......... .......... .......... 96% 148M 0s
2850K .......... .......... .......... .......... .......... 97% 210M 0s
2900K .......... .......... .......... .......... .......... 99% 117M 0s
2950K .......... ...... 100% 352M=0,1s
2025-08-16 08:48:08 (30,0 MB/s) - ‘/tmp/packages/mfcj4510dwlpr-3.0.1-1.i386.deb’ saved [3038108/3038108]
- Paquet trouvé : brother-udev-rule-type1-1.0.2-0.all.deb
- Téléchargement du paquet : brother-udev-rule-type1-1.0.2-0.all.deb
--2025-08-16 08:48:08-- 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: ‘/tmp/packages/brother-udev-rule-type1-1.0.2-0.all.deb’
0K . 100% 562M=0s
2025-08-16 08:48:08 (562 MB/s) - ‘/tmp/packages/brother-udev-rule-type1-1.0.2-0.all.deb’ saved [1558/1558]
- Paquet trouvé : mfcj4510dwcupswrapper-3.0.1-1.i386.deb
- Téléchargement du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb
--2025-08-16 08:48:08-- 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: ‘/tmp/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb’
0K .......... ..... 100% 409M=0s
2025-08-16 08:48:08 (409 MB/s) - ‘/tmp/packages/mfcj4510dwcupswrapper-3.0.1-1.i386.deb’ saved [15474/15474]
# Installation des pilotes
- Installation du paquet : brscan4-0.4.11-1.amd64.deb
Sélection du paquet brscan4 précédemment désélectionné.
(Lecture de la base de données... 321306 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) ...
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 : brscan-skey-0.3.4-0.amd64.deb
Sélection du paquet brscan-skey précédemment désélectionné.
(Lecture de la base de données... 321359 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../brscan-skey-0.3.4-0.amd64.deb ...
Dépaquetage de brscan-skey (0.3.4-0) ...
Paramétrage de brscan-skey (0.3.4-0) ...
- Installation 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... 321379 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 : 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... 321405 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) ...
- Installation 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... 321409 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.
# Configuration de l'imprimante
- Recherche d'un fichier PPD sur votre système
- Fichier PPD : ' /opt/brother/Printers/mfcj4510dw/cupswrapper/brother_mfcj4510dw_printer_en.ppd ' trouvé
- 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
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
- Restauration du fichier printers.conf.O
# Configuration du scanner - Configuration du scanner réseau
- Copie des bibliotheques nécessaires brsaneconfig4
# Configuration de votre imprimante Brother MFC-J4510DW terminée. Bye :D
# Vous pouvez supprimer le dossier /tmp/packages avec la commande suivante : rm -r /tmp/packages
Dernière modification par eric63 (Aujourd'hui à 08:55)
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
#258 Aujourd'hui à 09:47
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
j ' ai oublié de répondre à:
Question : si on met le nom du modèle de l’imprimante et éventuellement une adresse IP comme arguments au script, est-il vraiment nécessaire d’exécuter cette détection automatique ?
je sais pas .
Mais imaginons qu ' un utilisateur possède 2 imprimantes du même modèle , comment est ce qu ' on pourra les différencier ? :
soit une est en USB ,et l' autre en réseau .
soit les 2 sont en USB
soit les 2 sont en réseau .
A partir de là , on se rend compte que seul le nom de l' imprimante n ' est pas suffisant . donc à mon avis , en ce sens , oui , il faudrait faire une détection automatique puisqu ' il faudrait , dans l' idéal , gérer ce cas là ...
et proposer une liste de choix avec couple :
modele , USB ? : IP
Pour l' instant , j' aimerais finir completement la structure du code .
je galere pour , justement , presenter cette liste à l' utilisateur ...
je n' arrive pas à fournir le nom du modele de l' imprimante ET associé le type de connexion ,et si c' est en reseau affiché son IP , sinon USB
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#259 Aujourd'hui à 09:48
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
je sais pas ce que j' ai fait , mais la variable " ${printer[PRINTERNAME]} " , est tout le temps vide maintenant ...
C’est ici que ça se passe :
################################################### # initialisation du tableau associatif `printer' # ################################################### while IFS='=' read -r k v do printer[$k]=$v done < <(wget -qO- "$printerInfo" | sed '/\(]\|rpm\|=\)$/d')
L’adresse "$printerInfo" est-elle bien renseignée à ce moment ?
Je pense que ton code de détection automatique est la cause mais je ne vois pas où ?
En tout cas, la déclaration avec affectation de $1 de modelName vient trop tard.
Et, comme je l’ai dit, est-il nécessaire de faire cette détection automatique si on passe des arguments au script ?
Je verrais quelque chose comme ça :
…
declare -u modelName=$1
if test -z "$modelName"
then
##########################
# DETECTION AUTOMATIQUE #
##########################
# tt="$(grep -oP '(?<=<title>).*?(?=</title>)' $file)"
# printer_name= ???
declare -a printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
if wget -E "$p_ip" -O "$tmpDir/index.html"; then
# version robuste :
printer_name+=( "$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
#echo "printer_name == ${printer_name[*]}"
fi
done
#echo "printer_name RESULT ==
#TAB printer_IP == ${printer_IP[*]}
#TAB printer_name == ${printer_name[*]}"
# printer_name= ???
if test lsusb | grep 04f9:; then
printer_name+=( "$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)" )
fi
#echo "printer_name ==
#${#printer_name[*]} ,
#${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?"
# on repars donc avec les questions de base : modele etc ...
;;
1) echo "une seule imprimante détectée"
modelName=${printer_name[0]^^} # ! printer_name != printerName
# pas besoin de poser de question , il ne reste plus qu ' a installer
;;
*) echo "plusieurs imprimantes ont été détectées"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
n_print=$(("${#printer_name[@]}"))
for n in "${!printer_name[@]}"; do
echo " $((n+1)) ⇒ ${printer_name[$n]}"
done
while test -z "$choix"; do
read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix
if ! ((choix > 0 && choix <= n_print)); then
echo "choix invalide !"
unset choix
fi
done
modelName="${printer_name[$((choix-1))]^^}"
;;
esac
else
##########################
# gestion des arguments #
##########################
# if test -n "$modelName"; then
# modelName="${modelName^^}"
# else
# declare -u modelName=$1
# fi
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
fi
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
until test -n "$IP"
do
read -rp "Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/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
###################################################
# initialisation du tableau associatif `printer' #
###################################################
…
Je ne peux pas tester car je n’ai pas d’imprimante Brother.
Mais je me demande pourquoi l’IP n’est pas renseignée lors de la détection automatique. Ça éviterait de demander cette adresse IP.
Hors ligne
#260 Aujourd'hui à 09:52
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
je ne sais pas si tu te rappelle , mais on avait aussi galérer pour faire ça dans le script que j' ai ajouté dans ma signature : https://forum.ubuntu-fr.org/viewtopic.php?id=2090293
mais , a peu de chose prés , c' est un peu le même type de liste que j' aimerais faire .
EDIT messages croisés .
En tout cas, la déclaration avec affectation de $1 de modelName vient trop tard.
c' est la cause , oui , lors du déplacement d' une partie de code .
je rectifie .
Voir mon message précédent , qui rejoint complètement ton idée à propose de l' IP en détection automatique et le reste .
Mais je galère
Dernière modification par iznobe (Aujourd'hui à 09:55)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#261 Aujourd'hui à 10:44
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Mais je galère
À tester :
…
declare -u modelName=$1
if test -z "$modelName"
then
##########################
# DETECTION AUTOMATIQUE #
##########################
# tt="$(grep -oP '(?<=<title>).*?(?=</title>)' $file)"
# printer_name= ???
declare -a printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
if wget -E "$p_ip" -O "$tmpDir/index.html"; then
# version robuste :
printer_name+=( "réseau : $(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)" )
#echo "printer_name == ${printer_name[*]}"
fi
done
#echo "printer_name RESULT ==
#TAB printer_IP == ${printer_IP[*]}
#TAB printer_name == ${printer_name[*]}"
# printer_name= ???
if test lsusb | grep 04f9:; then
printer_name+=( "usb : $(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)" )
fi
#echo "printer_name ==
#${#printer_name[*]} ,
#${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?"
# on repars donc avec les questions de base : modele etc ...
;;
1) echo "une seule imprimante détectée"
modelName=${printer_name[0]##* } # ! printer_name != printerName
if [[ ${printer_name[0]} =~ "^réseau" ]]
then
IP=${printer_IP[0]}
else
nolan=1
fi
# pas besoin de poser de question , il ne reste plus qu ' a installer
;;
*) echo "plusieurs imprimantes ont été détectées"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
n_print=$(("${#printer_name[@]}"))
for n in "${!printer_name[@]}"; do
echo " $((n+1)) ⇒ ${printer_name[$n]} ${printer_IP[$n]}"
done
while test -z "$choix"; do
read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix
if ! ((choix > 0 && choix <= n_print)); then
echo "choix invalide !"
unset choix
fi
done
modelName="${printer_name[$((choix-1))]##* }"
if [[ ${printer_name[$((choix-1))]} =~ "^réseau" ]]
then
IP=${printer_IP[$((choix-1))]}
else
nolan=1
fi
;;
esac
else
##########################
# gestion des arguments #
##########################
# if test -n "$modelName"; then
# modelName="${modelName^^}"
# else
# declare -u modelName=$1
# fi
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
fi
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
if ! test "$nolan" -eq 1
then
echo "Installation en USB."
else
until test -n "$IP"
do
read -rp "Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/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
fi
###################################################
# initialisation du tableau associatif `printer' #
###################################################
…
On pourrait même mettre dans la section # quelques vérifications # un test de présence d’un deuxième argument et mettre nolan=1 si non présent.
Dernière modification par nany (Aujourd'hui à 11:05)
Hors ligne
#262 Aujourd'hui à 11:00
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
j ' ai rectifié le tir pour $printer info , mais ca oblige de faire un wget supplémentaire .
de tout façon , je ne vois pas pourquoi on pourrait utiliser une variable si on ne l' a pas renseigné avant ...
###################################################
# initialisation du tableau associatif `printer' #
###################################################
# creation $Url_PrinterInfo
wget -q "$Url_Info/$printerName" -O "$F_P_fichier_Info"
if ! test "$(grep PRINTERNAME "$F_P_fichier_Info" | cut -d= -f2)" == "$printerName"; then
errQuit "les données du fichier info recupéré et le nom de l'imprimante ne correspondent pas."
elif test "$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"; then
Url_PrinterInfo="$Url_Info/$(grep LNK "$F_P_fichier_Info" | cut -d= -f2)"
fi
#echo "$Url_PrinterInfo"
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$Url_PrinterInfo" | sed '/\(]\|rpm\|=\)$/d')
#########################################################
# vérification de variables disponibles dans `printer' #
#########################################################
# if test "${printer[PRINTERNAME]}" != "$printerName"
# then
# echo "${printer[PRINTERNAME]} ......$printerName"
# errQuit "les données du fichier info recupéré et le nom de l'imprimante ne correspondent pas."
# fi
if test -n "${printer[SCANNER_DRV]}"
then
...
je regarde , ton code @nany , le teste et te dis ça .
Merci .
PS : tu as recopié le code avec :
iznobe@iznobe-pc:~$ sudo bash Scripts/Watael_brprinter_install.sh
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?
Scripts/Watael_brprinter_install.sh: ligne 254 : test: : nombre entier attendu comme expression
Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/N]:
suite du retour :
Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/N]:
pas de pilote pour le scanner.
E: Impossible de trouver le paquet multiarch-support
dpkg: erreur: --install a besoin d'au moins un fichier archive de paquet comme paramètre
Tapez dpkg --help pour obtenir de l'aide sur l'installation et la désinstallation des paquets [*] ;
Utilisez « apt » ou « aptitude » pour une gestion conviviale des paquets ;
Tapez dpkg -Dhelp pour obtenir une liste des valeurs des drapeaux de débogage de dpkg ;
Tapez dpkg --force-help pour une liste d'options de forçage ;
Tapez dpkg-deb --help pour obtenir de l'aide sur la manipulation des fichiers *.deb ;
Les options marquées [*] produisent beaucoup de données de sortie – passez-les dans « less » ou « more » !
more than one ppd
lpadmin: Printer drivers are deprecated and will stop working in a future version of CUPS.
lpadmin : L’attribut « printer-uri » doit se présenter sous la forme « ipp://HOSTNAME/printers/PRINTERNAME ».
"SCANNER" is already registered.
iznobe@iznobe-pc:~$
je regarderai ça a tête reposée , lundi , quand je pourrai tester avec une imprimante au moins et même 2 ( la meme en reseau et en USB ) , histoire d' etre sur du coup .
Bon weekend
Dernière modification par iznobe (Aujourd'hui à 11:17)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#263 Aujourd'hui à 12:01
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
PS : tu as recopié le code avec :
…
J’ai recopié le code en #255.
Où récupérer la dernière version ?
Scripts/Watael_brprinter_install.sh: ligne 254 : test: : nombre entier attendu comme expression
Oui, il y a un problème avec la variable nolan.
Je vais regarder mais il faudrait que je récupère la dernière version pour ne pas faire d’erreur.
Hors ligne