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 14/06/2022, à 12:48

Vividevinci

Problème au lancement d'un script avec udev

Bonjour à tous !

Je souhaite démarrer un script au branchement d'une clé USB. Ce script lance un script Python qui permet d'analyser la clé et proposer diverses options.
Mon problème est que j'ai un message d'erreur que je ne comprends pas :

Effectivement, quand je lance un script classique (un echo dans un texte, par exemple), cela fonctionne. Quand je lance manuellement mon script qui lance mon Python, cela fonctionne également. En revanche, pas moyen de faire fonctionner en passant par la règle udev.

Voici les informations :

ma règle udev :

KERNEL=="sdb", ACTION=="add", ATTRS{serial}=="4C530000210704216231", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/station_blanche/.Xauthority", RUN+="/bin/bash -c '/usr/local/bin/script.sh'"

Evidemment, j'applique bien la commande

udevadm control --reload

après modification.

Mon script "script.sh"' :

#! /bin/bash
gnome-terminal -- bash -c " /usr/local/bin/helloworld.py;bash"

et mon script Python. Je ne sais pas si c'est très pertinent de le mettre en entier, car comme dit précédemment, il est bien fonctionnel lorsque je lance script.sh indépendamment :

#!/usr/bin/python3
# Filename :helloworld.py
# coding: utf-8
import os
from pathlib import Path
import shutil

print ('Bonjour, analyse antivirale en cours...')
prenom = input("Indiquez votre prénom :")
nom = input("Indiquez votre nom :")
print("Merci pour ces informations ! Veuillez patienter une 20aine de secondes...")

fichier = open("/home/station_blanche/Documents/logs/analyse_cache.txt","w")
fichier.write("\n\n\n-------------Nouvelle Analyse----------- \n Analyse par :" + str(prenom) + " " + str(nom) + "\n\n")
fichier.close()


os.system("clamscan -r --remove  -v /media/station_blanche/Cle_Station_Blanche/ >> /home/station_blanche/Documents/logs/analyse_cache.txt")


fichier = open("/home/station_blanche/Documents/logs/analyse_cache.txt","a")
fichier.write("Analyse par :" + str(prenom) + " " + str(nom) + "\n\n\n\n")
fichier.close()

fichier = open("/home/station_blanche/Documents/logs/analyse_cache.txt","r")
donnes =fichier.read()
fichier.close()
print(donnes)

fichier = open("/home/station_blanche/Documents/logs/analyse.txt","a");
fichier.write(donnes)
fichier.close()

if os.path.exists("/home/station_blanche/Documents/Copie/Cle_Station_Blanche/MAJ/"):
	print("Fichiers de mises à jour trouvés. Voulez vous mettre à jour l'antivirus ? O/N")
	user_input = input()
	if user_input == 'O':
		if os.path.isfile("/media/station_blanche/Cle_Station_Blanche/MAJ/main.cvd"):
			os.system("sudo cp /media/station_blanche/Cle_Station_Blanche/MAJ/main.cvd /var/lib/clamav")
			print("Mise à jour effectuée. Copie en cours...")
		if os.path.isfile("/media/station_blanche/Cle_Station_Blanche/MAJ/daily.cvd"):
			os.system("sudo cp /media/station_blanche/Cle_Station_Blanche/MAJ/daily.cvd /var/lib/clamav")
			print("Mise à jour effectuée. Copie en cours...")
		if os.path.isfile("/media/station_blanche/Cle_Station_Blanche/MAJ/bytecode.cvd"):
			os.system("sudo cp /media/station_blanche/Cle_Station_Blanche/MAJ/bytecode.cvd /var/lib/clamav")
			print("Mise à jour effectuée. Copie en cours...")
	else:
		print("Vous faites le choix de ne pas faire les mises à jour. Copier quand même le contenu ? O/N")
		user_input = input()
		if user_input == 'O':
			os.system("rm -r /home/station_blanche/Documents/Copie/")
			shutil.copytree("/media/station_blanche/", "/home/station_blanche/Documents/Copie")
		else:
			print("Bien reçu. Privilégiez tout de même les mises à jour. A bientôt.")
else:
	os.system("rm -r /home/station_blanche/Documents/Copie/")
	shutil.copytree("/media/station_blanche/", "/home/station_blanche/Documents/Copie")
print("Copie effectué ! N'oubliez pas de débrancher proprement les deux supports")

je rajoute également le

 ls -l

  :

-rwxrwxrwx 1 station_blanche station_blanche   77 juin  14 11:59 script.sh
-rwxr-xr-x 1 station_blanche root            2826 juin  14 11:54 helloworld.py

Et enfin, le message d'erreur dans mon

journalctl -f 

:

juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: Running command "/bin/bash /usr/local/bin/script.sh"
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: Starting '/bin/bash /usr/local/bin/script.sh'
juin 14 12:01:28 stationblanche systemd-udevd[5388]: Successfully forked off '(spawn)' as PID 5407.
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: '/bin/bash /usr/local/bin/script.sh'(err) 'No protocol specified'
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: '/bin/bash /usr/local/bin/script.sh'(err) 'Unable to init server: Could not connect: Connection refused'
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: '/bin/bash /usr/local/bin/script.sh'(err) '# Failed to parse arguments: Cannot open display: '
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: Process '/bin/bash /usr/local/bin/script.sh' failed with exit code 1.
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: Command "/bin/bash /usr/local/bin/script.sh" returned 1 (error), ignoring.
juin 14 12:01:28 stationblanche systemd-udevd[5388]: sdb: Running command "/usr/bin/unshare -m /usr/bin/snap auto-import --mount=/dev/sdb"

Je ne sais plus quoi faire pour rendre ce script fonctionnel. j'ai testé pas mal de pistes, mais rien à faire. Pourriez-vous m'aider ?

Merci d'avance !

Hors ligne

#2 Le 14/06/2022, à 16:45

Tawal

Re : Problème au lancement d'un script avec udev

Hello,

Ton script est bien lancé par la règle udev, mais il rencontre quelques soucis.
Le souci est qu'il ne peut pas se connecter au serveur X,
et la raison est que ton script est lancé en tant que root et donc les variables d'environnement telles que DISPLAY, DBUS_SESSION_BUS_ADDRESS ... ne sont pas définies.

Tu peux tenter de modifier ton script de la sorte :

#! /bin/bash
DISPLAY=:0 gnome-terminal -- bash -c " /usr/local/bin/helloworld.py;bash"

ou

#! /bin/bash
export DISPLAY=:0
gnome-terminal -- bash -c " /usr/local/bin/helloworld.py;bash"

Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#3 Le 15/06/2022, à 07:47

Vividevinci

Re : Problème au lancement d'un script avec udev

Bonjour Tawal, merci pour ta réponse.

j'ai bien modifié mon script de la sorte, mais cela ne fonctionne toujours pas.

Cependant, le message d'erreur n'est pas tout à fait le meme : il n'indique pas avoir réussi à lancer le script. En revanche, il reste avec cette erreur "1" :

sdb: Process '/bin/bash /usr/local/bin/script.sh' failed with exit code 1.

Il s'agit de la seule ligne concernant mon script dans le journalctl -f, contrairement à avant.

Merci pour ton temps !

Hors ligne

#4 Le 15/06/2022, à 11:11

Tawal

Re : Problème au lancement d'un script avec udev

Et si tu essayais avec ce script :

#!/bin/bash
DISPLAY=:0 gnome-terminal -x "/usr/local/bin/helloworld.py; bash"

Mais j'ai bien l'impression que tu te compliques la vie.
Une règle udev  qui lance un script bash qui lance un script python qui va lancer une commande système ...
Ensuite, une règle udev n'est pas forcément nécessaire, il existe déjà un gestionnaire des médias amovibles qui permet de lancer une commande à l'insertion.

Pour revenir au sujet brut, si tu as toujours une erreur, c'est ton script python qui est en cause.

Edit:
Trouvé une erreur (corrigée ici, pas dans les messages précédents) : un espace en trop dans le shebang :
   #! /bin/bash  ==>  #!/bin/bash
Donc commencer par corriger cette erreur dans le script wink

Dernière modification par Tawal (Le 15/06/2022, à 11:52)


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#5 Le 15/06/2022, à 15:33

Vividevinci

Re : Problème au lancement d'un script avec udev

Merci pour tes conseils !

Malheureusement, le shebang ne semble pas être l'erreur majeure. Après de multiples tests, je constate que c'est suite à l'utilisation de "gnome-terminal" que le prgramme plante.
En effet, si j'applique "gnome-terminal" pour des usages plus basiques ( un simple echo, par exemple), j'ai le même message d'erreur.

J'aimerais creuser un petit peu plus le gestionnaire des médias amovibles ; mais, je ne trouve pas de possibilités concernant une clé USB classique. Il est majoritairement proposé des CD/ DVD... si vous avez des conseils, je suis preneur !

Si vous avez encore des pistes concernant l'exécution de mon script, ce serait très gentil, je vous en remercie d'avance smile

Hors ligne

#6 Le 15/06/2022, à 18:02

Tawal

Re : Problème au lancement d'un script avec udev

N'étant pas sur Ubuntu, je ne vais pas pouvoir t'aider plus.
Attend d'autres avis.

Sorry sad


Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne