#176 Hier à 19:47
- xubu1957
Re : remise au gout du jour du script de demonipuch imprimante brother
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
Hors ligne
#177 Hier à 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.
En ligne
#178 Hier à 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 Hier à 21:49
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
trop la flemme.
:shocked:
En ligne
#180 Hier à 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 .
En ligne
#181 Hier à 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 (Hier à 22:39)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#182 Aujourd'hui à 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 .
En ligne
#183 Aujourd'hui à 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.
En ligne
#184 Aujourd'hui à 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 (Aujourd'hui à 08:51)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#185 Aujourd'hui à 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 (Aujourd'hui à 12:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#186 Aujourd'hui à 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.
En ligne
#187 Aujourd'hui à 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 (Aujourd'hui à 14:18)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#188 Aujourd'hui à 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 .
En ligne
#189 Aujourd'hui à 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 (Aujourd'hui à 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 Aujourd'hui à 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 (Aujourd'hui à 17:01)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#191 Aujourd'hui à 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 (Aujourd'hui à 17:36)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#192 Aujourd'hui à 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 (Aujourd'hui à 20:20)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#193 Aujourd'hui à 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
…
En ligne
#194 Aujourd'hui à 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.
En ligne
#195 Aujourd'hui à 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 Aujourd'hui à 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.
En ligne
#197 Aujourd'hui à 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
En ligne