#101 Hier à 17:20
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
modif : automatisation de l'initialisation du tableau associatif printer :
# Rappel des variables utilisées
modelName=DCP1610W
Udev_Deb_Name='brother-udev-rule-type1-1.0.2-0.all.deb'
Udev_Deb_Url='http://download.brother.com/welcome/dlf006654/'
Url_Info='https://download.brother.com/pub/com/linux/linux/infs/'
Printer_Url_Info=$Url_Info/$modelName
#fin Rappel
do_download_drivers() {
verif_rep "$Temp_Dir"
declare -A printer
while IFS='=' read k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
if ! test -v printer[SCANNER_DRV]
#...
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#102 Hier à 17:21
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
"$Printer_Info" <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
=>
Scripts/demonipuch.sh: ligne 177: /tmp/packages/Printer_Info.html: Permission non accordée
d' autre part :
if ! test -v printer[SCANNER_DRV]
iznobe@iznobe-pc:~$ man test > testman
iznobe@iznobe-pc:~$ cat testman
TEST(1) User Commands TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
DESCRIPTION
Exit with the status determined by EXPRESSION.
--help display this help and exit
--version
output version information and exit
An omitted EXPRESSION defaults to false. Otherwise, EXPRESSION is true or false and sets exit status. It is one of:
( EXPRESSION )
EXPRESSION is true
! EXPRESSION
EXPRESSION is false
EXPRESSION1 -a EXPRESSION2
both EXPRESSION1 and EXPRESSION2 are true
EXPRESSION1 -o EXPRESSION2
either EXPRESSION1 or EXPRESSION2 is true
-n STRING
the length of STRING is nonzero
STRING equivalent to -n STRING
-z STRING
the length of STRING is zero
STRING1 = STRING2
the strings are equal
STRING1 != STRING2
the strings are not equal
INTEGER1 -eq INTEGER2
INTEGER1 is equal to INTEGER2
INTEGER1 -ge INTEGER2
INTEGER1 is greater than or equal to INTEGER2
INTEGER1 -gt INTEGER2
INTEGER1 is greater than INTEGER2
INTEGER1 -le INTEGER2
INTEGER1 is less than or equal to INTEGER2
INTEGER1 -lt INTEGER2
INTEGER1 is less than INTEGER2
INTEGER1 -ne INTEGER2
INTEGER1 is not equal to INTEGER2
FILE1 -ef FILE2
FILE1 and FILE2 have the same device and inode numbers
FILE1 -nt FILE2
FILE1 is newer (modification date) than FILE2
FILE1 -ot FILE2
FILE1 is older than FILE2
-b FILE
FILE exists and is block special
-c FILE
FILE exists and is character special
-d FILE
FILE exists and is a directory
-e FILE
FILE exists
-f FILE
FILE exists and is a regular file
-g FILE
FILE exists and is set-group-ID
-G FILE
FILE exists and is owned by the effective group ID
-h FILE
FILE exists and is a symbolic link (same as -L)
-k FILE
FILE exists and has its sticky bit set
-L FILE
FILE exists and is a symbolic link (same as -h)
-N FILE
FILE exists and has been modified since it was last read
-O FILE
FILE exists and is owned by the effective user ID
-p FILE
FILE exists and is a named pipe
-r FILE
FILE exists and the user has read access
-s FILE
FILE exists and has a size greater than zero
-S FILE
FILE exists and is a socket
-t FD file descriptor FD is opened on a terminal
-u FILE
FILE exists and its set-user-ID bit is set
-w FILE
FILE exists and the user has write access
-x FILE
FILE exists and the user has execute (or search) access
Except for -h and -L, all FILE-related tests dereference symbolic links. Beware that parentheses need to be escaped (e.g.,
by backslashes) for shells. INTEGER may also be -l STRING, which evaluates to the length of STRING.
NOTE: Binary -a and -o are inherently ambiguous. Use 'test EXPR1 && test EXPR2' or 'test EXPR1 || test EXPR2' instead.
NOTE: [ honors the --help and --version options, but test does not. test treats each of those as it treats any other non‐
empty STRING.
NOTE: your shell may have its own version of test and/or [, which usually supersedes the version described here. Please re‐
fer to your shell's documentation for details about the options it supports.
AUTHOR
Written by Kevin Braunsdorf and Matthew Bradburn.
REPORTING BUGS
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report any translation bugs to <https://translationproject.org/team/>
COPYRIGHT
Copyright © 2023 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/li‐
censes/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
SEE ALSO
access(2)
Full documentation <https://www.gnu.org/software/coreutils/test>
or available locally via: info '(coreutils) test invocation'
GNU coreutils 9.4 April 2024 TEST(1)
iznobe@iznobe-pc:~$
pas d' option "-v " , je me demande donc quel peut bien etre ce test ?
modif : automatisation de l'initialisation du tableau associatif printer :
Ca , c' est de la modif !!! ( si ça marche )
Dernière modification par iznobe (Hier à 17:32)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#103 Hier à 17:34
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
"$Printer_Info" <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
ce n'est pas ce que j'ai écrit.
. <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
cette ligne source (la commande . (point = source)) la Substitution de process (<(...))
Attention, le man test affiche le man de la commande externe test.
la commande interne test dispose de plus d'options; il faut lire le help test.
Dernière modification par Watael (Hier à 17:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#104 Hier à 17:47
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
log "Obtention des infos de l ' imprimante"
while IFS='=' read k v; do Printer[$k]+=$v; done < <(wget -q - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
log_action_end_msg $?
echo "${Printer[*]}"
=>
* Obtention des infos de l ' imprimante... [ OK ]
[fail]
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#105 Hier à 17:54
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
iznobe a écrit :"$Printer_Info" <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
ce n'est pas ce que j'ai écrit.
Watael a écrit :. <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
cette ligne source (la commande . (point = source)) la Substitution de process (<(...))
pour le point j' avais bien compris , mais , avec mes tests , il creait aussi un fichier dans le dossier courant , je me suis dis que je pouvais essayer , mais évidemment ça ne le fait pas
Attention, le man test affiche le man de la commande externe test.
la commande interne test dispose de plus d'options; il faut lire le help test.
-v pour variable existe . facile à retenir ça
echo "${Printer[*]}"
on est d' accord que cette commande est censée afficher le contenu complet du tableau nommé " Printer " ?
j ' ai aussi essayé sans le " +(=) " , bien sur , meme resultat chez moi . pas d' erreur sur shellcheck .
Dernière modification par iznobe (Hier à 17:58)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#106 Hier à 17:56
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
comme quoi ces logs n'aident pas au débuggage.
ajoute un set -x au début de la fonction, et fais un copier/coller de ce qui s'affiche dans le terminal.
éventuellement, commente les fonctions de log.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#107 Hier à 18:02
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
voili voilou :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFC-L2710DW 0
2025-08-09_18:01:14
# Ubuntu Codename : noble
# Architecture : x86_64
# Modèle de l'imprimante : MFC-L2710DW
# Type de connexion : USB
# Adresse IP :
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations :
# page de telechargement des pilotes :
+ log_action_begin_msg 'Obtention des infos de l '\'' imprimante'
+ log_daemon_msg 'Obtention des infos de l '\'' imprimante...'
+ '[' -z 'Obtention des infos de l '\'' imprimante...' ']'
+ TPUT=/usr/bin/tput
+ log_use_fancy_output
+ '[' -t 1 ']'
+ '[' xxterm-256color '!=' x ']'
+ '[' xxterm-256color '!=' xdumb ']'
+ '[' -z ']'
+ return 0
+ /usr/bin/tput xenl
++ /usr/bin/tput cols
+ COLS=135
+ '[' 135 ']'
+ '[' 135 -gt 6 ']'
+ COL=128
+ log_use_plymouth
+ '[' n = y ']'
+ plymouth --ping
+ printf ' * Obtention des infos de l '\'' imprimante... '
* Obtention des infos de l ' imprimante... + esc=$'\E'
+ movecur=' '
+ printf ' '
+ echo -e ' - Obtention des infos de l '\'' imprimante'
+ IFS==
+ read k v
++ wget -q - https://download.brother.com/pub/com/linux/linux/infs//MFCL2710DW
++ sed '/\(]\|rpm\)$/d'
+ log_action_end_msg 0
+ log_end_msg 0
+ '[' -z 0 ']'
+ '[' 128 ']'
+ '[' -x /usr/bin/tput ']'
+ log_use_plymouth
+ '[' n = y ']'
+ plymouth --ping
+ esc=$'\E'
+ movecur=' '
+ printf '\r '
+ '[' 0 -eq 0 ']'
+ echo '[ OK ]'
[ OK ]
+ return 0
+ echo ''
+ test -f /tmp/packages/Printer_Info.html
+ log_action_end_msg 1
+ log_end_msg 1
+ '[' -z 1 ']'
+ '[' 128 ']'
+ '[' -x /usr/bin/tput ']'
+ log_use_plymouth
+ '[' n = y ']'
+ plymouth --ping
+ esc=$'\E'
+ movecur=' '
+ printf '\r '
+ '[' 1 -eq 0 ']'
+ red=''
+ normal=''
+ echo '[fail]'
[fail]
+ return 1
+ true
+ log 'Aucun pilote trouvé. Veuillez verifier votre connexion internet .
Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
afin de télécharger les pilotes et les installer manuellement.' Red
+ message='Aucun pilote trouvé. Veuillez verifier votre connexion internet .
Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
afin de télécharger les pilotes et les installer manuellement.'
+ test -z Red
+ test Red == Blue
+ test Red == Red
+ color='\033[1;31m'
+ echo -e '\033[1;31m Aucun pilote trouvé. Veuillez verifier votre connexion internet .
Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
afin de télécharger les pilotes et les installer manuellement. \033[0;0m'
Aucun pilote trouvé. Veuillez verifier votre connexion internet .
Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
afin de télécharger les pilotes et les installer manuellement.
+ echo -e '
# Aucun pilote trouvé. Veuillez verifier votre connexion internet .
Veuillez vérifier le modèle de votre imprimante ou
visitez la page suivante : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
afin de télécharger les pilotes et les installer manuellement.'
+ exit 2
iznobe@iznobe-pc:~$
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#108 Hier à 18:10
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
tu as oublié l'option -O (--output-document) pour wget
Dernière modification par Watael (Hier à 18:11)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#109 Hier à 18:14
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ca vient des modifs que j' etais en train de faire avant ...
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#110 Hier à 18:57
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
bon .
j ' ai corrigé mes âneries
Puis , j' ai mis ça dans le fonction "do_init_script() { " :
log "initialisation du script." "Blue"
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
while IFS='=' read k v; do Printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
log_action_end_msg $?
echo "Tableau ======= ${Printer[*]}"
exit
ce qui donne :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFC-L2710DW 0
* Recherche du dossier ' /tmp/packages ' sur votre système... [ OK ]
2025-08-09_18:55:41
# Ubuntu Codename : noble
# Architecture : x86_64
# Modèle de l'imprimante : MFC-L2710DW
# Type de connexion : USB
# Adresse IP :
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : http://www.brother.com/pub/bsc/linux/infs/MFCL2710DW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
initialisation du script.
* Obtention des infos de l' imprimante... [ OK ]
Tableau ======= brscan-skey
iznobe@iznobe-pc:~$
en ajoutant le " + " pour les elements du tableau
cela donne :
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFC-L2710DW 0
* Recherche du dossier ' /tmp/packages ' sur votre système... [ OK ]
2025-08-09_18:56:54
# Ubuntu Codename : noble
# Architecture : x86_64
# Modèle de l'imprimante : MFC-L2710DW
# Type de connexion : USB
# Adresse IP :
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : http://www.brother.com/pub/bsc/linux/infs/MFCL2710DW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
initialisation du script.
* Obtention des infos de l' imprimante... [ OK ]
Tableau ======= mfcl2710dwpdrv-4.0.0-1.i386.debnoMFCL2710DWbrscan4brscan-skey
iznobe@iznobe-pc:~$
cependant , plusieurs soucis , ton sed , enleve le nom de l' imprimante du fichier ...
j ' etais en train de modifier le script pour verifier la validité de celui-ci , avec ce code :
if test -f $Printer_Info; then
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0; 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
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
qui viens d' ailleurs , juste apres le exit , pour afficher ton tableau , que j' ai ajouté pour l' occasion .dans cette meme fonction :
log "initialisation du script." "Blue"
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
while IFS='=' read k v; do Printer[$k]+=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\)$/d')
log_action_end_msg $?
echo "Tableau ======= ${Printer[*]}"
exit
if test -f $Printer_Info; then
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0; 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
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
}
Au lieu de :
if test "$(grep PRINTERNAME "$Printer_Info" | cut -d= -f2)" == "$Printer_Name"; then log_action_end_msg 0; fi
je mettrai
if test -v ${Printer[$Printer_Name]}; then log_action_end_msg 0; fi
il suffirait de modifier le SED de façon à enlever uniquement ce qu ' on est certain de ne pas avoir besoin, soit uniquement les lignes pour les paquets RPM .
Sauf que SED et moi + le truc à la fin de sed ... on est pas tres copain
D ' ailleurs , il faut surement le champ pour LNK ( en cas que ca renvoie vers un autre lien ) :
# ???????? 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
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
Dernière modification par iznobe (Hier à 19:30)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#111 Hier à 19:28
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
n'oublie pas de déclarer le tableau associatif, sinon le tableau ne contiendra qu'un seul élément.
et aussi sinon en mettant un + tu concatènes les données au seul élément du tableau, qui ,sans déclaration explicite de son "associativité", est indexé.
/!\ à test -v, on passe le nom de la variable, pas sa valeur.
quant à PRINTERNAME :
wget -qO- https://download.brother.com/pub/com/linux/linux/infs/MFCL2710DW | sed '/\(]\|rpm\)$/d'
PRN_CUP_RPM=
PRN_CUP_DEB=
PRN_LPD_RPM=
PRN_LPD_DEB=
PRN_DRV_DEB=mfcl2710dwpdrv-4.0.0-1.i386.deb
REQUIRE32LIB=no
PRINTERNAME=MFCL2710DW
SCANNER_DRV=brscan4
SCANKEY_DRV=brscan-skey
PRINTERNAME est bien là.
je vois qu'il y a des variables vides, je peux les virer avec sed :
wget -qO- https://download.brother.com/pub/com/linux/linux/infs/MFCL2710DW | sed '/\(]\|rpm\|=\)$/d'
PRN_DRV_DEB=mfcl2710dwpdrv-4.0.0-1.i386.deb
REQUIRE32LIB=no
PRINTERNAME=MFCL2710DW
SCANNER_DRV=brscan4
SCANKEY_DRV=brscan-skey
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#112 Hier à 19:46
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
le tableau est declaré en " global " :
#!/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
if [ "$2" = "1" ]; then Connection="Réseau"; elif [ "$2" = "0" ]; then Connection="USB"; fi
fi
IP="$3"
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
j ' ai corrigé pour le " P " Majuscule de printer ... et j ' ai enlevé le + dans la ligne .
je me suis rendu compte de mon erreur pour la valeur tableau , à la place j' ai mis :
log "Vérification du fichier obtenu"
if test -v "${printer[PRINTERNAME]}"; then
if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
fi
je vois qu'il y a des variables vides, je peux les virer avec sed :
ca c' est parfait .
Mais je sais pas a coté de quoi je passe puisque 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
if [ "$2" = "1" ]; then Connection="Réseau"; elif [ "$2" = "0" ]; then Connection="USB"; fi
fi
IP="$3"
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() {
# 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 0;fi
if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then # && [[ $Arch != "armv7l" ]]
log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
exit 1
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 le 2eme argument est reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then control_ip "$IP";
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# on cree le repertoire temporaire de travail.
verif_rep "$Temp_Dir"
# 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 vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
while IFS='=' read k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')
log_action_end_msg $?
for i in "${printer[@]}"; do
echo " $i"
done
# On vérifie que le fichier fournit les informations
log "Vérification du fichier obtenu"
if test -v "${printer[PRINTERNAME]}"; then
if test "${printer[PRINTERNAME]}" == "$Printer_Name"; then log_action_end_msg 0
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
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
Lnk="$(grep LNK "$Printer_Info" | cut -d= -f2)"
if test -n "$Lnk"; then Printer_Url_Info="$Url_Info/$Lnk";log "LNK = $Lnk" "Red";fi
exit
}
, j ' obtiens:
iznobe@iznobe-pc:~$ sudo bash Scripts/demonipuch.sh MFC-L2710DW 0
* Recherche du dossier ' /tmp/packages ' sur votre système... [ OK ]
2025-08-09_19:42:07
# Ubuntu Codename : noble
# Architecture : x86_64
# Modèle de l'imprimante : MFC-L2710DW
# Type de connexion : USB
# Adresse IP :
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : http://www.brother.com/pub/bsc/linux/infs/MFCL2710DW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCL2710DW_us_eu_as
initialisation du script.
* Obtention des infos de l' imprimante... [ OK ]
MFCL2710DW
mfcl2710dwpdrv-4.0.0-1.i386.deb
no
brscan-skey
brscan4
* Vérification du fichier obtenu... grep: /tmp/packages/Printer_Info.html: Aucun fichier ou dossier de ce nom
iznobe@iznobe-pc:~$
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#113 Hier à 19:48
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
pfff , c' est à cause de la ligne LNK ...
j ' ai modifié comme suit cette partie là :
# On vérifie l'URL
Printer_Info="$Temp_Dir/Printer_Info.html"
log "Obtention des infos de l' imprimante"
while IFS='=' read k v; do printer[$k]=$v; done < <(wget -qO - "$Printer_Url_Info" | sed '/\(]\|rpm\|=\)$/d')
log_action_end_msg $?
for i in "${printer[@]}"; do
echo " $i"
done
# 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
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
exit
}
ca m' a l' air d ' aller .
reste a faire pour la suite du script .
+++++++++++++++++++++++++++++++++++++
Existe t il un moyen d' afficher les index du tableau associatif dans le code ?
for index in "${printer[@???]}"; do
echo " $index"
done
comment je peux faire pour sélectionner tous les index du tableau qui commence par " PRN " et / ou " SCAN " de façon a boucler dessus ?
Dernière modification par iznobe (Hier à 20:03)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#114 Hier à 20:21
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
Existe t il un moyen d' afficher les index du tableau associatif dans le code ?
for k in "${!printer[@]}"; do echo $k = ${printer[$k]}; done
ou, pour seulement de l'affichage des indices :
printf '%s\n' "${!printer[@]}"
Dernière modification par Watael (Hier à 20:31)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#115 Aujourd'hui à 00:14
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
le script en attente de finalisation :
#!/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
if [ "$2" = "1" ]; then Connection="Réseau"; elif [ "$2" = "0" ]; then Connection="USB"; fi
fi
IP="$3"
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() {
# 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 0;fi
if [[ -f $Logfile ]]; then mv "$Logfile" "$Logfile".old; fi
if [[ $Arch != "i386" ]] && [[ $Arch != "i686" ]] && [[ $Arch != "x86_64" ]]; then # && [[ $Arch != "armv7l" ]]
log "Achitecture $Arch non prise en charge ! script interrompu." "Red"
exit 1
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 le 2eme argument est reseau on demande l' IP de l'imprimante
if [[ "$Connection" == "Réseau" ]]; then control_ip "$IP";
while [[ -z "$IP" ]]; do
read -rp "Entrez l'adresse IP de votre imprimante : " IP
control_ip "$IP"
done
fi
# on cree le repertoire temporaire de travail.
verif_rep "$Temp_Dir"
# 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 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
else
log_action_end_msg 1
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
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
}
###############################
# 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
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget"
# 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" "$Temp_Dir"
# 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"
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" | grep ppd | awk '{print $6}' | sed 's/^.//g')
fi
done
if [[ -z "$Ppd_File" ]]; then
for file in $(find /usr/share/cups/model -type f); do
if grep -qi Brother "$file" | grep -E "$Model_Name|$Printer_Name"; then
Ppd_File="$file"
fi
done
fi
log "Recherche d'un fichier PPD sur votre système"
if [[ -n "$Ppd_File" ]]; then
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
# 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
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#116 Aujourd'hui à 01:40
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
if [ -n "$2" ]; then if [ "$2" = "1" ]; then Connection="Réseau"; elif [ "$2" = "0" ]; then Connection="USB"; fi fi IP="$3"
c'est redondant : si une ip est indiquée, c'est qu'on veut utiliser le réseau.
l'IP devient le second argument, et son absence suggère de demander le type de connexion souhaitée.
if ( (valid_ip "$IP") ); then
pourquoi y a-t-il deux paires de parenthèses ?
pourquoi y aurait-il des parenthèses ?
# Printer_Info="$Temp_Dir/Printer_Info.html" # on n'utilise plus ce fichier 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') # on n'utilise plus ce fichier ;)
while IFS='=' read -r k v; do printer[$k]=$v; done < <(wget -qO - | sed '/\(]\|rpm\|=\)$/d')
log "Aucun pilote trouvé. Veuillez verifier votre connexion internet .
ça, on peut le faire dès le début du script :
nc -z -w5 'brother.com' 80 || { >&2 echo '"brother.com" n'est pas joignable.'; exit 1;}
verif_rep "/usr/share/cups/model" "/var/spool/lpd" "$Temp_Dir"
Temp_Dir a déjà été vérifié.
printer=( [prn_lpd]="$(grep PRN_LPD_DEB "$Printer_Info" | cut -d= -f2)"
on n'utilise plus ce fichier.
ce morcellement de la définition du tableau associatif entre plusieurs fonction n'est vraiment pas une bonne idée.
dans l'ensemble,
je n'aprécie pas l'utilisation de fonctions dont le code n'est pas réutilisé dans le script, et que leur exécution est "linéaire", c'est-à dire que sans fonctions le code qu'elles contiennent s'enchaînerait logiquement.
par exemple, valid_IP disparaît
control_ip() {
IP=$1
if test -n "$IP"
then
IFS='.' read -ra ip <<< "$IP"
if [[ ${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 ]] #cette ligne est beaucoup trop longue.
# Pour rappel, une ligne d'un script ne devrait pas excéder 80 caractères, par souci de lisibilité.
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
}
control_ip pourrait aussi disparaître, en tenant compte de ma première remarque.
je n'aime pas non plus que des fonctions définissent des variables globales : une fonction peut accepter des arguments, effectue une/des opération(s) et retourne un résultat (info ou état).
enfin, je te le dis encore, et j'insiste : les logs brouillent la lecture du "mécanisme" du script; tu devrais t'en dispenser tant que le script n'est pas au point.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#117 Aujourd'hui à 06:17
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
non! awk sait faire ce que font grep et sed.
dpkg --contents "$Temp_Dir/$pkg" | gawk '/ppd/{sub(".","",$NF); print $NF}'
for file in $(find /usr/share/cups/model -type f)
non plus !
while read -d '' file; do : whatever with "$file"; done < <(find /usr/share/cups/model -print0)
voir si on ne pourrait pas se passer du find
parce que grep | grep, ce n'est pas possible, non plus.
while read -d '' file; do : whatever with $file; done < <(grep RZl "$modelName\|$printerName" /usr/share/cups/model)
y a-t-il une chance qu'un nom de modèle ou un nom d'imprimante Brother corresponde à celui d'une autre marque ?
Dernière modification par Watael (Aujourd'hui à 06:34)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#118 Aujourd'hui à 11:15
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
comment créer une regex , qui matche sur tous les mots commencant par " brother " un nombre de caracters peu importe lesquels , et finissant par .ppd ?
regex="[^brother[:alnum:]_-.][.ppd$]"
ni
regex="[^brother[:alnum:]_-.][\.ppd$]"
regex="^brother[.*]\.ppd$"
# regex="^brother[.]+\.ppd$"
test="$(ls -R /usr/share/cups/model | grep .ppd)"
if [[ $test =~ "$regex" ]] then echo "$BASH_REMATCH[0]"; else echo "NOK";fi
j ' ai essayé tout un tas de combinaison sans succés , pourtant elle parait simple cette regex a ecrire au 1er abord ...
n ' a pas l ' air de fonctionner
J ' ai corrigé toute le reste ( pas fait le code avec le " nouveau tableau " encore ... ) a cause de cette satanée regex !
regex="^brother"
# regex="^brother[.]+\.ppd$"
test="$(ls -R /usr/share/cups/model | grep .ppd)"
for file in ${test[@]}; do
echo "$file"
if [[ $file =~ "$regex" ]] then echo "$BASH_REMATCH[0]"; else echo "NOK";fi
done
iznobe@iznobe-pc:~$
...
Configuration de l'imprimante
brother-MFCL2710DW-cups-en.ppd
NOK
re.ppd
NOK
brother_dcpl3560cdw_printer_en.ppd
NOK
* Recherche d'un fichier PPD sur votre système... [fail]
* Ajout de l'imprimante MFC-L2710DW... [fail]
iznobe@iznobe-pc:~$ ls -R /usr/share/cups/model | grep "^brother"
brother-MFCL2710DW-cups-en.ppd
brother_dcpl3560cdw_printer_en.ppd
iznobe@iznobe-pc:~$
Dernière modification par iznobe (Aujourd'hui à 11:35)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#119 Aujourd'hui à 12:09
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
me saoule ces histoire de " " " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
bref , voici ce que j' ai mis :
do_configure_printer() {
log "Configuration de l'imprimante" "Blue"
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 [[ -z "$Ppd_File" ]]; then # BASH_REMATCH[0]
regex="^brother.*\.ppd$"
test="$(ls -R /usr/share/cups/model | grep -E "$Model_Name|$Printer_Name")"
for file in ${test[@]}; do
echo "$file"
if [[ "$file" =~ $regex ]] then
Ppd_File="$BASH_REMATCH"
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
...
et le code avec les corrections apportées que tu as mentionnées sauf pour le " nouveau " tableau :
#!/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
if ! install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "gawk"; then
log "impossible d' installer les paquets indispensables"
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}')
log_action_end_msg 0;
fi
done
if [[ -z "$Ppd_File" ]]; then
regex="^brother.*\.ppd$"
test="$(ls -R /usr/share/cups/model | grep -E "$Model_Name|$Printer_Name")"
for file in "${test[@]}"; 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
Dernière modification par iznobe (Aujourd'hui à 12:24)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#120 Aujourd'hui à 14:26
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
non
ls -R /usr/share/cups/model | grep -E "$Model_Name|$Printer_Name"
tu ne peux pa faire ça.
?
parce qu'on ne parse pas la sortie de ls.
et puis, test n'est pas un tableau.
shopt -s nullglob extglob
listFic=( /usr/share/cups/model/*brother*@($Model_Name|$Printer_Name)*.ppd )
a priori.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne