#176 Le 12/08/2025, à 19:47
- xubu1957
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonsoir,
Nous avions vu des remarques d'Ordissimo1
Dernière modification par xubu1957 (Le 12/08/2025, à 19:47)
Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [Réso|u] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci. Membre de Linux-Azur
En ligne
#177 Le 12/08/2025, à 20:53
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
gawk: ligne de commande:1: BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF} gawk: ligne de commande:1: ^ syntax error
Il faut fermer le BEGIN avec une accolade et non un point-virgule. Je pense aussi qu’il faudrait échapper le point dans la fonction sub.
…
while read -d '' fileName
do
PPDs+=( "$fileName" )
done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"} /ppd/{sub("\.","",$NF); print $NF}')
…
Mes deux sous.
Hors ligne
#178 Le 12/08/2025, à 21:29
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
Je pense aussi qu’il faudrait échapper le point dans la fonction sub.
la flemme.
sub() substitue la première correspondance (ici, n'importe quel caractère), et le premier caractère de la chaîne est un point.
trop la flemme.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#179 Le 12/08/2025, à 21:49
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
trop la flemme.
:shocked:
Hors ligne
#180 Le 12/08/2025, à 22:30
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Salut et merci @nany
le soucis , c ' est pas tellement le code et la maniere dont il est ecrit pour ma part ( bien que , quand meme faut bien avouer que c' est plus ou moins lisible comment c' eest fait , mais plutot la validité de ce qui est fait dans le script de demonipuch .
En particulier pour la derniere partie ' configuration imprimante / scanner , sans vouloir etre medisant , il y a des trucs plutot surprenant ...
Par exemple , cette variable :
Lib_Dir="/usr/lib/$Arch-linux-gnu"
j ' ai bien une idée de ce qu ' elle devrait contenir , mais bon , vu le code de imprimante / scanner , au final , je suis plus trop sur ...
$Arch-linux-gnu
n ' est pas initialisée ni declarée , elle affiche n' importe quoi chez moi , et elle est utilisée dans la partie scanner qu ' il faut vérifier et corriger .
il reste la regle UDEV a ecrire et a ajouter correctement , si c' est utile que je ne sais absolument pas faire , voir : https://forum.ubuntu-fr.org/viewtopic.php?id=2092050
bref , malgré la ré écriture , le script n' est pas correct ni fonctionnel dans sa totalité ... il faudrait tester les différentes parties une à une , ce que j' ai fait mais pas entièrement , il ne reste plus que la partie configuration scanner .
Mais besoin d' une pause ....
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#181 Le 12/08/2025, à 22:38
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
ce n'est pas $arch-linux-gnu
c'est $(uname -m)-linux-gnu
parce que arch=$(uname -m)
ou je n'ai pas compris ce que tu ne comprends pas ?
Dernière modification par Watael (Le 12/08/2025, à 22:39)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#182 Hier à 00:47
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ok , mais de toute maniere , ubuntu n' existe plus pour arch i686 ou i386 si puisque on ne peut pas telecharger de version 32 bit ?
Donc , dans le script tout ce qui gere $Arch , est inutile non ? on pourrait faire le script que pour arch=x86-64 du coup ...
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#183 Hier à 03:34
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
il reste la regle UDEV a ecrire et a ajouter correctement , si c' est utile que je ne sais absolument pas faire , voir : https://forum.ubuntu-fr.org/viewtopic.php?id=2092050
bref , malgré la ré écriture , le script n' est pas correct ni fonctionnel dans sa totalité ... il faudrait tester les différentes parties une à une , ce que j' ai fait mais pas entièrement , il ne reste plus que la partie configuration scanner .
Puisque tu as créé un fil spécifique, j’ai répondu dedans.
Hors ligne
#184 Hier à 08:24
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
du coup , j' ai fini a peu pres de corriger les quelques bus du script de @Watael .
il reste cependant des " trucs " a gerer .
Par exemple à la ligne 160 :
if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
si ça commande par 24 , sauf que c' est valable aussi pour 25.XX et certainement les versions futures de ubuntu .
et que signifie :
if [[ ${DISTRIB_RELEASE:-24} ?
Autre chose , il y a des " errQuit "pas de pilote pour le scanner." un peu partout , sauf que il ne faut pas interrompre le script si on ne trouve pas de pilote pour le scanner ...
+++++++++++++++++++++
pour la partie scanner , une chose que je ne comprends pas :
un lien vers un fichier , evite de copier le fichier à l' emplacement du lien non ?
du coup quel intérêt de faire :
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
plutot que de creer un lien vers "/usr/lib64/libbrcolm.so.1.0.1" ?
qui existe deja en plus . ca permettrait de supprimer ce fichier inutile et de gagner un lien , ou j' ai faux ?
+++++++++++++++++++++
le code du script de @Watael :
#!/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"
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 [[ $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- "$printerInfo" | 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"
if test -f /etc/lsb-release; then . /etc/lsb-release; fi
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
err+=1
echo "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
if test $drv = "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_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) 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
#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
Dernière modification par iznobe (Hier à 08:51)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#185 Hier à 11:59
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
${DISTRIB_RELEASE:-24} parce que je n'ai pas de fichier /etc/lsb-release, il me fallait donc une valeur par défaut.
if ((DISTRIB_RELEASE>=24)) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
Dernière modification par Watael (Hier à 12:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#186 Hier à 13:14
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
parce que je n'ai pas de fichier /etc/lsb-release
Et en sourçant /usr/lib/os-release (s’il existe) ?
Dans ce cas c’est VERSION_ID qui est à tester.
Ceci dit, ce bout de code ne concerne qu’Ubuntu, il faudrait alors tester aussi le nom de l’OS.
Sinon, le nom du modèle peut-être saisi en minuscules et du coup il n’y aura pas de driver trouvé.
Alors qu’il suffit de passer en lettres capitales :
…
#########################
# 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//-/}"
printerName="${printerName^^}"
…
Autre remarque : Brother propose un script d’installation. Attention Watael, ça pique les yeux ! Mais il a l’air de faire le job.
Alors je me demande si l’élaboration du présent script vaut la chandelle.
Hors ligne
#187 Hier à 14:09
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
${DISTRIB_RELEASE:-24} parce que je n'ai pas de fichier /etc/lsb-release, il me fallait donc une valeur par défaut.
if ((DISTRIB_RELEASE>=24)) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
Maôrche pô
Mais ça , oui :
if (( $(echo "$DISTRIB_RELEASE" | cut -c1-2) >=24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
+ diverses petites optimisation du code .
Et nouveau code eclairci de " $arch " :
#!/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
modelName="${modelName^^}"
printerName="${modelName//-/}"
#check IP
until test -n "$IP"
do
read -rp "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"
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 [[ $arch != @(i386|i686|x86_64) ]]
if [[ $arch != x86_64 ]]
then
errQuit "système non compatible."
fi
if ((EUID))
then
errQuit "vous devez lancer le script en root : sudo brprinter_install.sh "
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit le site "\"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- "$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
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')
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
if test -f /etc/lsb-release; then
. /etc/lsb-release
if (( $(echo "$DISTRIB_RELEASE" | cut -c1-2) >=24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
then
printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb"
fi
fi
else
err+=1
echo "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 [[ $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
#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 -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
EDIT ha , exact @nany .
je corrige donc .
Mais modelName aussi doit etre en majuscule pour que le fichier info soit trouvé et que ca fonctionne
Merci .
Dernière modification par iznobe (Hier à 14:18)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#188 Hier à 14:44
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Autre remarque : Brother propose un script d’installation. Attention Watael, ça pique les yeux ! Mais il a l’air de faire le job.
Alors je me demande si l’élaboration du présent script vaut la chandelle.
Effectivement .
D ' ailleurs , je trouve que le script de demonipuch et le script de brother se ressemblent beaucoup . Meme si celui de brother est plus étendu et complet avec des similitudes plutôt étonnantes et importantes .
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#189 Hier à 15:03
- eric63
Re : remise au gout du jour du script de demonipuch imprimante brother
le script de brother est en anglais
la plupart ne téléchargent que les paquets de l’imprimante et pas le script qui est peu compréhensible
Step1. Download the tool.(linux-brprinter-installer-*.*.*-*.gz)
The tool will be downloaded into the default "Download" directory.
(The directory location varies depending on your Linux distribution.)
e.g. /home/(LoginName)/DownloadStep2. Open a terminal window.
Step3. Go to the directory you downloaded the file to in the last step. By using the cd command.
e.g. cd Downloads
Step4. Enter this command to extract the downloaded file:
Command: gunzip linux-brprinter-installer-*.*.*-*.gz
e.g. gunzip linux-brprinter-installer-2.1.1-1.gz
Step5. Get superuser authorization with the "su" command or "sudo su" command.
Step6. Run the tool:
Command: bash linux-brprinter-installer-*.*.*-* Brother machine name
e.g. bash linux-brprinter-installer-2.1.1-1 MFC-J880DWStep7. The driver installation will start. Follow the installation screen directions.
When you see the message "Will you specify the DeviceURI ?",
For USB Users: Choose N(No)
For Network Users: Choose Y(Yes) and DeviceURI number.The install process may take some time. Please wait until it is complete.
perso pour un néophyte c’est peine perdue
le script de demonipuch est plus basique et accessible et en français
modèle imprimante
usb ou réseau
adresse IP
et un fichier de log
Dernière modification par eric63 (Hier à 15:06)
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
#190 Hier à 16:58
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
ahhhhh! mes yeux !
if [ "$(ls -al $ORGC 2> /dev/null | grep ^l | grep "$SYMLNC" )" != '' ]
Nooooon! mais pourquoi !?
Dernière modification par Watael (Hier à 17:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#191 Hier à 17:28
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
le script de brother est en anglais
la plupart ne téléchargent que les paquets de l’imprimante et pas le script qui est peu compréhensibleperso pour un néophyte c’est peine perdue
le script de demonipuch est plus basique et accessible et en français
modèle imprimante
usb ou réseau
adresse IP
et un fichier de log
ça c' etait avant !!!
Avant que Watael passe par là
on pourrait se contenter de faire :
la commande pour telecharger le script brother
et traduire ce qu ' ils racontent en anglais en francais . et donner les commandes .
C' est ce que j ' ai fait des dizaines de fois sur le forum , avant de me lancer dans la reprise du script de demonipuch d ' ailleurs , c' est vraiment simple
Mais bon , on a vu des personnes qui ne savait pas quoi choisir entre " reseau " ou " usb " ... quoi qu ' on fasse , tout sera trop compliqué pour ceux là sans assistanat .
Dernière modification par iznobe (Hier à 17:36)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#192 Hier à 17:43
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ahhhhh! mes yeux !
if [ "$(ls -al $ORGC 2> /dev/null | grep ^l | grep "$SYMLNC" )" != '' ]
Nooooon! mais pourquoi !?
j ' aurais plutot fait ça :
ELLE="^l"
if test -z [[ "$(ls -al "$ORGC" 2> /dev/null | grep "$ELLE" | grep "$SYMLNC" )" =='' ]]
histoire d' harmoniser les doubles quotes
Blague à part , tiens , justement , comment faire un
grep -E "machin & truc"
plutot que des piper les grep ?
on voit souvent des
grep -E "machin | truc"
mais rarement l' inverse ...
Dernière modification par iznobe (Hier à 20:20)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#193 Hier à 21:34
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Maôrche pô
Mais ça , oui :
if (( $(echo "$DISTRIB_RELEASE" | cut -c1-2) >=24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
(( ${DISTRIB_RELEASE:0:2} >= 24 ))
Mais on peut faire mieux avec des variables en début de script :
…
############################
# définitions de variables
############################
if test -f /etc/lsb-release; then
. /etc/lsb-release
elif test -f /usr/lib/os-release; then
. /usr/lib/os-release
fi
if test -n "$DISTRIB_ID"; then
DistroName="$DISTRIB_ID"
elif test -n "$NAME"; then
DistroName="$NAME"
fi
if test -n "$DISTRIB_RELEASE"; then
VersionYear="${DISTRIB_RELEASE:0:2}"
elif test -n "$VERSION_ID"; then
VersionYear="${VERSION_ID:0:2}"
fi
user="$SUDO_USER"
codeName="$(lsb_release -cs)" # n’est pas utilisée, pourrait être remplacée par :
#if test -n "$DISTRIB_CODENAME"; then
# codeName="$DISTRIB_CODENAME"
#elif test -n "$VERSION_CODENAME"; then
# codeName="$VERSION_CODENAME"
#fi
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
…
##########################
# quelques vérifications
##########################
if test "$DistroName" != "Ubuntu"
then
errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles."
fi
#if [[ $arch != @(i386|i686|x86_64) ]]
if test "$arch" != "x86_64"
then
errQuit "Système non compatible."
fi
if ((EUID))
then
errQuit "Vous devez lancer le script en root : sudo brprinter_install.sh" # Je mettrais plutôt sudo $0.
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit "le site \"brother.com\" n'est pas joignable."
fi
…
########################################################
# 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
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')
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
…
Hors ligne
#194 Hier à 21:35
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
ahhhhh! mes yeux !
if [ "$(ls -al $ORGC 2> /dev/null | grep ^l | grep "$SYMLNC" )" != '' ]
Nooooon! mais pourquoi !?
J’avais prévenu.
Hors ligne
#195 Hier à 22:05
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
Alors qu’il suffit de passer en lettres capitales :
c'est ce que fait declare -u
¿ une raison de ne pas faire
if test -f /etc/lsb-release
then
. /etc/lsb-release
DistroName="$DISTRIB_ID"
VersionYear="${DISTRIB_RELEASE::2}"
elif test -f /usr/lib/os-release
then
. /usr/lib/os-release
DistroName="$NAME"
VersionYear="${VERSION_ID::2}"
fi
?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#196 Hier à 22:46
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
nany a écrit :Alors qu’il suffit de passer en lettres capitales :
c'est ce que fait declare -u
Oups, j’avais pas fait gaffe !
¿ une raison de ne pas faire
if test -f /etc/lsb-release then . /etc/lsb-release DistroName="$DISTRIB_ID" VersionYear="${DISTRIB_RELEASE::2}" elif test -f /usr/lib/os-release then . /usr/lib/os-release DistroName="$NAME" VersionYear="${VERSION_ID::2}" fi
?
Aucune, je me suis compliqué la vie pour rien.
Bon ben je crois que j’ai plus qu’à aller me coucher.
Hors ligne
#197 Hier à 23:07
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Et avant de me coucher, je pose le script avec les dernières modifications.
#!/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
#########################
# 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 -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
#################
# 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 [[ $arch != @(i386|i686|x86_64) ]]
if test "$arch" != "x86_64"
then
errQuit "Système non compatible."
fi
if ((EUID))
then
errQuit "Vous devez lancer le script en root : sudo brprinter_install.sh" # Je mettrais plutôt sudo $0.
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit "le site \"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- "$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
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')
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
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 [[ $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
#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 -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
Hors ligne
#198 Aujourd'hui à 12:45
- freechelmi
Re : remise au gout du jour du script de demonipuch imprimante brother
Oui ce serait vraiment utile d'ajouter à l'outil :
- qu'il detecte l'imprimante connecté en USB ou sur réseau ( plus dur ) et installe le bon driver
- une petite interface graphique Zenity clic clic ( ça je peux faire )
Hors ligne
#199 Aujourd'hui à 13:00
- freechelmi
Re : remise au gout du jour du script de demonipuch imprimante brother
D'autre part ,
est ce que pour l'instant ce script apporte vraiment plus que l'outil de brother qui demande le modèle et installe les drivers ?
Hors ligne
#200 Aujourd'hui à 13:31
- eric63
Re : remise au gout du jour du script de demonipuch imprimante brother
l'outil de brother qui demande le modèle et installe les drivers ?
le script de brother ne fait pas que demander le modèle et basta: pour un néophyte c’est de la ligne de commande donc très obscur à priori
donc point 1 ouvrir un terminal puis lancer les commandes voir #189 à cette vue t’as perdu les 3/4 des gens
le script de demonipuch et d’iznobe va à l’essentiel vraiment
une petite interface graphique Zenity clic clic ( ça je peux faire )
heu n’oublie pas kde qui utilise kdialog au lieu de zenity
Dernière modification par eric63 (Aujourd'hui à 13:37)
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