#226 Hier à 09:30
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Salut .
Bon j' ai trouvé un truc qui marche , reste à fignoler ... :
#!/bin/bash
tmpDir="/tmp/packages"
file="$tmpDir/index.html"
wget -E "192.168.2.84" -O "$file"
tt="$(grep -oP '(?<=<title>).*?(?=</title>)' $file)"
echo "$tt"
ce qui donne :
iznobe@iznobe-pc:~$ bash Scripts/testeur.sh
--2025-08-15 09:30:21-- http://192.168.2.84/
Connexion à 192.168.2.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : /home/status.html [suivant]
--2025-08-15 09:30:21-- http://192.168.2.84/home/status.html
Connexion à 192.168.2.84:80… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 5138 (5,0K) [text/html]
Enregistre : ‘/tmp/packages/index.html’
/tmp/packages/index.html 100%[=============================================>] 5,02K --.-KB/s ds 0,05s
2025-08-15 09:30:21 (93,4 KB/s) - ‘/tmp/packages/index.html’ enregistré [5138/5138]
Brother DCP-L3560CDW series
iznobe@iznobe-pc:~$
EDIT : github branche " Watael " actualisé avec le nouveau code pour USB et NET printer_name: blob:https://github.com/44cd499c-65be-4bd3-868b-c816252c7fa1
je sais pas si ce lien fonctionnera pour vous , au pire : https://github.com/iznobe/brother_printer_install/
Ou vous preferez que je continue de poster le code ici ?
Dernière modification par iznobe (Hier à 10:50)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#227 Hier à 10:03
- geole
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour
Un test réussi.
a@b:~$ wget https://raw.githubusercontent.com/iznobe/brother_printer_install/refs/heads/main/brprinter_install.sh
--2025-08-15 09:53:07-- https://raw.githubusercontent.com/iznobe/brother_printer_install/refs/heads/main/brprinter_install.sh
Résolution de raw.githubusercontent.com (raw.githubusercontent.com)… 2606:50c0:8000::154, 2606:50c0:8001::154, 2606:50c0:8002::154, ...
Connexion à raw.githubusercontent.com (raw.githubusercontent.com)|2606:50c0:8000::154|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 21086 (21K) [text/plain]
Enregistre : ‘brprinter_install.sh’
brprinter_install.sh 100%[==========================================================>] 20,59K --.-KB/s ds 0,009s
2025-08-15 09:53:08 (2,25 MB/s) - ‘brprinter_install.sh’ enregistré [21086/21086]
a@b:~$ sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/iznobe/brother_printer_install/refs/heads/main/brprinter_install.sh)"
[sudo] Mot de passe de a :
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
Entrez votre modèle d' imprimante : HL-L3230CDW
Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : 0
2025-08-15_09:53:38
# Ubuntu Codename : noble
# Architecture : x86_64
# Modèle de l'imprimante : HL-L3230CDW
# Type de connexion : USB
# Adresse IP :
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : https://download.brother.com/pub/com/linux/linux/infs/HLL3230CDW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=HLL3230CDW_us_eu_as
initialisation du script.
* Recherche du dossier ' /tmp/packages ' sur votre système... [fail]
* Creation du dossier ' /tmp/packages '... [ OK ]
* Obtention des infos de l' imprimante... [ OK ]
* Vérification du fichier obtenu... [ OK ]
Vérification des pré-requis
* Mise à jour de la liste des paquets... [ OK ]
* installation des paquets requis... * Recherche du paquet : ' multiarch-support ' sur votre système... [fail]
* Installation du paquet : ' multiarch-support ' sur votre système... [fail]
* Recherche du paquet : ' lib32stdc++6 ' sur votre système... [ OK ]
* Recherche du paquet : ' cups ' sur votre système... [ OK ]
* Recherche du paquet : ' curl ' sur votre système... [ OK ]
* Recherche du paquet : ' wget ' sur votre système... [ OK ]
* Recherche du paquet : ' gawk ' sur votre système... [ OK ]
* Recherche du dossier ' /usr/share/cups/model ' sur votre système... [ OK ]
* Recherche du dossier ' /var/spool/lpd ' sur votre système... [ OK ]
Recherche des pilotes
* Recherche des pilotes pour l' imprimante... [ OK ]
Pas de scanner détecté
[fail]
Téléchargement des pilotes
* Téléchargement du paquet : hll3230cdwpdrv-1.0.2-0.i386.deb... [ OK ]
Installation des pilotes
* Installation du paquet : hll3230cdwpdrv-1.0.2-0.i386.deb... [ OK ]
Configuration de l'imprimante
* Recherche d'un fichier PPD sur votre système... [ OK ]
* Ajout de l'imprimante HL-L3230CDW... [ OK ]
Configuration du scanner
Configuration de votre imprimante Brother HL-L3230CDW terminée. Bye :D
Vous pouvez supprimer le dossier /tmp/packages avec la commande suivante : rm -r /tmp/packages
a@b:~$
Il y a bien écrit: "Bye:D"
Dernière modification par geole (Hier à 12:31)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
Hors ligne
#228 Hier à 10:14
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
Bonjour,
Bon j' ai trouvé un truc qui marche
Il y a un point d’interrogation inutile dans ton grep.
grep -oP '(?<=<title>).*(?=</title>)' $file
Et puis,
on ne traite pas le HTML en shell. Il faut utiliser un parser HTML.
En ligne
#229 Hier à 10:53
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ce n' est pas ce que dit exactement la page que tu as mise en lien :
Bash isn’t the go-to for parsing HTML, but it can be done with tools like grep, awk, sed, or external utilities like
certes c' est pas le top , mais ça marche , si il y a des ratés , on sera toujours à temps d ' y revenir plus tard non ?
je doute qu ' il soit utile de se compliquer plus que ca , juste pour recuperer le nom du modele , si il n' y a pas de raté .
Ce n' est pas une information cruciale , dans le sens où , si on ne recupere pas le nom , on demandera à l' utilisateur de le mettre .
Dernière modification par iznobe (Hier à 10:56)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#230 Hier à 11:14
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
@diesel
l' IPV6 c' est bien pour internet , quel interet de n ' avoir que de l' ipv6 en local ?
tu comptes dépasser le nombre de périphérique que t ' offre la capacité de l' IPV4 sur ton réseau local ?
dans 10 ans , il y aura encore de l' IPV4 , je te rassure
et celui qui sait supprimer l' IPV4 de son ordi , il n' a pas besoin de ce script .
Dernière modification par iznobe (Hier à 11:22)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#231 Hier à 11:34
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
ce n' est pas ce que dit exactement la page que tu as mise en lien :
Bash isn’t the go-to for parsing HTML, but it can be done with tools like grep, awk, sed, or external utilities like
La page dit aussi que xmllint est plus robuste.
Ceci dit, si tu veux utiliser une autre solution que xmllint, et à supposer que <title>…</title> soit sur une seule ligne et que le titre commence systématiquement par Brother suivi du nom de modèle tu peux utiliser awk :
awk '/<title>/ {print $2}' "$file"
En ligne
#232 Hier à 11:42
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
libxml2-utils est installé par défaut ?
si oui autant l ' utilisé ..
EDIT : j ' ai ajouté le paquet aux pre-requis , comme ça pas de soucis ...
et modifier le code .
Dernière modification par iznobe (Hier à 11:53)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#233 Hier à 11:52
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
libxml2-utils est installé par défaut ?
Non, il faut l’installer.
En ligne
#234 Hier à 11:54
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
le code du script , je le met ici ou sur github ?
une version " awk " de :
USB_printer_name="$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)"
c' est possible ?
c' est pour recuperer le nom de l' imprimante connectée en USB qui donne :
iznobe@k-pi3:~ $ lsusb | grep -i brother
Bus 001 Device 006: ID 04f9:04fb Brother Industries, Ltd DCP-L3560CDW series
iznobe@k-pi3:~ $
Sachant qu ' il faudra gerer cela en tableau , dans le cas ou plusieurs imprimantes / scanners peuvent etre connectés en USB .
pour le moment , j' en suis à :
# NET_printer_name= ???
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP+="$(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')"
#echo "${printer_IP[*]}"
for p_ip in "${printer_IP[*]}"; do
wget -E "$p_ip" -O "$tmpDir/index.html"
# version robuste :
NET_printer_name+="$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)"
#echo "NET_printer_name == ${NET_printer_name[*]}"
done
echo "NET_printer_name RESULT ==
TAB printer_IP == ${printer_IP[*]}
TAB NET_printer_name == ${NET_printer_name[*]}"
# USB_printer_name= ???
USB_printer_name+="$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)"
echo "USB_printer_name == ${USB_printer_name[*]}"
Dernière modification par iznobe (Hier à 12:26)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#235 Hier à 12:26
- nany
Re : remise au gout du jour du script de demonipuch imprimante brother
… cut -c 58- …
Es-tu certain d’avoir toujours le même nombre de caractères ?
~$ echo "Bus 001 Device 006: ID 04f9:04fb Brother Industries, Ltd DCP-L3560CDW series" | cut -d"," -f2 | cut -d" " -f3
DCP-L3560CDW
~$
Et si tu tiens à awk (mais je n’en vois pas l’intérêt) :
~$ echo "Bus 001 Device 006: ID 04f9:04fb Brother Industries, Ltd DCP-L3560CDW series" | awk -F"," '{print $2 | "cut -d\" \" -f3"}'
DCP-L3560CDW
~$
Mais, de même, peut-on être certain qu’il y aura une virgule ?
En ligne
#236 Hier à 12:29
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
malheureusement non , je pense pas que ce sera toujours : ' Brother Industries, Ltd ' qui separera le nom du modele de l' identifiant vendeur:model ...
le soucis c' est que pour le moment , on a pas enorme de " testeur " .
seuls @eric63 et @geole sont presents dans le fil en plus de moi .
on peut toujours aller regarder dans la section imprimantes => brother , et chercher des lsusb , mais bon , ca va etre chronophage ...
Dernière modification par iznobe (Hier à 12:31)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#237 Hier à 13:02
- RaphaelG
Re : remise au gout du jour du script de demonipuch imprimante brother
iznobe a écrit :...........
et pour trouver l' IP :hostname -I | cut -d ' ' -f1
suffit de rajouter " /24 " à la fin et le tour est joué pour nmap
Et pour les "c.ns" qui sont en ipv6 ?
................
Jean-Marie
diesel a raison.
Je ne sais pas traiter le cas IP v6.
Mais même si on se cantonne à IP v4, on peut avoir un réseau local privé avec des adresses non routables commençant par 10.0.0.0/8 ou 172.16.0.0/12 avec donc un masque de sous réseau pas obligatoirement codé sur 24 bits.
Même les adresses commençant par 192.168 n'ont pas obligatoirement un masque de sous réseau de 24 bits.
Je pense qu'il faut obligatoirement en passer par "ip a".
ip a | grep $(hostname -I | cut -d ' ' -f1) | awk '{print $2}'
Dernière modification par RaphaelG (Hier à 13:25)
Hors ligne
#238 Hier à 13:24
- eric63
Re : remise au gout du jour du script de demonipuch imprimante brother
chez moi c’est mitigé
pas de scanner et ça serait cool de ne pas avoir à chercher l’IP fixe de l’imprimante (d’ailleurs comment différencier une ip non fixe d’une fixe ??)
kubu@kubu-System-Product-Name:~$ sudo su -c "bash <(wget -qO- https://raw.githubusercontent.com/iznobe/brother_printer_install/refs/heads/main/brprinter_install.sh)"
[sudo] password for kubu:
Connection to brother.com (13.248.151.157) 80 port [tcp/http] succeeded!
Entrez votre modèle d' imprimante : mfc-j4510dw
Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : 1
Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe.
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
Entrez l'adresse IP de votre imprimante : 192.168.1.180
* Controle de l' adresse IP entrée... PING 192.168.1.180 (192.168.1.180) 56(84) bytes of data.
--- 192.168.1.180 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 3.277/3.314/3.351/0.037 ms
[ OK ]
# Ubuntu Codename : plucky
# Architecture : x86_64
# Modèle de l'imprimante : MFC-J4510DW
# Type de connexion : Réseau
# Adresse IP : 192.168.1.180
# Repertoire courant : /tmp/packages
# Repertoire de telechargement des pilotes : /tmp/packages
# Fichier d'informations : https://download.brother.com/pub/com/linux/linux/infs/MFCJ4510DW
# page de telechargement des pilotes : https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=MFCJ4510DW_us_eu_as
initialisation du script.
* Recherche du dossier ' /tmp/packages ' sur votre système... [fail]
* Creation du dossier ' /tmp/packages '... [ OK ]
* Obtention des infos de l' imprimante... [ OK ]
* Vérification du fichier obtenu... [ OK ]
Vérification des pré-requis
* Mise à jour de la liste des paquets... [ OK ]
* installation des paquets requis... * Recherche du paquet : ' multiarch-support ' sur votre système... [fail]
* Installation du paquet : ' multiarch-support ' sur votre système... [fail]
* Recherche du paquet : ' lib32stdc++6 ' sur votre système... [ OK ]
* Recherche du paquet : ' cups ' sur votre système... [ OK ]
* Recherche du paquet : ' curl ' sur votre système... [ OK ]
* Recherche du paquet : ' wget ' sur votre système... [ OK ]
* Recherche du paquet : ' gawk ' sur votre système... [ OK ]
* Recherche du dossier ' /usr/share/cups/model ' sur votre système... [ OK ]
* Recherche du dossier ' /var/spool/lpd ' sur votre système... [fail]
* Creation du dossier ' /var/spool/lpd '... [ OK ]
Recherche des pilotes
* Recherche des pilotes pour l' imprimante... [ OK ]
* Recherche des pilotes pour le scanner... [ OK ]
Téléchargement des pilotes
* Téléchargement du paquet : brscan4-0.4.11-1.amd64.deb... [ OK ]
* Téléchargement du paquet : brscan-skey-0.3.4-0.amd64.deb... [ OK ]
* Téléchargement du paquet : mfcj4510dwlpr-3.0.1-1.i386.deb... [ OK ]
* Téléchargement du paquet : brother-udev-rule-type1-1.0.2-0.all.deb... [ OK ]
* Téléchargement du paquet : mfcj4510dwcupswrapper-3.0.1-1.i386.deb... [ OK ]
Configuration de l'imprimante
* Recherche d'un fichier PPD sur votre système... [ OK ]
* Ajout de l'imprimante MFC-J4510DW... [fail]
Configuration du scanner
* Configuration du scanner réseau... [fail]
No config binary found.
Configuration de votre imprimante Brother MFC-J4510DW terminée. Bye :D
Vous pouvez supprimer le dossier /tmp/packages avec la commande suivante : rm -r /tmp/packages
kubu@kubu-System-Product-Name:~$
Kubuntu 25.04 wayland Plasma 6.4.3 KDE Qt 6.8.3 noyau 6.14.0-24 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script demonipuch
J’utilise le clavier LDLC AFNOR
Hors ligne
#239 Hier à 14:58
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
d’ailleurs comment différencier une ip non fixe d’une fixe ??
c' est tres simple , si tu n' as rien fait en ce sens , tu as une ip qui changera ( pas fixe donc ) .
si tu as une IP fixe , tu es au courant car tu as fait une manipulation expres pour qu ' elle le soit , soit dans ta box ( ou ton routeur ) : attribué un bail statique ( par exemple ) soit tu as modifié dans ton imprimante la façon dont celle-ci otient son adresse ip et donc tu as mis un masque de reseau , une passerrelle , et une adresse ip qu ' elle demande au serveur DHCP de ton reseau de lui fournir .
le script de demonipuch ( remanié ) , celui qui est en page 1 de cette discussion , n ' est pas le script que l' on travaille en ce moment .
c' est le script pour les utilisateurs " courants " qui veulent installer leur imprimante , en attendant que le script que l' on travaille soit finalisé .
c' est la version " stable " dirons nous .
Celui que l' on travaille , c ' est la version " beta " .
je vais ajouter le script et la commande en 1ere page pour les testeurs . ca sera plus clair
Dernière modification par iznobe (Hier à 15:00)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#240 Hier à 15:55
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
voici , le code en question du coup , ca vous semble comment comme approche ?
# printer_name= ???
declare -i printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP+="$(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')"
#echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
wget -E "$p_ip" -O "$tmpDir/index.html"
# version robuste :
printer_name+="$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)"
#echo "printer_name == ${printer_name[*]}"
done
echo "printer_name RESULT ==
TAB printer_IP == ${printer_IP[*]}
TAB printer_name == ${printer_name[*]}"
# printer_name= ???
printer_name+="$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)"
echo "printer_name == ${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante"
# on affiche un message à l' utilisateur pour lui demander de connecter son imprimante
# si elle est bien connectée alors on lui pose la question classique
;;
1) echo "une seule imprimante"
printer_name=${printer_name[0]}
# il n' y a plus qu ' a executer l' installation standard , voir demander une confirmation des elements trouvés ?
;;
*) echo "plus d' une imprimante a été détectée"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
;;
esac
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#241 Hier à 16:47
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
un serveur doit avoir une IP fixe. Mme Michu et son mari sauront-ils configurer leur boxe dans ce sens ?
sans IP fixe toute la configuration "en dur" finira par ne plus fonctionner.
voici , le code en question du coup , ca vous semble comment comme approche ?
declare -i : les variables déclarées ne sont pas des entiers.
printer_IP n'est pas un tableau.
je suis surpris que xmllint ne puissse pas nous dispenser de cut (je ne pratique pas assidûment*)
pas grep | cut | cut grrr!!
pense à écrire ton raisonnement avant d'écrire du code; ça servira de commentaire pour qu'on voit l'articulation du code.
ça aide bien aussi lors de la maintenance.case $v in *) est équivalent au else de if...then...
--
* tu as essayé w3m ? et alors, peut-on voir le texte de la page d'accueil de l'imprimante, stp ?
Dernière modification par Watael (Hier à 16:48)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#242 Hier à 17:30
- lynn
Re : remise au gout du jour du script de demonipuch imprimante brother
Et avahi-browse ne convient pas pour découvrir le nom et modèle de son imprimante réseau sans avoir à s'occuper de son I.P ? Non ?
Je me permettais une redite car il semblerait que mon post précédent soit passé inaperçu. Après, ce n'était peut-être pas une bonne idée...
N.B : Je n'ai pas de modèle Brother sous la main mais le principe est le même avec une autre marque.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#243 Hier à 18:07
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
voici , le code en question du coup , ca vous semble comment comme approche ?
declare -i : les variables déclarées ne sont pas des entiers.
printer_IP n'est pas un tableau.
je suis surpris que xmllint ne puissse pas nous dispenser de cut (je ne pratique pas assidûment*)
pas grep | cut | cut grrr!!
pense à écrire ton raisonnement avant d'écrire du code; ça servira de commentaire pour qu'on voit l'articulation du code.
ça aide bien aussi lors de la maintenance.case $v in *) est équivalent au else de if...then...
--
* tu as essayé w3m ? et alors, peut-on voir le texte de la page d'accueil de l'imprimante, stp ?
non pas encore , je me suis surtout occupé d' ecrire la structure du code et de le remanié de façon a incorporer la suggestion de @freechelmi .
+ declare rectifié .
+ printer IP est bien un tableau ( enfin c' est l' idée du moins , de façon a recuperer plusieurs IP le cas echeant ) .
+ xmlint : je suis allé au plus simple
[*]pas grep | cut | cut grrr!![/*]
ca avait l' air de ne pas deranger @nany , je me suis pas pris la tete , privilegiant la structure dans un 1er temps .
Pour le raisonnement , il me semble que c' est ce que j' ai fais voir message precedent ou les commentaires sont explicites . fallait que j' avance un peu pour ca s' eclaire dans ma tete
case
...
*)
j ' avais bien compris , qu ' est ce qui ne va pas ?
soit on a pas d' imprimante detecté
soit on en a une
soit on en a plusieurs
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#244 Hier à 18:13
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
je vois pas trop comment éviter , avec les nouvelles modifs , de remettre une variable " connection " ...
le code , qui commence a être compréhensible maintenant :
j ' ai du deplacer la partie " controle des arguments " apres la detection automatique , bien entendu .
#!/bin/bash -x
# > vim search whole line : `yy / <Ctrl-F> p <Enter>'
# définitions de variables
# gestion des arguments
# infos Brother
# quelques fonctions
# quelques vérifications
# initialisation du tableau associatif `printer'
# vérification de variables disponibles dans `printer'
# préparation du système
# téléchargement des pilotes
# configuration de l'imprimante
# configuration du scanner
# <
shopt -s extglob nullglob globstar
############################
# définitions de variables
############################
if test -f /etc/lsb-release
then
. /etc/lsb-release
DistroName="$DISTRIB_ID"
VersionYear="${DISTRIB_RELEASE::2}"
codeName="$DISTRIB_CODENAME"
elif test -f /usr/lib/os-release
then
. /usr/lib/os-release
DistroName="$NAME"
VersionYear="${VERSION_ID::2}"
codeName="$VERSION_CODENAME"
fi
user="$SUDO_USER"
arch="$(uname -m)"
date=$(date +%F_%T)
tmpDir="/tmp/packages"
Logfile="/home/$user/brprinter_install.log"
libDir="/usr/lib/$arch-linux-gnu"
declare -A printer
declare -i err
#################
# infos Brother
#################
# ancienne adresse d' obtention des infos :
#Url_Info="http://www.brother.com/pub/bsc/linux/infs"
# nouvelle adresse :
Url_Info="https://download.brother.com/pub/com/linux/linux/infs"
# Packages :
Url_Pkg="https://download.brother.com/pub/com/linux/linux/packages"
Url_Pkg2="http://www.brother.com/pub/bsc/linux/packages" # ancienne adresse d'obtention des paquets
Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb_Name="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654"
Scankey_Drv_Deb_Name="brscan-skey-0.3.4-0.amd64.deb"
printerInfo="$Url_Info/$printerName"
Printer_dl_url="https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=${printerName}_us_eu_as"
#######################
# quelques fonctions #
#######################
errQuit()
{
>&2 echo "$@"
exit 1
}
verif_lien()
{ # pour faire un boucle, suffit-il vérifier que le nombre d'arguments est pair ?
local lien=$1 cible=$2
if ! test -L "$lien"
then
ln -s "$cible" "$lien"
fi
}
install_pkg()
{
for pkg do
if ! dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null
then
apt-get install -qq "$pkg"
fi
done
}
###########################
# quelques vérifications #
###########################
if test "$DistroName" != "Ubuntu"; then errQuit "La distribution n’est pas Ubuntu ou une des ses variantes officielles.";fi
if test "$SHELL" != "/bin/bash"; then errQuit "Shell non compatible. utilisez : bash"; fi
if test "$arch" != "x86_64"; then errQuit "Système non compatible."; fi
#if [[ $arch != @(i386|i686|x86_64) ]]
if ((EUID)); then errQuit "Vous devez lancer le script en root : sudo $0"; fi
if ! nc -z -w5 'brother.com' 80; then errQuit "le site \"brother.com\" n'est pas joignable.";fi
##########################
# DETECTION AUTOMATIQUE #
##########################
# printer_name= ???
declare -a printer_IP printer_name
my_IP="$(hostname -I | cut -d ' ' -f1)"
#echo "$my_IP"
printer_IP+="$(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}')"
#echo "${printer_IP[*]}"
for p_ip in "${printer_IP[@]}"; do
wget -E "$p_ip" -O "$tmpDir/index.html"
# version robuste :
printer_name+="$(xmllint --html --xpath '//title/text()' "$tmpDir/index.html" 2>/dev/null | cut -d ' ' -f2)"
#echo "printer_name == ${printer_name[*]}"
done
# echo "printer_name RESULT ==
# TAB printer_IP == ${printer_IP[*]}
# TAB printer_name == ${printer_name[*]}"
# printer_name= ???
printer_name+="$(lsusb | grep 04f9: | cut -c 58- | cut -d ' ' -f2)"
# echo "printer_name == ${printer_name[*]}"
case ${#printer_name[*]} in
0) echo "Aucune imprimante détectée !
Êtes vous sùr de l' avoir connectée au port USB de votre ordinateur ou à votre reseau local ?"
# on repars donc avec les questions de base : modele etc ...
;;
1) echo "une seule imprimante détectée"
modelName=${printer_name[0]} # ! printer_name != printerName
# pas besoin de poser de question , il ne reste plus qu ' a installer
;;
*) echo "plus d' une imprimante a été détectée"
# il faut presenter sous forme de liste les éléments recupérés :
# modele du materriel : IP ou USB
# et demander à l' utilisateur de choisir un numero dans cette liste
n_print=$(("${#printer_name[@]}"))
for n in "${!printer_name[@]}"; do
echo " $((n+1)) ⇒ ${printer_name[$n]}"
done
while test -z "$choix"; do
read -rp "Choisissez le numero qui correspond à l' imprimante que voulez installer" choix
if ! ((choix > 0 && choix <= n_print)); then
echo "choix invalide !"
unset choix
fi
done
modelName="${printer_name[$((choix-1))]}"
;;
esac
##########################
# gestion des arguments #
##########################
if test -z $modelName then
declare -u modelName=$1
else
modelName="${modelName^^}"
until test -n "$modelName"
do
read -rp 'Entrez le modèle de votre imprimante : ' modelName
done
printerName="${modelName//-/}" # ! printer_name != printerName
#check IP
until test -n "$IP"
do
read -rp "Voulez-vous configurer votre imprimante pour qu'elle fonctionne en réseau ? [o/N]: "
[[ $REPLY == [YyOo] ]] || break
if test -n "$2"
then
IP=$2
shift $#
else
read -rp "Entrez l'adresse IP de votre imprimante : " IP
fi
IFS='.' read -ra ip <<< "$IP"
for i in "${ip[@]}"
do
((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || err+=1
done
if (( ${#ip[*]} != 4 )) || ((err)) || ! ping -qc2 "$IP"
then
err=0
unset IP
fi
done
###################################################
# initialisation du tableau associatif `printer' #
###################################################
while IFS='=' read -r k v
do
printer[$k]=$v
done < <(wget -qO- "$printerInfo" | sed '/\(]\|rpm\|=\)$/d')
#########################################################
# vérification de variables disponibles dans `printer' #
#########################################################
if ! test "${printer[PRINTERNAME]}" = "$printerName"
then
errQuit "les données du fichier info recupéré et le nom de l'imprimante ne correspondent pas."
fi
if test -n "${printer[LNK]}"
then
printerInfo="$Url_Info/${printer[LNK]}"
fi
if test -n "${printer[SCANNER_DRV]}"
then
printer[udev_rules]="$Udev_Deb_Name"
. <(wget -qO- "$Url_Info/${printer[SCANNER_DRV]}.lnk" | sed -n '/^DEB/s/^/scanner_/p')
. <(wget -qO- "$Url_Info/${printer[SCANKEY_DRV]}.lnk" | sed -n '/^DEB/s/^/scanKey_/p')
printer[SCANNER_DRV]="$scanner_DEB64"
printer[SCANKEY_DRV]="$scanKey_DEB64"
if test -n "$VersionYear"; then
if (( VersionYear >= 24 )) && test "${printer[SCANKEY_DRV]}" = 'brscan-skey-0.3.2-0.amd64.deb'
then
printer[SCANKEY_DRV]="$Scankey_Drv_Deb_Name"
fi
else
errQuit "Impossible d’évaluer la version de la distribution."
fi
else
err+=1
echo "pas de pilote pour le scanner."
fi
###########################
# préparation du système #
###########################
# if test -f "$Logfile"; then
# Old_Date="$(head -n1 "$Logfile")"
# mv -v "$Logfile" "$Logfile"."$Old_Date".log
# fi
# echo "$date" >> "$Logfile" # indispensable pour la rotation du log .
for d in "$tmpDir" "/usr/share/cups/model" "/var/spool/lpd"
do
if ! test -d "$d"
then
mkdir -pv "$d"
fi
done
apt-get update -qq
install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget" "nmap" "libxml2-utils" "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
for i in \
DCP-{11{0,5,7}C,120C,31{0,5}CN,340CW} \
FAX-{18{15,20,35,40}C,19{2,4}0CN,2440C} \
MFC-{21{0,5}C,32{2,4}0C,33{2,4}0CN,3420C,3820CN,4{1,2}0CN,425CN,5440CN,5840CN,620CN,640CW,820CW}
do
if test "$i" = "$modelName"
then
install_pkg "csh"
fi
done
for i in \
DCP-{1{0,4}00,80{{20,25D},{40,45D},{60,65DN}}} \
FAX-{2{850,900},3800,4{100,750e},5750e} \
HL-{1{030,230,2{4,5}0,270N,4{3,4,5}0,470N,650,670N,850,870N},5{0{3,4,5}0,070N,1{3,4}0,150D,170DN,240,2{5,7}0DN,280DW},6050{,D}} \
MFC-{4800,6800,8{4{20,40,60N},500,660DN,8{20D,40D,60DN,70DW}},9{0{3,7}0,1{6,8}0,420CN,660,7{0,6}0,8{0,6,8}0}}
do
if test "$i" = "$modelName"
then
verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"
if test -L /sbin/init
then
verif_lien "/lib/systemd/system/cups.service" "/lib/systemd/system/lpd.service"
systemd daemon-reload
fi
fi
done
###############################
# téléchargement des pilotes #
###############################
#echo " DL DRV TAB == ${printer[*]}"
for drv in "${printer[@]}"
do
if [[ $drv == @($printerName|no|yes) ]]; then continue;fi
for addr in "$Url_Pkg" "$Url2_Pkg"
do
if ! test -f "$tmpDir/$drv"
then
Url_Deb="$addr/$drv"
if test "$drv" = "${printer[udev_rules]}"
then
Url_Deb="$Udev_Deb_Url/$drv"
fi
wget -cP "$tmpDir" "$Url_Deb"
else
break
fi
done
pkg2install+=( "$tmpDir/$drv" )
done
#echo "PKG2INSTALL == ${pkg2install[@]}"
#installation des pilotes
dpkg --install --force-all "${pkg2install[@]}"
##
##################################
# configuration de l'imprimante #
##################################
#retrouver le fichier `.ppd' pour l'imprimante
for drv in "PRN_CUP_DEB" "PRN_DRV_DEB"
do
pkg=${printer[$drv]}
#echo "pkg == $pkg"
if test -n "$pkg" -a -f "$tmpDir/$pkg"
then
while read -d '' fileName
do
PPDs+=( "$fileName" )
done < <(dpkg --contents "$tmpDir/$pkg" | gawk 'BEGIN{ORS="\0"} /ppd/{sub(".","",$NF); print $NF}')
fi
done
#echo "PPDs == ${PPDs[*]}"
if test -z "$Ppd_File"
then
PPDs=( /usr/share/cups/model/**/*brother*@($printerName|$modelName)*.ppd )
fi
case ${#PPDs[*]} in
0) echo "no ppd"
err+=1
;;
1) echo one ppd
Ppd_File=${PPDs[0]}
;;
*) err+=1
echo "more than one ppd"
Ppd_File=${PPDs[0]}
;;
esac
cp /etc/cups/printers.conf.O /etc/cups/printers.conf "$tmpDir"
systemctl restart cups
sleep 1
if test -n "$IP"
then
lpadmin -p "$modelName" -E -v "lpd://$IP/binary_p1" -P "$Ppd_File"
else
lpadmin -p "$modelName" -E -v 'usb://dev/usb/lp0' -P "$Ppd_File"
fi
#############################
# configuration du scanner #
#############################
if test -z "ÎP"
then #USB
if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
then
echo " - Règle udev deja presente dans le fichier $Udev_Rules"
else
sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
udevadm control --reload-rules
fi
else #network
for saneConf in /usr/bin/brsaneconfig{,{2..5}}
do
test -x "$saneConf" && cmd=$saneConf
done
if test -z "$cmd"
then
errQuit "no brsaneconfig found."
elif test "$cmd" = '/usr/bin/brsaneconfig4'
then
sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
fi
$cmd -a name=SCANNER model="$modelName" ip="$IP"
fi
if test -d "$libDir"
then
case $cmd in
/usr/bin/brsaneconfig)
cd "$libDir" || exit;
cp --force /usr/lib64/libbrcolm.so.1.0.1 .
ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
ln -sf libbrcolm.so.1 libbrcolm.so
cp --force /usr/lib64/libbrscandec.so.1.0.0 "$libDir"
ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
ln -sf libbrscandec.so.1 libbrscandec.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
ln -sf libsane-brother.so.1 libsane-brother.so
;;
/usr/bin/brsaneconfig2)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
ln -sf libbrscandec2.so.1 libbrscandec2.so
cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
ln -sf libbrcolm2.so.1 libbrcolm2.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
ln -sf libsane-brother2.so.1 libsane-brother2.so
;;
/usr/bin/brsaneconfig3)
cd "$libDir" || exit
cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
ln -sf libbrscandec3.so.1 libbrscandec3.so
cd "$libDir"/sane || exit
cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
ln -sf libsane-brother3.so.1 libsane-brother3.so
;;
/usr/bin/brsaneconfig4)
cd "$libDir"/sane || exit
ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
ln -sf libsane-brother4.so.1 libsane-brother4.so
;;
/usr/bin/brsaneconfig5)
cd "$libDir"/sane || exit
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
;;
esac
fi
Dernière modification par iznobe (Hier à 18:33)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#245 Hier à 18:26
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
Et avahi-browse ne convient pas pour découvrir le nom et modèle de son imprimante réseau sans avoir à s'occuper de son I.P ? Non ?
Je me permettais une redite car il semblerait que mon post précédent soit passé inaperçu. Après, ce n'était peut-être pas une bonne idée...N.B : Je n'ai pas de modèle Brother sous la main mais le principe est le même avec une autre marque.
je ne connais pas du tout, mais si tu peux mettre ce que tu obtiens chez toi avec , ca nous eclairerais bien sur les possibilités offertes , ca a l' air inintéressant à 1ere vue
EDIT : je n' ai peut etre pas mis les bonnes options , mais moi qui trouvait que 4 secondes pour nmap c' etait long , là , ca fait plus de 5 minutes qu ' il scanne ...
Dernière modification par iznobe (Hier à 18:52)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#246 Hier à 19:19
- lynn
Re : remise au gout du jour du script de demonipuch imprimante brother
Il faut juste installer le paquet avahi-utils et ça donne ça en brut :
avahi-browse --all -t
+ eno1 IPv6 BRAVIA 4K VH2 AirPlay Remote Video local
+ eno1 IPv4 BRAVIA 4K VH2 AirPlay Remote Video local
+ eno1 IPv6 BRAVIA 4K VH2 _androidtvremote2._tcp local
+ eno1 IPv4 BRAVIA 4K VH2 _androidtvremote2._tcp local
+ eno1 IPv6 adb-a064be005011114 _adb._tcp local
+ eno1 IPv4 adb-a064be005011114 _adb._tcp local
+ eno1 IPv6 freebox FTP File Transfer local
+ eno1 IPv4 freebox FTP File Transfer local
+ eno1 IPv6 BRAVIA-4K-VH2-38f80db9924ded0e2411b63d6bfdf5c7 _googlecast._tcp local
+ eno1 IPv4 BRAVIA-4K-VH2-38f80db9924ded0e2411b63d6bfdf5c7 _googlecast._tcp local
+ eno1 IPv4 freebox Microsoft Windows Network local
+ eno1 IPv4 freebox Secure Web Site local
+ eno1 IPv4 freebox _fbx-api._tcp local
+ eno1 IPv4 freebox Web Site local
+ eno1 IPv4 Canon MF620C Series Web Site local
Y a plus qu'à toper l'imprimante avec le pattern voulu. Un exemple en #219
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#247 Hier à 19:22
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
ha , c' est plus rapide que nmap ( avec les bonnes options ) , manqe plus que l ' IP ( V4
) et c' est parfait .
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#248 Hier à 19:26
- diesel
Re : remise au gout du jour du script de demonipuch imprimante brother
Chez moi :
jean-marie@jean-marie:~$ avahi-browse --all -t
+ enp25s0 IPv6 Brother HL-L3230CDW series Internet Printer local
+ enp25s0 IPv4 Brother HL-L3230CDW series Internet Printer local
+ enp25s0 IPv6 E393930EE393 iPod Touch Music Library local
+ enp25s0 IPv4 E393930EE393 iPod Touch Music Library local
+ enp25s0 IPv4 Brother HL-L3230CDW series Web Site local
+ enp25s0 IPv6 Brother HL-L3230CDW series Web Site local
jean-marie@jean-marie:~$
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#249 Hier à 19:35
- iznobe
Re : remise au gout du jour du script de demonipuch imprimante brother
To resolve a hostname to an IPv4 address with avahi-resolve:
avahi-resolve -n -4 <host>.local
effectivement , c' est bien plus propre et plus rapide que nmap , du coup et evolutif , pour ceux qui voudront s' y coller pour l' IPV6
iznobe@iznobe-pc:~$ avahi-resolve-host-name M-PI3.local
m-pi3.local fe80:xxxxxxxxx:c227
iznobe@iznobe-pc:~$ avahi-resolve -n -4 M-PI3.local
m-pi3.local 192.168.1.132
iznobe@iznobe-pc:~$ avahi-resolve -n -6 M-PI3.local
m-pi3.local fe80:xxxxxxxxx:c227
iznobe@iznobe-pc:~$
Dernière modification par iznobe (Hier à 19:40)
retour COMPLET et utilisable de commande | script montage partitions
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#250 Hier à 20:37
- Watael
Re : remise au gout du jour du script de demonipuch imprimante brother
+ printer IP est bien un tableau ( enfin c' est l' idée du moins , de façon a recuperer plusieurs IP le cas echeant ) .
alors
printer_IP=( $(nmap -sn -oG - "$my_IP"/24 | gawk 'tolower($3) ~ /brother/{print $2}') )
pas besoin de guillemets : on sait que le $2 de awk est insécable.
pour le case, c'est moi qui ait mal lu « plus d'une imprimante »
si grep ne se suffit pas à lui-même*, pense awk.
--
* pareil pour sed
Dernière modification par Watael (Hier à 20:38)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne