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.

#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" smile, 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.

En 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)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

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. hmm c'est une demie-vérité, parce que n'importe qui ne peut pas y écrire.


Connected \o/
Welcome to sHell. · eval is evil.

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


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

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 wink

Watael a écrit :

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

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.

En ligne

#9 Le 17/08/2024, à 13:20

krodelabestiole

Re : déclencher un script perso au lancement d'un programme

lolo5050 a écrit :

@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

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

lolo5050 a écrit :

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.

En ligne

#11 Le 17/08/2024, à 15:11

lolo5050

Re : déclencher un script perso au lancement d'un programme

Watael a écrit :

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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

Hors ligne

#13 Le 17/08/2024, à 16:03

lolo5050

Re : déclencher un script perso au lancement d'un programme

jplemoine a écrit :

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.

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.


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

Hors ligne

#15 Le 17/08/2024, à 16:43

lolo5050

Re : déclencher un script perso au lancement d'un programme

jplemoine a écrit :

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 wink

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.

En 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)

Hors ligne

#18 Le 17/08/2024, à 17:38

lolo5050

Re : déclencher un script perso au lancement d'un programme

Watael a écrit :

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 hmm

Hors ligne

#19 Le 17/08/2024, à 19:44

jplemoine

Re : déclencher un script perso au lancement d'un programme

krodelabestiole a écrit :

ou protocole autre que ping

lolo5050 a écrit :

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


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

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

jplemoine a écrit :

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

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)


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

Hors ligne