#1 Le 16/08/2024, à 21:22
- lolo5050
déclencher un script perso au lancement d'un programme
Bonjour à tous !
Je viens d'installer une vieille imprimante HP laserjet 1020 au travers d'un serveur d'impression, et cette dernière refuse d'imprimer tant qu'elle n'a pas reçu son plugin. Bien évidemment son pilote est installé, en USB, ça fonctionne.
Bref, à chaque allumage de l'imprimante, j'ai besoin d'exécuter manuellement ce script avant d'imprimer.
Tant que je n'éteind pas l'imprimante, ensuite, c'est bon, plus besoin, mais pas envie de laisser allumée H24.
#! /bin/sh
cd imprimantehp
nc mf55055e.home 9100 < hp_laserjet_1020.fw
#
Bien sûr, c'est dans un fichier .sh
(mf55055E est mon serveur)
L'idéal serait d'automatiser ce script au lancement d'une commande d'impression, (CTRL + P) par exemple, ou fichier/imprimer ... mais je ne sais pas comment faire, je ne suis qu'un passioné curieux, il m'a déjà fallu plusieurs jours pour écrire ce bout de code...
Je suis sous linux mint 21.3
Merci d'avance !
Laurent
Dernière modification par lolo5050 (Le 17/08/2024, à 16:05)
Hors ligne
#2 Le 16/08/2024, à 21:44
- Watael
Re : déclencher un script perso au lancement d'un programme
Bonjour,
d'un point de vue strictement "scriptique" , ton script devrait être écrit ainsi
#!/bin/sh
chemin=/chemin/vers/inprimantehp #où "/chemin/vers" est le chemin absolu vers le répertoire "imprimantehp"
fichier=hp_laserjet_1020.hw
nc mf55055e.home 9100 <"$chemin/$fichier"
hormis ceci, je ne sais pas, parce que CTRL+P est un raccourci (pour Fichier/Imprimer) pour lancer une impression depuis à peu près tous les programmes graphiques...
existe-t-il une commande qui peut interroger l'imprimante, pour savoir si elle est complètement allumée, et fonctionnelle ?
parce qu'alors, on peut imaginer un service systemd qui interroge l'imprimante puis exécute le script une fois, et lève un "drapeau", et puis qui le baissera quand l'imprimante est hors-ligne...
Dernière modification par Watael (Le 16/08/2024, à 21:46)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 16/08/2024, à 22:02
- Sciensous
Re : déclencher un script perso au lancement d'un programme
est-ce que la procédure de lancer le script avant d'allumer l'imprimante, et d'ensuite allumer et imprimer fonctionne ?
(ça simplifierait la chose: lancer la commande au démarrage du pc)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#4 Le 16/08/2024, à 22:18
- jplemoine
Re : déclencher un script perso au lancement d'un programme
Perso, dans un tel cas, je ferais lancer le script au démarrage et toutes les N minutes via 2 lignes dans un fichier de /etc/cron.d (C'est ce qui a remplacé crontab -e)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#5 Le 16/08/2024, à 22:28
- Watael
Re : déclencher un script perso au lancement d'un programme
[...]/etc/cron.d (C'est ce qui a remplacé crontab -e)
mouais. c'est une demie-vérité, parce que n'importe qui ne peut pas y écrire.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 17/08/2024, à 04:58
- jplemoine
Re : déclencher un script perso au lancement d'un programme
@Watael : Je suis d'accord avec toi. C'est vrai que c'est un peu "expéditif". Mais ça fait partie des bonnes pratiques (quand on a les droits).
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#7 Le 17/08/2024, à 09:21
- lolo5050
Re : déclencher un script perso au lancement d'un programme
Bonjour, et merci à tous pour votre participation, trop bien
existe-t-il une commande qui peut interroger l'imprimante, pour savoir si elle est complètement allumée, et fonctionnelle ?
parce qu'alors, on peut imaginer un service systemd qui interroge l'imprimante puis exécute le script une fois, et lève un "drapeau", et puis qui le baissera quand l'imprimante est hors-ligne...
@ Watael: voilà une idée qu'elle est bonne, mais je n'ai aucune idée de comment faire, et il faudrait n'envoyer le script qu'une seule fois lorsque le statut de l'imprimante est "inactif" , sinon, après un job, elle repasse en "inactif" et (voir ma réponse à @ jplemoine )
De plus, je viens de vérifier, elle ne change pas de statut après lancement du script. Seul un "job" la fait changer de statut.
@Sciensous: Hélas, l'imprimante doit être allumée au préalable, sinon, je crois que j'aurais peut-être réussi à bricoler un truc avec systemd.
@jplemoine: C'est une piste, il faut savoir qu'à chaque fois que j'envoie le script, l'imprimante produit des bruits mécaniques, comme à l'allumage, (pendant 2 secondes) donc toutes les 2 minutes, ça va être pénible.
C'est comme si elle avait besoin d'être "amorcée" pour démarrer (sinon, les jobs partent, mais rien ne s'imprime).
Au hasard de mes manips, j'ai constaté que quand j'utilisais l'imprimante au préalable en usb, elle restait ensuite OK pour fonctionner en réseau, avec n'importe quel PC. (même sous Win... ) Après extinction, rebelotte, j'en avais déduit qu'elle devait recevoir "quelque chose" au préalable.
Il faudrait que ma commande (mal écrite j'avoue, mais ce n'est pas ma formation ) parte, idéalement, au moment ou s'ouvre la première fenêtre de menu d'impression, lorsque l'on vient de décider d'imprimer un document, juste avant de choisir l'imprimante, les options d'impression...
Ah oui, et donc en USB direct, ce problème n'existe pas, juste au travers du serveur (ou de ma box en serveur, testé aussi).
Avec le grossoft, (ainsi que son pilote proprio) idem.
Une mission difficile aurait été un jeu d'enfant pour vous, il s'agit d'une mission... impossible
Laurent
Dernière modification par lolo5050 (Le 17/08/2024, à 09:32)
Hors ligne
#8 Le 17/08/2024, à 13:10
- Watael
Re : déclencher un script perso au lancement d'un programme
si l'imprimante répond, c'est qu'elle est allumée et fonctionnelle, quelle que soit la réponse
si le script n'a pas encore été exécuté (le drapeau est absent), alors on exécute nc, et on crée le drapeau.
si l'imprimante ne répond pas (elle est éteinte), on supprime le drapeau (s'il existe), et on quitte.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 17/08/2024, à 13:20
- krodelabestiole
Re : déclencher un script perso au lancement d'un programme
@Sciensous: Hélas, l'imprimante doit être allumée au préalable, sinon, je crois que j'aurais peut-être réussi à bricoler un truc avec systemd.
elle est branchée en USB ?
dans ce cas tu pourrais automatiser le lancement du script à sa connexion au moyen d'une règle udev : 5.3 Exécuter des programmes sur des événements
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#10 Le 17/08/2024, à 13:34
- Watael
Re : déclencher un script perso au lancement d'un programme
c'est une bonne idée, mais
en USB direct, ce problème n'existe pas
lolo5050 : tu peux nous détailler la topologie de ton réseau et la place de l'imprimante, stp ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 17/08/2024, à 15:11
- lolo5050
Re : déclencher un script perso au lancement d'un programme
si l'imprimante répond, c'est qu'elle est allumée et fonctionnelle, quelle que soit la réponse
si le script n'a pas encore été exécuté (le drapeau est absent), alors on exécute nc, et on crée le drapeau.
si l'imprimante ne répond pas (elle est éteinte), on supprime le drapeau (s'il existe), et on quitte.
Mais comment automatiser cela ? je ne comprends pas l'histoire de drapeau, je suis en train de me documenter.
@ Watael :mon serveur d'impression est raccordé en ethernet à une sortie de ma livebox, l'imprimante est branchée en USB sur le serveur, tout simplement.
Le problème est le même lorsque je branche l'imprimante en USB direct sur la box, toutes les manip avec samba et le partage d'imprimante donnent le même résultat
.
Hors ligne
#12 Le 17/08/2024, à 15:13
- jplemoine
Re : déclencher un script perso au lancement d'un programme
Je viens d'avoir une autre idée si on peut avoir l'uptime de l'imprimante.
Sur la mienne, on peut l'avoir avec
snmpwalk -v 2c -c public 192.168.1.12 iso.3.6.1.2.1.1.3.0
- On calcule l'uptime de l'imprimante
- Dans le script, on modifie pour mettre l'uptime si on envoie la commande
- Si l'uptime est inférieur à la valeur du fichier texte, on envoie la commande (ie : c'est que l'imprimante a été redémarrée depuis la dernière execution) et on met l'uptime dans le fichier
- Sinon (l'uptime de l'imprimante est supérieur à la valeur stockée), on ne fait rien.
Le script peut alors être lancé depuis le cron assez régulièrement (toutes les 2 mns par exemple) sans avoir le désagrément décrit précédement.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#13 Le 17/08/2024, à 16:03
- lolo5050
Re : déclencher un script perso au lancement d'un programme
Je viens d'avoir une autre idée si on peut avoir l'uptime de l'imprimante.
Sur la mienne, on peut l'avoir avecsnmpwalk -v 2c -c public 192.168.1.12 iso.3.6.1.2.1.1.3.0
- On calcule l'uptime de l'imprimante
- Dans le script, on modifie pour mettre l'uptime si on envoie la commande
- Si l'uptime est inférieur à la valeur du fichier texte, on envoie la commande (ie : c'est que l'imprimante a été redémarrée depuis la dernière execution) et on met l'uptime dans le fichier
- Sinon (l'uptime de l'imprimante est supérieur à la valeur stockée), on ne fait rien.Le script peut alors être lancé depuis le cron assez régulièrement (toutes les 2 mns par exemple) sans avoir le désagrément décrit précédement.
Voici ce que me renvoie la commande snmpwalk:
pavilion@pavilion-HP-Pavilion-TS-14-Notebook-PC:~$ snmpwalk -v 2c -c public 192.168.1.34
Timeout: No Response from 192.168.1.34
Imprimante (allumée bien sur) ayant reçu le script ou pas, ça ne change rien.
Hors ligne
#14 Le 17/08/2024, à 16:31
- jplemoine
Re : déclencher un script perso au lancement d'un programme
Je pense qu'il faut activer le snmp au niveau de l'imprimante (voir le manuel spécifique et/ou un site web). En gros, activer le service "serveur snmp" au niveau de l'imprimante.
Là, l'imprimante ne répond pas.
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#15 Le 17/08/2024, à 16:43
- lolo5050
Re : déclencher un script perso au lancement d'un programme
Je pense qu'il faut activer le snmp au niveau de l'imprimante (voir le manuel spécifique et/ou un site web). En gros, activer le service "serveur snmp" au niveau de l'imprimante.
Là, l'imprimante ne répond pas.
OK, je vois ce que je peux faire, en plus il faut aussi que je comprenne de quoi il s'agit.
En tout cas, c'est cool le coup de main
Hors ligne
#16 Le 17/08/2024, à 17:13
- Watael
Re : déclencher un script perso au lancement d'un programme
le serveur d'impression, c'est "une boîte noire" (un dispositif électronique fermé (comme un switch réseau); tu peux nous donner la marque et le modèle ?), ou c'est un PC avec (ou pas) d'autres services réseaux ?
si je comprends bien il y a trois cas de figures :
- imprimante sur serveur d'impression : il faut envoyer le fichier .fw
- imprimante sur box internet : pareil ?
- imprimante sur PC : là, ça marche sans devoir envoyer le fichier via nc
tu as interrogé le service client du fabricant ?
le "drapeau", ça peut n'être qu'un fichier vide (à moins d'avoir une information à retenir) créé sous /tmp (il sera donc effacé au prochain redémarrage du PC) ou supprimé selon le cas
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 17/08/2024, à 17:20
- krodelabestiole
Re : déclencher un script perso au lancement d'un programme
je pense que le système de flag est plus simple et plus fiable que de comparer l'uptime de l'imprimante avec le précédent :
pas besoin de snpm ou protocole autre que ping, et au lieu de stocker un uptime on stocke juste un booléen (on créé ou supprime un fichier pour faire simple - c'est ça le "drapeau").
(crosspost)
Dernière modification par krodelabestiole (Le 17/08/2024, à 17:21)
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#18 Le 17/08/2024, à 17:38
- lolo5050
Re : déclencher un script perso au lancement d'un programme
le serveur d'impression, c'est "une boîte noire" (un dispositif électronique fermé (comme un switch réseau); tu peux nous donner la marque et le modèle ?), ou c'est un PC avec (ou pas) d'autres services réseaux ?
si je comprends bien il y a trois cas de figures :
- imprimante sur serveur d'impression : il faut envoyer le fichier .fw
- imprimante sur box internet : pareil ?
- imprimante sur PC : là, ça marche sans devoir envoyer le fichier via nc
tu as interrogé le service client du fabricant ?le "drapeau", ça peut n'être qu'un fichier vide (à moins d'avoir une information à retenir) créé sous /tmp (il sera donc effacé au prochain redémarrage du PC) ou supprimé selon le cas
Tu as tout compris, imprimante sur PC en USB , ça marche, et par déclinaison, ce même PC peut se comporter comme un serveur, d'impression, et ça fonctionne parfaitement, (sauf que je ne veux pas laisser tourner un PC dédié à cela).
Imprimante via la box, problème , obligé d'envoyer mon script.
Mon serveur est un EDIMAX MF55055e
Voici ce que retourne la commande :
nmap 192.168.1.*
Nmap scan report for mf55055e.home (192.168.1.34)
Host is up (0.017s latency).
Not shown: 992 closed ports
PORT STATE SERVICE
23/tcp open telnet
80/tcp open http
515/tcp open printer
631/tcp open ipp
9100/tcp open jetdirect
9101/tcp open jetdirect
9110/tcp open unknown
9111/tcp open DragonIDSConsole
Pas encore interrogé le fabricant
@Krodelabestiole: tu as peut-être raison, mais j'ai déjà beaucoup d'infos à comprendre, désolé, encore une fois, ce n'est pas mon domaine
Hors ligne
#19 Le 17/08/2024, à 19:44
- jplemoine
Re : déclencher un script perso au lancement d'un programme
ou protocole autre que ping
C'est comme si elle avait besoin d'être "amorcée" pour démarrer (sinon, les jobs partent, mais rien ne s'imprime).
J'en avais déduit (à tort ?) que l'imprimante répondait au ping mais n'était pas fonctionnelle tant que le script n'était pas lancé.
Si c'est comme vous dites (pas de réponse au ping = lancement du script), je suis d'accord : il suffit d'un simple fichier vide (si sous Linux) ou un texte fixe (qui ne sert à rien) sous W$ (à une époque, W$ n'aimait pas les fichiers vides : je ne sais pas si c'est toujours valable).
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne
#20 Le 17/08/2024, à 20:02
- lolo5050
Re : déclencher un script perso au lancement d'un programme
@ jplemoine: le fait de lancer mon script, "amorce" l'imprimante pour tous les PC du reseau, même ceux sous W$, ça peut être un indice ?
Hors ligne
#21 Le 18/08/2024, à 00:16
- krodelabestiole
Re : déclencher un script perso au lancement d'un programme
Si c'est comme vous dites (pas de réponse au ping = lancement du script)
ce qu'on dit c'est plutôt l'inverse.
pas de réponse au ping -> rien.
réponse au ping -> lancement du script (1x, ajout du flag printer_alive), jusqu'au prochain pas de réponse au ping (suppression du flag).
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#22 Le 18/08/2024, à 05:20
- jplemoine
Re : déclencher un script perso au lancement d'un programme
Oui. C'est (beaucoup) plus simple comme ça.
Le seul truc, c'est que si on veut juste redémarrer l'imprimante, il faut :
- soit supprimer le flag manuellement
- soit arrêter l'imprimante, attendre que le flag disparaisse, démarrer l'imprimante, attendre que le flag apparaisse
NB : J’avais juste oublier un truc : Si l'imprimante est éteinte, elle ne répond pas au ping. Si l'imprimante est allumée, elle répond au ping.
On peut être nul(le) par moment...
Dernière modification par jplemoine (Le 18/08/2024, à 05:20)
Ce compte ne servira plus : vous pouvez le supprimer si le coeur vous en dit...
Laissé par l'auteur pour historique.
Hors ligne