#126 Hier à 21:02
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
j ' avais deja mis auparavant ( ls -R ) et re voilà :
iznobe@iznobe-pc:~$ cd /usr/share/cups/model; \ls -1
Brother
brother-MFCL2710DW-cups-en.ppd
re.ppd
iznobe@iznobe-pc:/usr/share/cups/model$ ls -R /usr/share/cups/model
/usr/share/cups/model:
Brother brother-MFCL2710DW-cups-en.ppd re.ppd
/usr/share/cups/model/Brother:
brother_dcpl3560cdw_printer_en.ppd
iznobe@iznobe-pc:/usr/share/cups/model$
je suis censé recuperé quoi dans la variable " PPDs " , un tableau des noms de fichiers comportant brother dans leur nom et .ppd à la fin si j ' ai bien compris ?
Mais il y a une erreur de syntaxe à priori ...
Avec le code donné :
if [[ -z "$Ppd_File" ]]; then
#regex="^brother.*\.ppd$"
shopt -s nullglob extglob
PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )
echo "${PPDs[*]}"
exit
j ' obtiens :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFCL-2710DW 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.074 ms
--- 192.168.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1019ms
rtt min/avg/max/mdev = 0.025/0.049/0.074/0.024 ms
...done.
Scripts/demonipuch.sh: ligne 361: erreur de syntaxe près du symbole inattendu « ( »
Scripts/demonipuch.sh: ligne 361: ` PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )'
iznobe@iznobe-pc:~$
j ' ai essayé avec des accolades ( dans tous les sens ) comme le suggere shellcheck et d ' encadré avec des doubles quotes , mais rien a faire .
ce qui est curieux , c' est que shellcheck ne remet pas la meme erreur que j' avais au depart ... comprend pas
Dernière modification par iznobe (Hier à 21:10)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#127 Hier à 21:07
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
il faut descendre sous Brother/ ?
j'ai recréé l'arborescence sous /tmp/
$ cd /tmp
$ \ls -1R usr/share/cups/model/
usr/share/cups/model/:
Brother
brother-MFCL2710DW-cups-en.ppd
re.ppd
usr/share/cups/model/Brother:
brother_dcpl3560cdw_printer_en.ppd
$ shopt -s extglob nullglob globstar
$ PPDs=( usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd )
$ printf '%s\n' "${PPDs[@]}"
usr/share/cups/model/Brother/brother_dcpl3560cdw_printer_en.ppd
usr/share/cups/model/brother-MFCL2710DW-cups-en.ppd
EDIT
/!\
oula! attends : j'ai oublié d'assigner les variables !
qu'utilises-tu pour Model_Name et Printer_Name ?
Dernière modification par Watael (Hier à 21:13)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#128 Hier à 21:12
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
a priori oui d' ou le " find à l' origine , puisque certains fichiers sont dans
/usr/share/cups/model/Brother :
/usr/share/cups/model/Brother:
brother_dcpl3560cdw_printer_en.ppd
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#129 Hier à 21:13
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
un truc est bizzare :
iznobe@iznobe-pc:~$ shopt -s extglob nullglob globstar
iznobe@iznobe-pc:~$ PPDs=( usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd )
iznobe@iznobe-pc:~$ printf '%s\n' "${PPDs[@]}"
iznobe@iznobe-pc:~$
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#130 Hier à 21:14
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
edit message précédent
Dernière modification par Watael (Hier à 21:15)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#131 Hier à 21:14
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
il me semble que les noms de variables sont OK , enfin je verifie et te dis ça .
oui , ca me parait correct :
while [[ -z "$Model_Name" ]]; do read -rp "Entrez votre modèle d' imprimante : " Model_Name;done
Model_Name=${Model_Name^^}
# Si le 2eme argument est vide on demande comment est connectée l'imprimante
while [[ -z "$Connection" ]]; do
read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
case $REPLY in
0)
Connection="USB"
;;
1)
Connection="Réseau"
log "Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe." "Red"
log "Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml" "Red"
;;
esac
done
# Si connection == reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# On transforme le nom de l'imprimante ( enleve le " - " )
Printer_Name="${Model_Name//-/}"
Dernière modification par iznobe (Hier à 21:16)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#132 Hier à 21:15
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
peut-être, mais, moi, je n'en ai pas mis, donc ça marche peut-être parce que les variables ne sont pas déclarées...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#133 Hier à 22:36
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
heu , admettons , mais alors pourquoi ? :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFCL-2710DW 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.074 ms
--- 192.168.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1019ms
rtt min/avg/max/mdev = 0.025/0.049/0.074/0.024 ms
...done.
Scripts/demonipuch.sh: ligne 361: erreur de syntaxe près du symbole inattendu « ( »
Scripts/demonipuch.sh: ligne 361: ` PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )'
iznobe@iznobe-pc:~$ shopt -s extglob nullglob globstar
iznobe@iznobe-pc:~$ PPDs=( usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd )
iznobe@iznobe-pc:~$ printf '%s\n' "${PPDs[@]}"
iznobe@iznobe-pc:~$ cat -n Scripts/demonipuch.sh | grep 361
361 PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )
iznobe@iznobe-pc:~$
Dernière modification par iznobe (Hier à 22:37)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#134 Hier à 22:52
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
on ne pourrait pas se servir de " du " ( qui fonctionne presque comme find ) ?
j ' ai trouvé ça , qui a l' air de fonctionner :
iznobe@iznobe-pc:~$ shopt -s nullglob globstar
for file in /usr/share/cups/model/**/*; do echo "trouvé $file"; done
trouvé /usr/share/cups/model/Brother
trouvé /usr/share/cups/model/Brother/brother_dcpl3560cdw_printer_en.ppd
trouvé /usr/share/cups/model/brother-MFCL2710DW-cups-en.ppd
trouvé /usr/share/cups/model/re.ppd
iznobe@iznobe-pc:~$
là : https://forum.ubuntu-fr.org/viewtopic.php?id=574651
Dernière modification par iznobe (Hier à 23:03)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#135 Hier à 23:00
- diesel
Re : remise au gout du jour du script de demonipuch imprimante brother
on ne pourrait pas se servir de " du " ( qui fonctionne presque comme find ) ?
du (disk usage) qui fonctionne "presque" comme find ???????
Amicalement.
Jean-Marie
Dernière modification par diesel (Hier à 23:00)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#136 Hier à 23:05
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
tu n'as peut-être pas configuré correctement les options du shell avec shopt...
et puis, ce que j'ai écrit correspond à l'arborescence que j'ai reconstruite sous /tmp
$ shopt -s extglob nullglob extglob
$ Printer_Name=MFCL-2710DW; Model_Name=MFCL2710DW
$ PPDs=( /tmp/usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd )
$ printf '%s\n' "${PPDs[@]}"
/tmp/usr/share/cups/model/brother-MFCL2710DW-cups-en.ppd
fichier trouvé !
Dernière modification par Watael (Hier à 23:05)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#137 Hier à 23:09
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
@diesel oui , sur certains points . il esst evident que son utilisation premiere est completement differente ...
bon , j' ai la regex qui va bien :
grep -E ^brother.*\.ppd$
la boucle qui va bien :
for file in /usr/share/cups/model/**/*
comment assembler les 2 pour obtenir le resultat desiré ?
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#138 Hier à 23:12
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
tu n'as peut-être pas configuré correctement les options du shell avec shopt...
et puis, ce que j'ai écrit correspond à l'arborescence que j'ai reconstruite sous /tmp$ shopt -s extglob nullglob extglob $ Printer_Name=MFCL-2710DW; Model_Name=MFCL2710DW $ PPDs=( /tmp/usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd ) $ printf '%s\n' "${PPDs[@]}" /tmp/usr/share/cups/model/brother-MFCL2710DW-cups-en.ppd
fichier trouvé !
ha , là , ça fonctionne :
iznobe@iznobe-pc:~$ shopt -s extglob nullglob extglob
iznobe@iznobe-pc:~$ Printer_Name=MFCL-2710DW; Model_Name=MFCL2710DW
iznobe@iznobe-pc:~$ PPDs=( /usr/share/cups/model/**/*brother*@($Model_Name|$Printer_Name)*.ppd )
iznobe@iznobe-pc:~$ printf '%s\n' "${PPDs[@]}"
/usr/share/cups/model/brother-MFCL2710DW-cups-en.ppd
iznobe@iznobe-pc:~$
mais , je sais pas pourquoi , il me donne cette erreur de syntaxe ...
voilà le script au complet , si jamais ( shellcheck lui , n ' emet aucune objection avec ce code ) :
#!/bin/bash
# Script d'installation pour imprimantes Brother
# ecrit par @demonipuch .
# re-ecrit par ubuntu team : https://forum.ubuntu-fr.org/viewtopic.php?id=2091835&p=2
# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...
if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
valid_ip() {
IFS='.' read -ra ip <<< "$1"
[[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}
control_ip() {
if [[ -n "$IP" ]]; then
if valid_ip "$IP"; then
if ping -c2 "$IP"; then log_action_end_msg 0
else
log "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
unset IP
log_action_end_msg 1
fi
else
log "L ' adresse IP que vous avez entrée est incorrecte"
unset IP
log_action_end_msg 1
fi
fi
}
install_pkg() {
for pkg do
log "Recherche du paquet : ' $pkg ' sur votre système"
if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
log_action_end_msg 0
else
echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
log_action_end_msg 1
log "Installation du paquet : ' $pkg ' sur votre système"
apt-get install -qq "$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_rep() {
for dir do
log "Recherche du dossier ' $dir ' sur votre système"
if [[ -d "$dir" ]]; then log_action_end_msg 0;
else
log_action_end_msg 1
log "Creation du dossier ' $dir '"
mkdir -pv "$dir" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_lien() { # utilisation : # verif_lien "lien" "cible" . affichage de ls -l ' lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible '
# Musique -> /datas/iznobe/Musique
# lien -> cible
lien=$1
cible=$2
log "Recherche du lien ' $lien ' sur votre système"
if ! test -L "$lien"; then
log_action_end_msg 1
log "Creation du lien ' $lien '"
ln -s "$cible" "$lien" &>> "$Logfile"
log_action_end_msg $?
else log_action_end_msg $?;
fi
}
log() {
message="$1"
if test -z "$2"; then
log_action_begin_msg "$message"
echo -e " - $message" &>> "$Logfile"
else
if test "$2" == "Blue"; then color="\\033[1;34m";fi
if test "$2" == "Red"; then color="\\033[1;31m";fi
echo -e "$color $message \\033[0;0m" # Resetcolor
echo -e "
# $message" &>> "$Logfile"
fi
}
Model_Name="$1"
if [ -n "$2" ]; then
IP="$2"
if control_ip "$IP"; then Connection="Réseau"; fi
fi
User="$SUDO_USER"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter_install.log"
#Logfile="/home/$User/brprinter_install.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
# 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"
declare -A printer
#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
# On vérifie qu'on lance le script en root
if ((EUID)); then log "Vous devez lancer ce script en tant que root : sudo bash $0" "Red"; exit 1;fi
if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then # && [[ $Arch != "armv7l" ]]
log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
exit 2
fi
# on verifie la connection au serveur
if ! nc -z -w5 'brother.com' 80; then
log "serveur brother injoignable ! script interrompu." "Red"
log "Veuillez verifier votre connexion internet." "Red"
exit 3
fi
# Si le premier argument est vide on demande le modèle de l'imprimante
while [[ -z "$Model_Name" ]]; do read -rp "Entrez votre modèle d' imprimante : " Model_Name;done
Model_Name=${Model_Name^^}
# Si le 2eme argument est vide on demande comment est connectée l'imprimante
while [[ -z "$Connection" ]]; do
read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
case $REPLY in
0)
Connection="USB"
;;
1)
Connection="Réseau"
log "Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe." "Red"
log "Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml" "Red"
;;
esac
done
# Si connection == reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# On transforme le nom de l'imprimante ( enleve le " - " )
Printer_Name="${Model_Name//-/}"
# On construit l'URL du fichier contenant les informations
Printer_Url_Info="$Url_Info/$Printer_Name"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$Printer_Name""_us_eu_as"
# resumé pour logfile
log " $date
# Ubuntu Codename : $Codename
# Architecture : $Arch
# Modèle de l'imprimante : $Model_Name
# Type de connexion : $Connection
# Adresse IP : $IP
# Repertoire courant : $Temp_Dir
# Repertoire de telechargement des pilotes : $Temp_Dir
# Fichier d'informations : $Printer_Url_Info
# page de telechargement des pilotes : $Printer_dl_url" "Blue"
log "initialisation du script." "Blue"
# on cree le repertoire temporaire de travail.
verif_rep "$Temp_Dir"
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
wget -q "$Printer_Url_Info" -O "$Printer_Info"
#while IFS='=' read -r k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')
log_action_end_msg $?
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
#if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : $Printer_dl_url
afin de télécharger les pilotes et les installer manuellement." "Red"
exit 2
fi
# ???????? pas compris a quoi sert ce controle , ni quelles infos il est censé recuperé . peut etre certaines URL comporte des liens vers d' autres pages
#if test -n "${printer[LNK]}"; then Printer_Url_Info="$Url_Info/${printer[LNK]}";log "LNK = ${printer[LNK]}" "Red";fi
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
}
###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
log "Vérification des pré-requis" "Blue"
log "Mise à jour de la liste des paquets"
apt-get update -qq
log_action_end_msg $?
# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
log "installation des paquets requis"
if ! install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "gawk"; then
log "impossible d' installer les paquets indispensables" "Red"
exit 4
else
log_action_end_msg $?
fi
# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
if [[ -n $Scanner_Deb ]]; then install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"; fi
# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
if [[ "$Model_Name" == "$i" ]]; then install_pkg "csh"; fi
done
# On vérifie que le dossier de téléchargement temporaire et /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
verif_rep "/usr/share/cups/model" "/var/spool/lpd"
# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
if [[ "$Model_Name" == "$i" ]]; then verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"; # verif_lien "lien" "cible" 'lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible'
# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
if [[ -L /sbin/init ]]; then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service" # ' lien : /lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service: cible'
systemd daemon-reload
fi
fi
done
echo "" &>> "$Logfile"
}
##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
log "Recherche des pilotes" "Blue"
log "Recherche des pilotes pour l' imprimante"
printer=(
[prn_lpd]="$(grep PRN_LPD_DEB "$Printer_Info" | cut -d= -f2)"
[prn_cups]="$(grep PRN_CUP_DEB "$Printer_Info" | cut -d= -f2)"
[prn_drv]="$(grep PRN_DRV_DEB "$Printer_Info" | cut -d= -f2)"
)
log_action_end_msg $?
Scanner_Deb=$(grep SCANNER_DRV "$Printer_Info" | cut -d= -f2)
if test -n "$Scanner_Deb"; then
printer+=(
[udev_rules]="$Udev_Deb_Name"
)
log "Recherche des pilotes pour le scanner"
Scankey_Deb=$(grep SCANKEY_DRV "$Printer_Info" | cut -d= -f2)
Scanner_Url_Info="$Url_Info/$Scanner_Deb.lnk"
Scankey_Url_Info="$Url_Info/$Scankey_Deb.lnk"
echo " - Scanner infos :
$Scanner_Url_Info
$Scankey_Url_Info" &>> "$Logfile"
Scanner_Info="$Temp_Dir/Scanner_Url_Info.html"
wget -q "$Scanner_Url_Info" -O "$Scanner_Info"
Scankey_Info="$Temp_Dir/Scankey_Url_Info.html"
wget -q "$Scankey_Url_Info" -O "$Scankey_Info"
# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
case "$Arch" in
i386|i686)
printer+=(
[scanner_drv]="$(grep DEB32 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB32 "$Scankey_Info" | cut -d= -f2)"
)
log_action_end_msg 0
;;
x86_64)
printer+=(
[scanner_drv]="$(grep DEB64 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB64 "$Scankey_Info" | cut -d= -f2)"
)
# pour ubuntu 24.04 et superieurs
if [[ $(grep DISTRIB_RELEASE= /etc/lsb*release | cut -d= -f2 | cut -c1-2) -ge 24 ]]; then
if test "${printer[scanKey_drv]}" = "brscan-skey-0.3.2-0.amd64.deb"; then printer[scanKey_drv]="$Scankey_Drv_Deb_Name";fi
fi
log_action_end_msg 0
;;
*)
log "Architecture inconnue: $Arch" "Red"
;;
esac
else
log "Pas de scanner détecté" "Red"
log_action_end_msg 1
fi
log "Téléchargement des pilotes" "Blue"
for pkg in "${printer[@]}"; do
# On ajoute la liste des pilotes trouvés au fichier de journalisation
if test -n "$pkg"; then
echo " - Paquet trouvé : $pkg" &>> "$Logfile"
# On télécharge les pilotes trouvés si ils ne le sont pas deja
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb="$Url_Pkg"/"$pkg"
# le paquet 'udev-rules' est situé a un autre emplacement
if test "$pkg" == "${printer[udev_rules]}"; then Url_Deb="$Udev_Deb_Url"/"$pkg"; fi
log "Téléchargement du paquet : $pkg"
wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb2="$Url_Pkg2"/"$pkg"
wget -cP "$Temp_Dir" "$Url_Deb2" &>> "$Logfile"
fi
log_action_end_msg $?
else
log "Le paquet : $pkg a deja été telechargé"
log_action_end_msg 0
fi
fi
done
}
############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
log "Installation des pilotes" "Blue"
for pkg in "${printer[@]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
log "Installation du paquet : $pkg"
dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
echo "" &>> "$Logfile"
}
#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
log "Configuration de l'imprimante" "Blue"
log "Recherche d'un fichier PPD sur votre système"
for pkg in "${printer[prn_cups]}" "${printer[prn_drv]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | gawk '/ppd/{sub(".","",$NF); print $NF}')
log_action_end_msg 0;
fi
done
if [[ -z "$Ppd_File" ]]; then
#regex="^brother.*\.ppd$"
shopt -s nullglob extglob
PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )
echo "${PPDs[*]}"
exit
# for file in "${PPDs[@]}"; do
# if [[ "$file" =~ $regex ]]; then
# Ppd_File="${BASH_REMATCH[0]}"
# echo " - Fichier PPD : ' $Ppd_File ' trouvé" &>> "$Logfile"
# log_action_end_msg 0;
# else
# echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
# log_action_end_msg 1
# fi
# done
fi
# On ajoute la nouvelle imprimante
log "Ajout de l'imprimante $Model_Name"
{
echo " - Backup du fichier /etc/cups/printers.conf.O"
cp /etc/cups/printers.conf.O "$Temp_Dir"
echo " - Arret du service CUPS"
echo " - Restauration du fichier printers.conf"
systemctl stop cups
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf
echo " - Redémarrage du service CUPS"
systemctl restart cups
sleep 1
} &>> "$Logfile"
case "$Connection" in
"USB")
lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File" &>> "$Logfile"
;;
"Réseau")
lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File" &>> "$Logfile"
;;
esac
log_action_end_msg $?
{
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf.O
echo " - Restauration du fichier printers.conf.O"
echo ""
} &>> "$Logfile"
}
############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
log "Configuration du scanner" "Blue"
if [[ -n "$Scanner_Deb" ]]; then
if [[ $Connection == "USB" ]]; then
log "Configuration du scanner USB"
# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
log_action_end_msg $?
echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"
else
# ?????????? n ' ajoute pas la regle correctement .
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
log_action_end_msg $?
echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
# On recharge les règles udev
# udevadm control --reload
udevadm control --reload-rules
fi
elif [[ $Connection == "Réseau" ]]; then
log "Configuration du scanner réseau"
if [[ -x /usr/bin/brsaneconfig ]]; then
brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig2 ]]; then
brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig3 ]]; then
brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig4 ]]; then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig5 ]]; then
# ??????????????
brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
fi
fi
# On copie les bibliotheques
if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
if [[ -e /usr/bin/brsaneconfig ]]; then cd "$Lib_Dir" || exit;
log "Copie des bibliotheques nécessaires brsaneconfig"
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$Lib_Dir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig2 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig2"
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig3 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig3"
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig4 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig4"
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig5 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig5"
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
log_action_end_msg 0
else
log_action_end_msg 1
log "No config binary found." "Red"
fi
fi
fi
echo "" &>> "$Logfile"
}
#################
# FIN DU SCRIPT #
#################
do_clean() {
cd || exit
# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
chown -R "$User": "$Temp_Dir" "$Logfile"
log "Configuration de votre imprimante Brother $Model_Name terminée. Bye :D" "Blue"
log "Vous pouvez supprimer le dossier $Temp_Dir avec la commande suivante : rm -r $Temp_Dir" "Blue"
exit 0
}
do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean
shellcheck:
$ shellcheck myscript
Line 10:
if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
^-- SC1091 (info): Not following: /lib/lsb/init-functions was not specified as input (see shellcheck -x).
$
et pourtant :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFCL-2710DW 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.069 ms
--- 192.168.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1047ms
rtt min/avg/max/mdev = 0.024/0.046/0.069/0.022 ms
...done.
Scripts/demonipuch.sh: ligne 364: erreur de syntaxe près du symbole inattendu « ( »
Scripts/demonipuch.sh: ligne 364: ` PPDs=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )'
iznobe@iznobe-pc:~$
j ' ai certainement fait un truc qu ' il ne fallait pas , mais je ne vois pas quoi , depuis hier au soir , je n' ai pas fait de modif ( ou tres peu ) ...
Dernière modification par iznobe (Hier à 23:17)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#139 Hier à 23:27
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
En fait le soucis , c' est la 2eme parenthese ouverte de la ligne .
si je met à la place :
PPDs=(/usr/share/cups/model/**/*brother*@$Model_Name*.ppd)
plus de soucis
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#140 Hier à 23:29
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
je ne vois pas pourquoi.
sors le shopt de la fonction pour le placer sous le shebang.
bizarre.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#141 Hier à 23:30
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
En fait le soucis , c' est la 2eme parenthese ouverte de la ligne .
si je met à la place :
PPDs=(/usr/share/cups/model/**/*brother*@$Model_Name*.ppd)
plus de soucis
ça n'a plus du tout la même signification.
les parenthèses après le @ font partie de la syntaxe des extglobs
n'oublie pas, si tu utilises les doubles astériques, il faut positionner globstar
Dernière modification par Watael (Hier à 23:33)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#142 Hier à 23:39
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
erreur de syntaxe près du symbole inattendu « ( »
on obtient cette erreur quand extglob n'est pas positionné.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#143 Hier à 23:41
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
pour que ce soit clair , en premiere ligne de script je met :
shopt -s nullglob ?????????????
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#144 Aujourd'hui à 00:13
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
#!/bin/bash
shopt -s nullglob globstar extglob
#...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#145 Aujourd'hui à 00:29
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
le nouveau code :
#!/bin/bash
# Script d'installation pour imprimantes Brother
# ecrit par @demonipuch .
# re-ecrit par ubuntu team : https://forum.ubuntu-fr.org/viewtopic.php?id=2091835&p=2
# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...
if test -f /lib/lsb/init-functions; then . /lib/lsb/init-functions;fi
shopt -s nullglob globstar extglob
valid_ip() {
IFS='.' read -ra ip <<< "$1"
[[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}
control_ip() {
if [[ -n "$IP" ]]; then
if valid_ip "$IP"; then
if ping -q -c2 "$IP"; then log_action_end_msg 0
else
log "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
unset IP
log_action_end_msg 1
fi
else
log "L ' adresse IP que vous avez entrée est incorrecte"
unset IP
log_action_end_msg 1
fi
fi
}
install_pkg() {
for pkg do
log "Recherche du paquet : ' $pkg ' sur votre système"
if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
log_action_end_msg 0
else
echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
log_action_end_msg 1
log "Installation du paquet : ' $pkg ' sur votre système"
apt-get install -qq "$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_rep() {
for dir do
log "Recherche du dossier ' $dir ' sur votre système"
if [[ -d "$dir" ]]; then log_action_end_msg 0;
else
log_action_end_msg 1
log "Creation du dossier ' $dir '"
mkdir -pv "$dir" &>> "$Logfile"
log_action_end_msg $?
fi
done
}
verif_lien() { # utilisation : # verif_lien "lien" "cible" . affichage de ls -l ' lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible '
# Musique -> /datas/iznobe/Musique
# lien -> cible
lien=$1
cible=$2
log "Recherche du lien ' $lien ' sur votre système"
if ! test -L "$lien"; then
log_action_end_msg 1
log "Creation du lien ' $lien '"
ln -s "$cible" "$lien" &>> "$Logfile"
log_action_end_msg $?
else log_action_end_msg $?;
fi
}
log() {
message="$1"
if test -z "$2"; then
log_action_begin_msg "$message"
echo -e " - $message" &>> "$Logfile"
else
if test "$2" == "Blue"; then color="\\033[1;34m";fi
if test "$2" == "Red"; then color="\\033[1;31m";fi
echo -e "$color $message \\033[0;0m" # Resetcolor
echo -e "
# $message" &>> "$Logfile"
fi
}
Model_Name="$1"
if [ -n "$2" ]; then
IP="$2"
if control_ip "$IP"; then Connection="Réseau"; fi
fi
User="$SUDO_USER"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter_install.log"
#Logfile="/home/$User/brprinter_install.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
# 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"
declare -A printer
#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
# On vérifie qu'on lance le script en root
if ((EUID)); then log "Vous devez lancer ce script en tant que root : sudo bash $0" "Red"; exit 1;fi
if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then # && [[ $Arch != "armv7l" ]]
log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
exit 2
fi
# on verifie la connection au serveur
if ! nc -z -w5 'brother.com' 80; then
log "serveur brother injoignable ! script interrompu." "Red"
log "Veuillez verifier votre connexion internet." "Red"
exit 3
fi
# Si le premier argument est vide on demande le modèle de l'imprimante
while [[ -z "$Model_Name" ]]; do read -rp "Entrez votre modèle d' imprimante : " Model_Name;done
Model_Name=${Model_Name^^}
# Si le 2eme argument est vide on demande comment est connectée l'imprimante
while [[ -z "$Connection" ]]; do
read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
case $REPLY in
0)
Connection="USB"
;;
1)
Connection="Réseau"
log "Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe." "Red"
log "Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml" "Red"
;;
esac
done
# Si connection == reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# On transforme le nom de l'imprimante ( enleve le " - " )
Printer_Name="${Model_Name//-/}"
# On construit l'URL du fichier contenant les informations
Printer_Url_Info="$Url_Info/$Printer_Name"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$Printer_Name""_us_eu_as"
# resumé pour logfile
log " $date
# Ubuntu Codename : $Codename
# Architecture : $Arch
# Modèle de l'imprimante : $Model_Name
# Type de connexion : $Connection
# Adresse IP : $IP
# Repertoire courant : $Temp_Dir
# Repertoire de telechargement des pilotes : $Temp_Dir
# Fichier d'informations : $Printer_Url_Info
# page de telechargement des pilotes : $Printer_dl_url" "Blue"
log "initialisation du script." "Blue"
# on cree le repertoire temporaire de travail.
verif_rep "$Temp_Dir"
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
wget -q "$Printer_Url_Info" -O "$Printer_Info"
#while IFS='=' read -r k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')
log_action_end_msg $?
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
#if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : $Printer_dl_url
afin de télécharger les pilotes et les installer manuellement." "Red"
exit 2
fi
# ???????? pas compris a quoi sert ce controle , ni quelles infos il est censé recuperé . peut etre certaines URL comporte des liens vers d' autres pages
#if test -n "${printer[LNK]}"; then Printer_Url_Info="$Url_Info/${printer[LNK]}";log "LNK = ${printer[LNK]}" "Red";fi
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
}
###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
log "Vérification des pré-requis" "Blue"
log "Mise à jour de la liste des paquets"
apt-get update -qq
log_action_end_msg $?
# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
log "installation des paquets requis"
if ! install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "gawk"; then
log "impossible d' installer les paquets indispensables" "Red"
exit 4
fi
# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
if [[ -n $Scanner_Deb ]]; then install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"; fi
# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
if [[ "$Model_Name" == "$i" ]]; then install_pkg "csh"; fi
done
# On vérifie que le dossier de téléchargement temporaire et /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
verif_rep "/usr/share/cups/model" "/var/spool/lpd"
# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
for i in DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
if [[ "$Model_Name" == "$i" ]]; then verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"; # verif_lien "lien" "cible" 'lien : /etc/init.d/lpd ~> /etc/init.d/cups : cible'
# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
if [[ -L /sbin/init ]]; then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service" # ' lien : /lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service: cible'
systemd daemon-reload
fi
fi
done
echo "" &>> "$Logfile"
}
##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
log "Recherche des pilotes" "Blue"
log "Recherche des pilotes pour l' imprimante"
printer=(
[prn_lpd]="$(grep PRN_LPD_DEB "$Printer_Info" | cut -d= -f2)"
[prn_cups]="$(grep PRN_CUP_DEB "$Printer_Info" | cut -d= -f2)"
[prn_drv]="$(grep PRN_DRV_DEB "$Printer_Info" | cut -d= -f2)"
)
log_action_end_msg $?
Scanner_Deb=$(grep SCANNER_DRV "$Printer_Info" | cut -d= -f2)
if test -n "$Scanner_Deb"; then
printer+=(
[udev_rules]="$Udev_Deb_Name"
)
log "Recherche des pilotes pour le scanner"
Scankey_Deb=$(grep SCANKEY_DRV "$Printer_Info" | cut -d= -f2)
Scanner_Url_Info="$Url_Info/$Scanner_Deb.lnk"
Scankey_Url_Info="$Url_Info/$Scankey_Deb.lnk"
echo " - Scanner infos :
$Scanner_Url_Info
$Scankey_Url_Info" &>> "$Logfile"
Scanner_Info="$Temp_Dir/Scanner_Url_Info.html"
wget -q "$Scanner_Url_Info" -O "$Scanner_Info"
Scankey_Info="$Temp_Dir/Scankey_Url_Info.html"
wget -q "$Scankey_Url_Info" -O "$Scankey_Info"
# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
case "$Arch" in
i386|i686)
printer+=(
[scanner_drv]="$(grep DEB32 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB32 "$Scankey_Info" | cut -d= -f2)"
)
log_action_end_msg 0
;;
x86_64)
printer+=(
[scanner_drv]="$(grep DEB64 "$Scanner_Info" | cut -d= -f2)"
[scanKey_drv]="$(grep DEB64 "$Scankey_Info" | cut -d= -f2)"
)
# pour ubuntu 24.04 et superieurs
if [[ $(grep DISTRIB_RELEASE= /etc/lsb*release | cut -d= -f2 | cut -c1-2) -ge 24 ]]; then
if test "${printer[scanKey_drv]}" = "brscan-skey-0.3.2-0.amd64.deb"; then printer[scanKey_drv]="$Scankey_Drv_Deb_Name";fi
fi
log_action_end_msg 0
;;
*)
log "Architecture inconnue: $Arch" "Red"
;;
esac
else
log "Pas de scanner détecté" "Red"
log_action_end_msg 1
fi
log "Téléchargement des pilotes" "Blue"
for pkg in "${printer[@]}"; do
# On ajoute la liste des pilotes trouvés au fichier de journalisation
if test -n "$pkg"; then
echo " - Paquet trouvé : $pkg" &>> "$Logfile"
# On télécharge les pilotes trouvés si ils ne le sont pas deja
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb="$Url_Pkg"/"$pkg"
# le paquet 'udev-rules' est situé a un autre emplacement
if test "$pkg" == "${printer[udev_rules]}"; then Url_Deb="$Udev_Deb_Url"/"$pkg"; fi
log "Téléchargement du paquet : $pkg"
wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
Url_Deb2="$Url_Pkg2"/"$pkg"
wget -cP "$Temp_Dir" "$Url_Deb2" &>> "$Logfile"
fi
log_action_end_msg $?
else
log "Le paquet : $pkg a deja été telechargé"
log_action_end_msg 0
fi
fi
done
}
############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
log "Installation des pilotes" "Blue"
for pkg in "${printer[@]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
log "Installation du paquet : $pkg"
dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
log_action_end_msg $?
fi
done
echo "" &>> "$Logfile"
}
#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
log "Configuration de l'imprimante" "Blue"
log "Recherche d'un fichier PPD sur votre système"
for pkg in "${printer[prn_cups]}" "${printer[prn_drv]}"; do
if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | gawk '/ppd/{sub(".","",$NF); print $NF}')
fi
done
if test -z "$Ppd_File"; then
for file in /usr/share/cups/model/**/brother*@($Model_Name|$Printer_Name)*.ppd; do Ppd_File="$file";done
fi
if test -n "$Ppd_File"; then
log_action_end_msg 0
echo " - Fichier PPD : ' $Ppd_File ' trouvé" &>> "$Logfile"
else
echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
log_action_end_msg 1
fi
# On ajoute la nouvelle imprimante
log "Ajout de l'imprimante $Model_Name"
{
echo " - Backup du fichier /etc/cups/printers.conf.O"
cp /etc/cups/printers.conf.O "$Temp_Dir"
echo " - Arret du service CUPS"
echo " - Restauration du fichier printers.conf"
systemctl stop cups
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf
echo " - Redémarrage du service CUPS"
systemctl restart cups
sleep 1
} &>> "$Logfile"
case "$Connection" in
"USB")
lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File" &>> "$Logfile"
;;
"Réseau")
lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File" &>> "$Logfile"
;;
esac
log_action_end_msg $?
{
cp "$Temp_Dir"/printers.conf.O /etc/cups/printers.conf.O
echo " - Restauration du fichier printers.conf.O"
echo ""
} &>> "$Logfile"
}
############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
log "Configuration du scanner" "Blue"
if [[ -n "$Scanner_Deb" ]]; then
if [[ $Connection == "USB" ]]; then
log "Configuration du scanner USB"
# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
log_action_end_msg $?
echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"
else
# ?????????? n ' ajoute pas la regle correctement .
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
log_action_end_msg $?
echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
# On recharge les règles udev
# udevadm control --reload
udevadm control --reload-rules
fi
elif [[ $Connection == "Réseau" ]]; then
log "Configuration du scanner réseau"
if [[ -x /usr/bin/brsaneconfig ]]; then
brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig2 ]]; then
brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig3 ]]; then
brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig4 ]]; then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
elif [[ -x /usr/bin/brsaneconfig5 ]]; then
# ??????????????
brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
log_action_end_msg $?
fi
fi
# On copie les bibliotheques
if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
if [[ -e /usr/bin/brsaneconfig ]]; then cd "$Lib_Dir" || exit;
log "Copie des bibliotheques nécessaires brsaneconfig"
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$Lib_Dir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig2 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig2"
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig3 ]]; then cd "$Lib_Dir" || exit
log "Copie des bibliotheques nécessaires brsaneconfig3"
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$Lib_Dir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig4 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig4"
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
log_action_end_msg 0
elif [[ -e /usr/bin/brsaneconfig5 ]]; then cd "$Lib_Dir"/sane || exit
log "Copie des bibliotheques nécessaires brsaneconfig5"
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
log_action_end_msg 0
else
log_action_end_msg 1
log "No config binary found." "Red"
fi
fi
fi
echo "" &>> "$Logfile"
}
#################
# FIN DU SCRIPT #
#################
do_clean() {
cd || exit
# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
chown -R "$User": "$Temp_Dir" "$Logfile"
log "Configuration de votre imprimante Brother $Model_Name terminée. Bye :D" "Blue"
log "Vous pouvez supprimer le dossier $Temp_Dir avec la commande suivante : rm -r $Temp_Dir" "Blue"
exit 0
}
do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean
Dernière modification par iznobe (Aujourd'hui à 00:36)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#146 Aujourd'hui à 00:42
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
for file in /usr/share/cups/model/**/brother*@($Model_Name|$Printer_Name)*.ppd; do Ppd_File="$file";done
comme ça, ça passe ?
et avec l'assignation directe du tableau, t'as réessayé ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#147 Aujourd'hui à 06:30
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
et t'as de l'aspirine aussi ?
#!/bin/bash
# > 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 ((err)) && ! ping -c2 "$IP"
then
err=0
unset IP
fi
done
#################
# infos Brother
#################
Url_Info="http://www.brother.com/pub/bsc/linux/infs"
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages/"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
printerInf="$Url_Info/$printerName"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=""$printerName""_us_eu_as"
######################
# quelques fonctions
######################
errQuit()
{
>&2 echo "$@"
exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
local lien=$1 cible=$2
if ! test -L "$lien"
then
ln -s "$cible" "$lien"
fi
}
install_pkg()
{
for pkg do
if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
then
apt-get install -qq "$pkg"
fi
done
}
##########################
# quelques vérifications
##########################
if [[ $arch != @(i386|i686|x86_64) ]]
then
errQuit "système non compatible."
fi
if ((EUID))
then
errQuit "must be root."
fi
if ! nc -z -w5 'brother.com' 80
then
errQuit "\"brother.com\" n'est pas joignable"
fi
##################################################
# initialisation du tableau associatif `printer'
##################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInf" | sed '/\(]\|rpm\|=\)$/d')
########################################################
# vérification de variables disponibles dans `printer'
########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
errQuit "les données du fichier .inf et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInf="$Url_Info/${printer[LNK]}"
fi
if test -n "${printer[SCANNER_DRV]}"
then
printer[udev_rules]="$Udev_Deb_Name"
. <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
. <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
case $arch in
i[36]86)
printer[SCANNER_DRV]="$scanner_DEB32"
printer[SCANKEY_DRV]="$scanKey_DEB32"
;;
x86_64)
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
. /etc/lsb-release #TODO: test file exists
if [[ ${DISTRIB_RELEASE:-24} =~ ^24 && ${printer[SCANKEY_DRV]} = brscan-skey-0.3.2-0.amd64.deb ]]
then
printer[SCANKEY_DRV]="brscan-skey-0.3.4-0.amd64.deb" #mais pourquoi Brother ne donnent-ils pas la bonne info ?
fi
;;
esac
else
errQuit "pas de pilote pour le scanner."
fi
##########################
# préparation du système
##########################
if test -f "$Logfile"
then
mv -v "$Logfile" "$Logfile.$date"
fi
for d in "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
if ! test -d "$d"
then
mkdir -pv "$d"
fi
done
apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
for i in DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
if test "$i" = "$modelName"
then
install_pkg "csh"
fi
done
for i in \
DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
FAX-{2{850,900},3800,4{100,750e},5750e} \
HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
if test "$i" = "$modelName"
then
verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
if test -L /sbin/init
then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
systemd daemon-reload
fi
fi
done
##
##############################
# téléchargement des pilotes
##############################
for drv in "${printer[@]}"
do
for addr in "$Url_Pkg" "$Url2_Pkg"
do
if ! test -f "$tmpDir/$drv"
then
Url_Deb="$addr/$drv"
if test "$drv" = "${printer[udev_rules]}"
then
Url_Deb="$Udev_Deb_Url/$drv"
fi
wget -cP "$tmpDir" "$Url_Deb"
else
break
fi
done
pkg2install+=( "$tmpDir/$drv" )
done
#installation des pilotes
dpkg --install --force-all "${pkg2install[@]}"
##
#################################
# configuration de l'imprimante
#################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in PRN_CUPS PRN_DRV
do
pkg=${printer[$drv]}
if test -n "$pkg" -a -f "$tmpDir/$pkg"
then
while read -d '' fileName
do
PPDs+=( "$fileName" )
done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"; /ppd/{sub(".","",$NF); print $NF}')
fi
done
if test -z "$Ppd_File"
then
PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
0) errQuit "no ppd"
;;
1) : echo one ppd
;;
*) errQuit "more than one ppd" # et s'il y en a plusieurs, y en a-t-il un à privilégier ?
;;
esac
#sauvegarde fichier conf.0 (n'existe pas chez moi)
cp /etc/cups/printers.conf.O "$tmpDir"
systemctl stop cups
if test -n "$IP"
then
lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi
#restauration fichier conf
cp "$tmpDir/printers.conf.O" /etc/cups/printers.conf
systemctl restart cups
sleep 1
############################
# configuration du scanner
############################
if test -z "ÎP"
then #USB
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
then
echo " - Règle udev deja presente dans le fichier $Udev_Rules"
else
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
udevadm control --reload-rules
fi
else #network
for saneConf in /usr/bin/brsaneconfig{,{2..5}}
do
test -x "$saneConf" && cmd=$saneConf
done
if test -z "$cmd"
then
errQuit "no brsaneconfig found."
elif test "$cmd" = '/usr/bin/brsaneconfig4'
then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
fi
$cmd -a name=SCANNER model="$modelName" ip="$IP"
fi
if test "$arch" = "x86_64" -a -d "$libDir"
then
case $cmd in
/usr/bin/brsaneconfig)
cd "$libDir" || exit;
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
;;
/usr/bin/brsaneconfig2)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
;;
/usr/bin/brsaneconfig3)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
;;
/usr/bin/brsaneconfig4)
cd "$libDir"/sane || exit
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
;;
/usr/bin/brsaneconfig5)
cd "$libDir"/sane || exit
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
;;
esac
fi
je serais très surpris que ça fonctionne sans correction, mais je ne peux pas le tester en entier.
Dernière modification par Watael (Aujourd'hui à 15:56)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#148 Aujourd'hui à 13:04
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
for file in /usr/share/cups/model/**/brother*@($Model_Name|$Printer_Name)*.ppd; do Ppd_File="$file";done
comme ça, ça passe ?
et avec l'assignation directe du tableau, t'as réessayé ?
Salut , les 2 passes , depuis que , j ' ai modifié :
shopt -s nullglob extglob
en
shopt -s nullglob globstar extglob
mais je vois pas l ' interet de creer un tableau , surtout qu ' on ne peut a priori utiliser qu ' un seul fichier ppd ( enfin je pense , pas verifié ).
Pour l' aspirine , ma femme ma deja fait epuisé le stock
je vais tout de meme jeter un coup d' oeil , sachant que je dois rester " à mon niveau " , si je veux pouvoir maintenir le script au fil du temps .
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#149 Aujourd'hui à 13:11
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
if ((err)) && ! ping -c2 "$IP" then err=0 unset IP fi
il ne faudrait pas plutot un " || " dans la condition ? si erreur ou pas de ping ...
--------------------------------------------
shift
kezako ??
--------------------------------------------
do for addr in "$Url_Pkg" "$Url2_Pkg" do if ! test -f "$tmpDir/$drv" then Url_Deb="$addr/$drv" if test "$drv" = "${printer[udev_rules]}" then Url_Deb="$Udev_Deb_Url/$drv" fi wget -cP "$tmpDir" "$Url_Deb" else break fi done pkg2install+=( "$tmpDir/$drv" ) done
un " break " casse la boucle . un continue , saute et passe au suivant sans interrompre la boucle non ?
d' ailleurs dans un cas comme dans l' autre , break / continue , je ne suis pas certain que ce soit utile , ne rien faire du tout , et passez au suivant , ne me parait pas plus mal
ou encore , vu que le fichier est présent sur le disque , carrément l' installer directement . et supprimer le tableau pkg2install .
Dernière modification par iznobe (Aujourd'hui à 13:38)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
En ligne
#150 Aujourd'hui à 15:55
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
shift décale les paramètres positionnels.
mais, là, c'est une erreur, parce que shift décale "par la gauche", il faut en fait décaler tous les arguments pour que $2 ne soit plus disponible.
je corrige shift $# pour décaler tous les paramètres positionnels.
il ne faudrait pas plutot un " || " dans la condition ? si erreur ou pas de ping ...
pour le diagnostic, il faudrait même "désolidariser" les deux tests : ip non valide, ou (en effet) noPing).
ne rien faire du tout , et passez au suivant , ne me parait pas plus mal
si la première URL fonctionne, il n'y a pas besoin de (il ne faut pas) faire un second tour.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne