Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
materiel:logicos:start [2026/08/22 00:11]
vitally-u44 [1. Télécharger le script]
materiel:logicos:start [2026/08/23 17:08] (Version actuelle)
vitally-u44 [1. Télécharger le script]
Ligne 104: Ligne 104:
  
 ==== Logiciels de print ==== ==== Logiciels de print ====
- 
 ^ Nom (et lien vers la page de ce wiki) ^ Origine (lien projet) ^ Version ^ Type d'​installation ^ ^ Nom (et lien vers la page de ce wiki) ^ Origine (lien projet) ^ Version ^ Type d'​installation ^
-| [[https://​lesporteslogiques.net/​wiki/​materiel/​imprimante_thermique_brother_ql-570|ql570]] |  |  |  +<del>[[https://​lesporteslogiques.net/​wiki/​materiel/​imprimante_thermique_brother_ql-570|ql570]]</​del> ​|  |  | retiré des postes — voir [[#​desinstaller_l_ancienne_stickeuse_ql-570_des_op_xx|le nettoyage]] ​
-| Stickeuse ​QL570    |+| [[materiel:​logicos:​guideql570|Stickeuse ​QL-570]] ​[[https://​github.com/​lesporteslogiques/​stickeuse|origine]] ​v1.0 ''​install.sh''​ (dépôt) | 
 +[[materiel:​logicos:​guideql570|Guide d'​utilisation de Stickeuse QL-570]]
  
-[[materiel:logicos:​guideql570|Guide d'​utilisation de StickeuseQL570]]+Le lien vers la page matériel de l'​imprimante : [[materiel:imprimante_thermique_brother_ql-570|Brother QL-570]].
 ==== Logiciels de vidéo / création vidéo ==== ==== Logiciels de vidéo / création vidéo ====
  
Ligne 326: Ligne 326:
 ==== 1. Télécharger le script ==== ==== 1. Télécharger le script ====
  
-[[https://​lesporteslogiques.net/​wiki/​_media/​materiel/​logicos/​nettoyage_stickeuse.txt|nettoyage_stickeuse.txt]]+[[https://​lesporteslogiques.net/​wiki/​_export/​code/​materiel/​logicos/​start?​codeblock=6|nettoyage_stickeuse.txt]]
  
 Le fichier arrive dans le dossier **Téléchargements**. Le fichier arrive dans le dossier **Téléchargements**.
Ligne 365: Ligne 365:
 </​code>​ </​code>​
  
-Inventaire seul : **ne supprime rien**. ​Trois réponses possibles ​:+Inventaire seul : **ne supprime rien**. ​Deux cas :
  
-  * ''​Aucune trace de l'​ancienne Stickeuse sur ce poste.''​ — déjà nettoyé, ou jamais concernéS'arrêter ici. +  * ''​Aucune trace de l'​ancienne Stickeuse sur ce poste.''​ — le poste est propreNe pas lancer la commande suivante : vous pouvez taper ''​exit''​ pour refermer la session root, c'est terminé et vous fermez et rouvrez la session du poste et vous pouvez installer l'​application à partir du dépot GitHub 
-  * ''​N élément(s) à supprimer :''​ suivi de la liste — c'est ce qui partira à la commande suivante. +  * ''​N élément(s) à supprimer :''​ suivi de la liste — c'est ce qui sera effacé. Poursuivre avec la commande suivante. 
-  ​* ​''​brother_ql (pip) : présent — CONSERVÉ'' ​— la bibliothèque Python ​est partagée avec d'​autres usages du poste, le script ​la laisse volontairement. ​Message informatif.+ 
 +La ligne ''​brother_ql (pip) : présent — CONSERVÉ'' ​peut s'​ajouter à l'un ou 
 +l'​autre : c'est une bibliothèque ​partagée avec d'​autres usages du poste, ​que le 
 +script laisse volontairement ​en placeNe rien faire.
  
 <code bash> <code bash>
Ligne 382: Ligne 385:
  
   * ''​Aucun reste. Poste OPxx propre.''​ — nettoyage complet.   * ''​Aucun reste. Poste OPxx propre.''​ — nettoyage complet.
-  * ''​Restes à examiner :''​ suivi d'une liste — des fichiers ​subsistent hors des emplacements connus du scriptqui ne les touche pas. Relever la liste et la signaler. +  * ''​Restes à examiner :''​ suivi d'une liste — des fichiers ​dont le nom contient « stickeuse » ou « ql570 » existent ailleurs sur le disque. Le plus souvent, ce sont des documents personnels ou des fichiers en corbeillesans rapport avec l'​ancienne version : le script ​ne les touche pas, par prudenceCe n'est pas bloquant. Taper ''​exit'',​ l'​installation de la nouvelle version peut se faire.
 <code bash> <code bash>
 exit exit
Ligne 404: Ligne 406:
  
 ==== Le script ==== ==== Le script ====
 + 
 Auteurice : Vitally LUBIN — Les Portes Logiques, 2026. Auteurice : Vitally LUBIN — Les Portes Logiques, 2026.
 Licence : [[https://​www.gnu.org/​licenses/​agpl-3.0.html|GNU Affero General Public Licence : [[https://​www.gnu.org/​licenses/​agpl-3.0.html|GNU Affero General Public
 License v3 (AGPL-3.0)]],​ comme le reste du projet Stickeuse — et non la licence License v3 (AGPL-3.0)]],​ comme le reste du projet Stickeuse — et non la licence
 CC BY-SA du wiki (le pied de page réserve ce cas : //sauf mention contraire//​). CC BY-SA du wiki (le pied de page réserve ce cas : //sauf mention contraire//​).
 + 
 <​accordion>​ <​accordion>​
-<panel title="​nettoyage_stickeuse.sh (cliquer pour afficher le code)">​ +<panel title="​nettoyage_stickeuse.txt (cliquer pour afficher le code)">​ 
-<file bash nettoyage_stickeuse.sh>+<file bash nettoyage_stickeuse.txt>
 #​!/​usr/​bin/​env bash #​!/​usr/​bin/​env bash
 # #
 # ============================================================================ # ============================================================================
-#  nettoyage_stickeuse.sh  ​— ​ version 1.1+#  nettoyage_stickeuse.txt  ​— ​ version 1.1
 # #
 #  Retire l'​ANCIENNE Stickeuse QL-570 d'un poste OP (Les Portes Logiques). #  Retire l'​ANCIENNE Stickeuse QL-570 d'un poste OP (Les Portes Logiques).
Ligne 433: Ligne 435:
 #  UTILISATION RAPIDE #  UTILISATION RAPIDE
 #      su - #      su -
-#      bash nettoyage_stickeuse.sh -n     # inventaire seul, ne supprime rien +#      bash nettoyage_stickeuse.txt -n     # inventaire seul, ne supprime rien 
-#      bash nettoyage_stickeuse.sh        # inventorie, montre, demande, supprime+#      bash nettoyage_stickeuse.txt        # inventorie, montre, demande, supprime
 # #
 #  OPTIONS #  OPTIONS
Ligne 452: Ligne 454:
 #      Tout lanceur .desktop pointant vers elle est conservé et signalé. #      Tout lanceur .desktop pointant vers elle est conservé et signalé.
 # #
-#  Documentation complète : https://​lesporteslogiques.net/​wiki/​materiel/​logicos/​start+#  Documentation complète : 
 +#      ​https://​lesporteslogiques.net/​wiki/​materiel/​logicos/​start
 # ============================================================================ # ============================================================================
 + 
 # set -u : une variable non définie devient une erreur au lieu d'un vide # set -u : une variable non définie devient une erreur au lieu d'un vide
 #          silencieux. Sur un script qui fait des rm, c'est vital : « rm -rf #          silencieux. Sur un script qui fait des rm, c'est vital : « rm -rf
Ligne 463: Ligne 466:
 #  et le signaler dans le journal.) #  et le signaler dans le journal.)
 set -uo pipefail set -uo pipefail
 + 
 VERSION="​1.1"​ VERSION="​1.1"​
 HOTE="​$(hostname)" ​                       # sert à nommer le journal par poste HOTE="​$(hostname)" ​                       # sert à nommer le journal par poste
 HORODATE="​$(date +%Y%m%d-%H%M%S)"​ HORODATE="​$(date +%Y%m%d-%H%M%S)"​
 JOURNAL="​$(pwd)/​nettoyage_${HOTE}_${HORODATE}.log"​ JOURNAL="​$(pwd)/​nettoyage_${HOTE}_${HORODATE}.log"​
 + 
 # Drapeaux, modifiés plus bas par les options de la ligne de commande # Drapeaux, modifiés plus bas par les options de la ligne de commande
 INVENTAIRE_SEUL=0 INVENTAIRE_SEUL=0
 SANS_CONFIRMATION=0 SANS_CONFIRMATION=0
 AVEC_PIP=0 AVEC_PIP=0
 + 
 # Liste blanche : chemins de la NOUVELLE version, jamais supprimés. # Liste blanche : chemins de la NOUVELLE version, jamais supprimés.
 # Ajouter ici tout autre chemin à préserver. # Ajouter ici tout autre chemin à préserver.
 PROTEGES=("/​opt/​ql570"​) PROTEGES=("/​opt/​ql570"​)
 + 
 CIBLES=() ​       # ce qui sera supprimé CIBLES=() ​       # ce qui sera supprimé
 SIGNALES=() ​     # ce qui est conservé volontairement,​ mais mérite d'​être dit SIGNALES=() ​     # ce qui est conservé volontairement,​ mais mérite d'​être dit
 + 
 # ---------------------------------------------------------------- utilitaires # ---------------------------------------------------------------- utilitaires
 + 
 # Tout ce qui s'​affiche part aussi dans le journal : « tee -a » écrit sur la # Tout ce qui s'​affiche part aussi dans le journal : « tee -a » écrit sur la
 # sortie standard ET ajoute au fichier. Sur 30 postes, le journal est la seule # sortie standard ET ajoute au fichier. Sur 30 postes, le journal est la seule
Ligne 488: Ligne 491:
 msg()   { printf '​%s\n'​ "​$*"​ | tee -a "​$JOURNAL";​ } msg()   { printf '​%s\n'​ "​$*"​ | tee -a "​$JOURNAL";​ }
 titre() { printf '\n=== %s ===\n' "​$*"​ | tee -a "​$JOURNAL";​ } titre() { printf '\n=== %s ===\n' "​$*"​ | tee -a "​$JOURNAL";​ }
 + 
 # Le chemin appartient-il à la nouvelle version ? # Le chemin appartient-il à la nouvelle version ?
 # Le motif "​$p"/​* attrape aussi tout ce qui est DANS un dossier protégé. # Le motif "​$p"/​* attrape aussi tout ce qui est DANS un dossier protégé.
Ligne 498: Ligne 501:
   return 1   return 1
 } }
 + 
 # Ajoute un chemin à la liste de suppression,​ avec trois filtres : # Ajoute un chemin à la liste de suppression,​ avec trois filtres :
 #   1. chemin vide      -> ignoré (protection anti-« rm -rf » sur rien) #   1. chemin vide      -> ignoré (protection anti-« rm -rf » sur rien)
Ligne 517: Ligne 520:
   CIBLES+=("​$chemin"​)   CIBLES+=("​$chemin"​)
 } }
 + 
 signaler() { SIGNALES+=("​$1"​);​ } signaler() { SIGNALES+=("​$1"​);​ }
 + 
 # L'aide est l'​en-tête du fichier lui-même : une seule source, jamais de # L'aide est l'​en-tête du fichier lui-même : une seule source, jamais de
 # décalage entre la doc et le code. # décalage entre la doc et le code.
-aide() { sed -n '4,38p' "​$0"​ | sed 's/^# \{0,​1\}//';​ exit 0; } +aide() { sed -n '4,41p' "​$0"​ | sed 's/^# \{0,​1\}//';​ exit 0; } 
 + 
 # ------------------------------------------------------------------ arguments # ------------------------------------------------------------------ arguments
 + 
 while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
   case "​$1"​ in   case "​$1"​ in
Ligne 536: Ligne 539:
   shift   shift
 done done
 + 
 # EUID = identifiant effectif de l'​utilisateur ; 0 = root. # EUID = identifiant effectif de l'​utilisateur ; 0 = root.
 # Nécessaire pour /opt et /etc, et pour parcourir tous les /home. # Nécessaire pour /opt et /etc, et pour parcourir tous les /home.
Ligne 543: Ligne 546:
   exit 1   exit 1
 fi fi
- +  
-msg "​nettoyage_stickeuse.sh v${VERSION} — poste ${HOTE} — ${HORODATE}"​+msg "​nettoyage_stickeuse.txt v${VERSION} — poste ${HOTE} — ${HORODATE}"​
 msg "​Journal : ${JOURNAL}"​ msg "​Journal : ${JOURNAL}"​
 + 
 # ============================================================== 1. INVENTAIRE # ============================================================== 1. INVENTAIRE
 # Rien n'est supprimé ici : on ne fait que remplir CIBLES et SIGNALES. # Rien n'est supprimé ici : on ne fait que remplir CIBLES et SIGNALES.
 + 
 titre "1. Inventaire"​ titre "1. Inventaire"​
 + 
 # --- côté système ----------------------------------------------------------- # --- côté système -----------------------------------------------------------
 ajouter "/​opt/​stickeuse_ql570" ​     # dossier de l'​ancienne version ajouter "/​opt/​stickeuse_ql570" ​     # dossier de l'​ancienne version
 ajouter "/​usr/​local/​bin/​ql570" ​     # binaire C compilé de l'​ancienne version ajouter "/​usr/​local/​bin/​ql570" ​     # binaire C compilé de l'​ancienne version
 + 
 # Lanceurs du menu général. C'est ici que se joue la distinction ancienne / # Lanceurs du menu général. C'est ici que se joue la distinction ancienne /
 # nouvelle : la ligne « Exec= » du fichier .desktop dit quel programme est # nouvelle : la ligne « Exec= » du fichier .desktop dit quel programme est
Ligne 567: Ligne 570:
   fi   fi
 done done
 + 
 # Règles udev : elles donnent à l'​utilisateur le droit de parler à # Règles udev : elles donnent à l'​utilisateur le droit de parler à
 # l'​imprimante USB. Absentes sur OP60, présentes sur OP42. # l'​imprimante USB. Absentes sur OP60, présentes sur OP42.
Ligne 573: Ligne 576:
   [[ -e "​$f"​ ]] && ajouter "​$f"​   [[ -e "​$f"​ ]] && ajouter "​$f"​
 done done
 + 
 # --- côté utilisateurs ------------------------------------------------------ # --- côté utilisateurs ------------------------------------------------------
 # On balaie /home/* plutôt que d'​écrire un nom de compte en dur : il vaut # On balaie /home/* plutôt que d'​écrire un nom de compte en dur : il vaut
Ligne 580: Ligne 583:
 for maison in /home/*; do for maison in /home/*; do
   [[ -d "​$maison"​ ]] || continue   [[ -d "​$maison"​ ]] || continue
 + 
   ajouter "​$maison/​bin/​stickeuse_ql570" ​  # dossier de travail (OP60)   ajouter "​$maison/​bin/​stickeuse_ql570" ​  # dossier de travail (OP60)
   ajouter "​$maison/​.gitdl/​ql570" ​         # sources téléchargées (OP60)   ajouter "​$maison/​.gitdl/​ql570" ​         # sources téléchargées (OP60)
   ajouter "​$maison/​.ql570" ​               # journal d'​impression de l'​appli   ajouter "​$maison/​.ql570" ​               # journal d'​impression de l'​appli
 + 
   # Recherche par motif dans les dossiers de configuration.   # Recherche par motif dans les dossiers de configuration.
   # -maxdepth 1 : on ne descend pas dans les sous-dossiers,​ pour ne pas   # -maxdepth 1 : on ne descend pas dans les sous-dossiers,​ pour ne pas
Ligne 597: Ligne 600:
     done < <(find "​$d"​ -maxdepth 1 \( -iname '​*stickeuse*'​ -o -iname '​*ql570*'​ \) 2>/​dev/​null)     done < <(find "​$d"​ -maxdepth 1 \( -iname '​*stickeuse*'​ -o -iname '​*ql570*'​ \) 2>/​dev/​null)
   done   done
 + 
   # Lanceurs personnels : menu utilisateur,​ Bureau (session en français) et   # Lanceurs personnels : menu utilisateur,​ Bureau (session en français) et
   # Desktop (session en anglais). Même test Exec= que plus haut.   # Desktop (session en anglais). Même test Exec= que plus haut.
Ligne 611: Ligne 614:
   done   done
 done done
 + 
 # --- bibliothèque Python brother_ql ----------------------------------------- # --- bibliothèque Python brother_ql -----------------------------------------
 # Installée par pip en root dans /usr/local, donc partagée par tout le poste. # Installée par pip en root dans /usr/local, donc partagée par tout le poste.
Ligne 621: Ligne 624:
   PIP_PRESENT=1   PIP_PRESENT=1
 fi fi
 + 
 # --- restitution de l'​inventaire -------------------------------------------- # --- restitution de l'​inventaire --------------------------------------------
 if [[ ${#​CIBLES[@]} -eq 0 ]]; then if [[ ${#​CIBLES[@]} -eq 0 ]]; then
Ligne 629: Ligne 632:
   for c in "​${CIBLES[@]}";​ do msg " ​ - $c"; done   for c in "​${CIBLES[@]}";​ do msg " ​ - $c"; done
 fi fi
 + 
 if [[ ${#​SIGNALES[@]} -gt 0 ]]; then if [[ ${#​SIGNALES[@]} -gt 0 ]]; then
   msg ""​   msg ""​
Ligne 635: Ligne 638:
   for s in "​${SIGNALES[@]}";​ do msg " ​ ! $s"; done   for s in "​${SIGNALES[@]}";​ do msg " ​ ! $s"; done
 fi fi
 + 
 if [[ $PIP_PRESENT -eq 1 ]]; then if [[ $PIP_PRESENT -eq 1 ]]; then
   msg ""​   msg ""​
Ligne 644: Ligne 647:
   fi   fi
 fi fi
 + 
 if [[ $INVENTAIRE_SEUL -eq 1 ]]; then if [[ $INVENTAIRE_SEUL -eq 1 ]]; then
   msg ""​   msg ""​
Ligne 650: Ligne 653:
   exit 0   exit 0
 fi fi
 + 
 # Poste déjà propre : on s'​arrête là. # Poste déjà propre : on s'​arrête là.
 [[ ${#​CIBLES[@]} -eq 0 && $PIP_PRESENT -eq 0 ]] && exit 0 [[ ${#​CIBLES[@]} -eq 0 && $PIP_PRESENT -eq 0 ]] && exit 0
 + 
 # ============================================================ 2. CONFIRMATION # ============================================================ 2. CONFIRMATION
 + 
 if [[ $SANS_CONFIRMATION -eq 0 ]]; then if [[ $SANS_CONFIRMATION -eq 0 ]]; then
   printf '​\nSupprimer les éléments ci-dessus ? [o/N] '   printf '​\nSupprimer les éléments ci-dessus ? [o/N] '
Ligne 665: Ligne 668:
   esac   esac
 fi fi
 + 
 # ============================================================= 3. SUPPRESSION # ============================================================= 3. SUPPRESSION
 + 
 titre "2. Suppression"​ titre "2. Suppression"​
 + 
 UDEV_TOUCHE=0 UDEV_TOUCHE=0
 for c in ${CIBLES[@]+"​${CIBLES[@]}"​};​ do for c in ${CIBLES[@]+"​${CIBLES[@]}"​};​ do
Ligne 683: Ligne 686:
   fi   fi
 done done
 + 
 # Sans rechargement,​ une règle supprimée reste active jusqu'​au redémarrage. # Sans rechargement,​ une règle supprimée reste active jusqu'​au redémarrage.
 if [[ $UDEV_TOUCHE -eq 1 ]]; then if [[ $UDEV_TOUCHE -eq 1 ]]; then
   udevadm control --reload-rules 2>/​dev/​null && msg " ​ règles udev rechargées"​   udevadm control --reload-rules 2>/​dev/​null && msg " ​ règles udev rechargées"​
 fi fi
 + 
 # Debian 13 refuse pip en root sans --break-system-packages (PEP 668). # Debian 13 refuse pip en root sans --break-system-packages (PEP 668).
 # Sans risque ici : ces fichiers vivent dans /usr/local, hors du Python géré # Sans risque ici : ces fichiers vivent dans /usr/local, hors du Python géré
Ligne 697: Ligne 700:
     || pip3 uninstall -y brother_ql 2>&1 | tee -a "​$JOURNAL"​     || pip3 uninstall -y brother_ql 2>&1 | tee -a "​$JOURNAL"​
 fi fi
 + 
 # Le menu lit un cache : sans ce rafraîchissement,​ l'​entrée reste affichée # Le menu lit un cache : sans ce rafraîchissement,​ l'​entrée reste affichée
 # alors que le fichier a disparu (clic sans effet). # alors que le fichier a disparu (clic sans effet).
Ligne 708: Ligne 711:
   msg " ​ menus rafraîchis"​   msg " ​ menus rafraîchis"​
 fi fi
 + 
 # ============================================================ 4. VERIFICATION # ============================================================ 4. VERIFICATION
 # On relance la recherche à blanc sur tout le disque pour confirmer. # On relance la recherche à blanc sur tout le disque pour confirmer.
 + 
 titre "3. Vérification"​ titre "3. Vérification"​
 + 
 # -xdev : ne franchit pas les frontières de systèmes de fichiers. Évite de # -xdev : ne franchit pas les frontières de systèmes de fichiers. Évite de
 # partir dans /proc et /sys. Si /home est sur une autre partition, il faut # partir dans /proc et /sys. Si /home est sur une autre partition, il faut
-# relancer la recherche dessus (voir README, section « Limites »).+# relancer la recherche dessus (voir le wiki, section « Limites ​connues ​»).
 # #
 # On écarte de la liste des « restes » : la nouvelle version, ce qui a été # On écarte de la liste des « restes » : la nouvelle version, ce qui a été
Ligne 727: Ligne 730:
           | grep -Fv "​$(basename "​$MOI"​)"​ \           | grep -Fv "​$(basename "​$MOI"​)"​ \
           | grep -Fxv "​$JOURNAL"​ || true)"           | grep -Fxv "​$JOURNAL"​ || true)"
 + 
 for s in ${SIGNALES[@]+"​${SIGNALES[@]}"​};​ do for s in ${SIGNALES[@]+"​${SIGNALES[@]}"​};​ do
   chemin="​${s%% (*}" ​                 # retire le commentaire entre parenthèses   chemin="​${s%% (*}" ​                 # retire le commentaire entre parenthèses
   RESTES="​$(printf '​%s\n'​ "​$RESTES"​ | grep -Fxv "​$chemin"​ || true)"   RESTES="​$(printf '​%s\n'​ "​$RESTES"​ | grep -Fxv "​$chemin"​ || true)"
 done done
 + 
 if [[ -z "​$RESTES"​ ]]; then if [[ -z "​$RESTES"​ ]]; then
   msg "Aucun reste. Poste ${HOTE} propre."​   msg "Aucun reste. Poste ${HOTE} propre."​
Ligne 739: Ligne 742:
   printf '​%s\n'​ "​$RESTES"​ | tee -a "​$JOURNAL"​   printf '​%s\n'​ "​$RESTES"​ | tee -a "​$JOURNAL"​
 fi fi
 + 
 if command -v brother_ql >/​dev/​null 2>&​1;​ then if command -v brother_ql >/​dev/​null 2>&​1;​ then
   msg "​brother_ql (pip) toujours en place (conservé volontairement,​ ou --avec-pip non passé)."​   msg "​brother_ql (pip) toujours en place (conservé volontairement,​ ou --avec-pip non passé)."​
 fi fi
 + 
 msg ""​ msg ""​
 msg "​Terminé. Fermer et rouvrir la session pour rafraîchir l'​affichage du menu." msg "​Terminé. Fermer et rouvrir la session pour rafraîchir l'​affichage du menu."
Ligne 750: Ligne 753:
 </​panel>​ </​panel>​
 </​accordion>​ </​accordion>​
 + 
  • materiel/logicos/start.1787350276.txt.gz
  • Dernière modification: 2026/08/22 00:11
  • par vitally-u44