Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue )

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

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 (<(...))

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

Watael a écrit :
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 big_smile

Watael a écrit :

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 cool



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 tongue
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 tongue
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 big_smile

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 roll , 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 ? smile

#	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 smile : 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 roll

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:~$

mad

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. hmm

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