Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
materiel:logicos:start [2026/07/29 16:02] vitally-u44 |
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 317: | Ligne 317: | ||
| * Ajouter Anaouder | * Ajouter Anaouder | ||
| - | ===== Désinstaller l'ancienne Stickeuse QL-570 des OP[XX] (image de janvier 2026) ===== | + | ===== Désinstaller l'ancienne Stickeuse QL-570 des OP[XX] ===== |
| - | //Protocole établi le 29 juillet 2026 — script version 1.1.// | + | Les OP[XX] portent une ancienne version de la Stickeuse, venue de l'image clonée de |
| + | janvier 2026. La retirer **avant** d'installer la version actuelle. | ||
| - | **Périmètre** — les ordinateurs portables **OP[XX]** des Portes Logiques. | + | Il faut le mot de passe root — le demander à Pierre. |
| - | **Qui l'applique** — Pierre, ou toute personne qu'il habilite. L'opération exige les | + | ==== 1. Télécharger le script ==== |
| - | droits root et intervient dans les dossiers personnels de **tous** les comptes du | + | |
| - | poste : elle ne s'improvise pas. | + | |
| - | Les OP[XX] ont été déployés par **clonage**, par Jérôme (Jejy), en décembre 2025 / | + | [[https://lesporteslogiques.net/wiki/_export/code/materiel/logicos/start?codeblock=6|nettoyage_stickeuse.txt]] |
| - | janvier 2026. L'**ancienne** version de la Stickeuse figurait dans l'image clonée : | + | |
| - | elle est donc présente sur tous les postes issus de ce déploiement, **aux mêmes | + | |
| - | emplacements** — ''/opt/stickeuse_ql570'', ''~/bin/stickeuse_ql570'', | + | |
| - | ''~/.gitdl/ql570'', l'icône et les deux lanceurs. Elle n'a pas de désinstalleur | + | |
| - | fiable. | + | |
| - | Un poste peut s'écarter de ce motif s'il a reçu des installations manuelles | + | Le fichier arrive dans le dossier **Téléchargements**. |
| - | ultérieures : OP42, poste de développement, porte en plus une règle udev, une | + | |
| - | entrée d'autostart et un binaire dans ''/usr/local/bin''. Le script couvre les deux | + | |
| - | cas. | + | |
| - | Il faut la retirer **avant** d'installer la version actuelle, sinon les deux se | + | Le code du script est reproduit en bas de page, pour qui veut le lire avant de |
| - | marchent dessus : deux entrées de menu portant le même nom, un agent fantôme | + | l'exécuter. |
| - | relancé à chaque ouverture de session, une règle udev obsolète. | + | ==== 2. Ouvrir un terminal ==== |
| - | Ordre : **nettoyer, puis installer**. | + | ''Ctrl'' + ''Alt'' + ''T''. |
| - | * Version actuelle de l'appli : [[https://github.com/lesporteslogiques/stickeuse|dépôt lesporteslogiques/stickeuse]] | + | ==== 3. Taper les commandes ==== |
| - | ==== Utilisation ==== | + | Une ligne à la fois, en validant chacune par ''Entrée''. |
| - | Télécharger le script ci-dessous, puis, sur le poste à nettoyer : | + | Pour coller une commande dans le terminal : **''Ctrl'' + ''Maj'' + ''V''** — |
| + | ''Ctrl'' + ''V'' ne fonctionne pas ici, et ne produit aucun message d'erreur. | ||
| <code bash> | <code bash> | ||
| su - | su - | ||
| - | cd /chemin/vers/le/script | ||
| - | bash nettoyage_stickeuse.sh -n # inventaire seul, ne supprime rien | ||
| - | bash nettoyage_stickeuse.sh # supprime, après confirmation | ||
| </code> | </code> | ||
| - | Pas besoin de ''chmod +x'' : lancer par ''bash nom_du_script'' suffit. | + | Demande le mot de passe **root** — pas celui de la session. Rien ne s'affiche |
| + | pendant la saisie : c'est normal. En cas de refus, le mot de passe est faux : | ||
| + | le demander à Pierre. Quand ça marche, la ligne devant le curseur se termine | ||
| + | par ''#''. | ||
| - | ^ Option ^ Effet ^ | + | <code bash> |
| - | | ''-n'', ''%%--%%inventaire-seul'' | Affiche ce qui serait supprimé, puis s'arrête. | | + | cd /home/lesporteslogiques/Téléchargements |
| - | | ''-y'', ''%%--%%oui'' | Ne demande pas confirmation. Pour enchaîner les postes. | | + | </code> |
| - | | ''%%--%%avec-pip'' | Désinstalle aussi la bibliothèque Python ''brother_ql''. | | + | |
| - | | ''-h'', ''%%--%%aide'' | Affiche l'aide intégrée. | | + | |
| - | ==== Ce qu'il fait ==== | + | Se place dans le dossier où le script a été téléchargé. Chemin complet |
| + | obligatoire : root n'habite pas dans le dossier de l'utilisateur. Si le message | ||
| + | ''Aucun fichier ou dossier de ce type'' apparaît, le téléchargement de | ||
| + | l'étape 1 n'a pas abouti, ou le fichier est ailleurs. | ||
| - | - **Inventaire** — cherche les traces sans rien supprimer, côté système (''/opt/stickeuse_ql570'', ''/usr/local/bin/ql570'', lanceurs, règles udev) et dans chaque compte de ''/home'' (''bin/stickeuse_ql570'', ''.gitdl/ql570'', ''.icons'', ''.config'', ''.cache'', ''.local/share'', ''autostart'', ''Bureau'', ''Desktop''). Aucun nom de compte n'est écrit en dur. | + | <code bash> |
| - | - **Confirmation** — affiche la liste et attend un ''o''. Toute autre réponse annule. | + | bash nettoyage_stickeuse.txt -n |
| - | - **Suppression** — efface, recharge les règles udev, rafraîchit le cache des menus. | + | </code> |
| - | - **Vérification** — relance la recherche et annonce « Aucun reste » ou la liste de ce qui subsiste. | + | |
| - | Chaque passage écrit un journal ''nettoyage_<hôte>_<horodatage>.log'' dans le | + | Inventaire seul : **ne supprime rien**. Deux cas : |
| - | dossier courant. Lancé depuis une clé USB, les journaux s'y accumulent : c'est le | + | |
| - | suivi du parc. | + | |
| - | ==== Garde-fou : ancienne ou nouvelle version ? ==== | + | * ''Aucune trace de l'ancienne Stickeuse sur ce poste.'' — le poste est propre. Ne 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 sera effacé. Poursuivre avec la commande suivante. | ||
| - | Le script s'appuie sur la ligne ''Exec='' des fichiers ''.desktop'', qui indique | + | La ligne ''brother_ql (pip) : présent — CONSERVÉ'' peut s'ajouter à l'un ou |
| - | le programme réellement lancé : | + | l'autre : c'est une bibliothèque partagée avec d'autres usages du poste, que le |
| + | script laisse volontairement en place. Ne rien faire. | ||
| - | ^ ''Exec='' pointe vers ^ Version ^ Décision ^ | + | <code bash> |
| - | | ''/opt/stickeuse_ql570/…'' ou ''/usr/local/bin/ql570'' | ancienne | supprimé | | + | bash nettoyage_stickeuse.txt |
| - | | ''/opt/ql570/venv/bin/python …'' | nouvelle | conservé et signalé | | + | </code> |
| - | La nouvelle version n'est **jamais** supprimée. | + | Cette fois, supprime. La liste s'affiche à nouveau, puis la question |
| + | ''Supprimer les éléments ci-dessus ? [o/N]'' : répondre ''o'' puis ''Entrée''. | ||
| + | Toute autre réponse annule sans rien toucher. | ||
| - | ==== Le cas brother_ql ==== | + | Le script vérifie ensuite son travail et conclut par l'un des deux messages : |
| - | ''brother_ql'' est la bibliothèque Python qui pilote les imprimantes QL. Installée | + | * ''Aucun reste. Poste OPxx propre.'' — nettoyage complet. |
| - | par ''pip'' en root dans ''/usr/local'', elle est **partagée par tout le poste**. | + | * ''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 corbeille, sans rapport avec l'ancienne version : le script ne les touche pas, par prudence. Ce n'est pas bloquant. Taper ''exit'', l'installation de la nouvelle version peut se faire. |
| - | Elle n'appartient pas à l'ancienne version — celle-ci passait par un binaire C | + | <code bash> |
| - | compilé. | + | exit |
| + | </code> | ||
| - | Sur OP60, elle est datée du **8 janvier 2026**, soit dans la fenêtre du clonage : | + | Referme la session root. La ligne devant le curseur redevient normale. |
| - | elle vient donc probablement de l'image, et non d'un usage personnel. Si la même | + | |
| - | date se retrouve sur les autres postes, l'hypothèse se confirme et | + | |
| - | ''%%--%%avec-pip'' devient le passage par défaut. Par prudence, le script la | + | |
| - | **conserve** tant que la question n'est pas tranchée, et signale seulement sa | + | |
| - | présence. | + | |
| - | ==== Marche à suivre sur le parc ==== | + | Puis **fermer et rouvrir la session** du poste : le menu ne se met à jour qu'à |
| + | ce moment-là. | ||
| - | Les postes étant issus d'un même clonage, l'inventaire devrait être identique de | + | ==== Ensuite ==== |
| - | l'un à l'autre. C'est ce qui rend le passage en série possible — et ce qu'il faut | + | |
| - | vérifier d'abord. | + | |
| - | - Sur les trois ou quatre premiers postes, passer en ''-n'' et lire l'inventaire. Il doit être le même partout. Un écart signale une installation manuelle ultérieure : la relever avant de continuer. | + | Installer la version actuelle : [[https://github.com/lesporteslogiques/stickeuse|dépôt du projet]]. |
| - | - Une fois le motif confirmé, enchaîner les postes suivants. | + | Les comptes des OP[XX] n'ont pas ''sudo'' : suivre la **voie B**. |
| - | - Noter la date de ''brother_ql'' sur ces premiers postes (voir plus haut). | + | |
| - | - Récupérer les journaux pour tenir le décompte du parc. | + | |
| - | ==== Limites connues ==== | + | ---- |
| - | * **Une seule partition** — la recherche utilise ''-xdev'' et ne franchit pas les frontières de systèmes de fichiers. Si ''/home'' est sur une partition séparée (''df -h / /home /opt'' pour le vérifier), relancer à la main : ''find /home -iname '*stickeuse*' -o -iname '*ql570*' ''. | + | //Protocole du 29 juillet 2026, révisé le 21 août 2026 — script v1.1. |
| - | * **Emplacements connus seulement** — le script cherche dans les dossiers observés sur deux postes (OP42, poste de développement, et OP60, issu du clonage). Une installation posée ailleurs lui échapperait, d'où le passage en ''-n'' sur les premiers postes. | + | Options avancées et fonctionnement détaillé : ''bash nettoyage_stickeuse.sh -h''.// |
| - | * **Fermer la session** — l'affichage du menu ne se rafraîchit complètement qu'à la réouverture de session. | + | |
| - | * **Corbeille** — les fichiers déjà mis à la corbeille par un utilisateur (''~/.local/share/Trash'') ne sont pas concernés. | + | |
| - | + | ||
| - | ==== Récupérer le script ==== | + | |
| - | + | ||
| - | Le script est publié en bas de cette page. Le bloc de code porte son nom en | + | |
| - | en-tête : **cliquer dessus télécharge le fichier**. Préférer ce lien au | + | |
| - | copier-coller, qui risque d'emporter des espaces ou de tronquer une ligne. | + | |
| - | + | ||
| - | Deux façons de l'amener sur les postes : | + | |
| - | + | ||
| - | * **Depuis le poste lui-même** — ouvrir cette page dans le navigateur du poste, télécharger, puis lancer depuis ''~/Téléchargements''. | + | |
| - | * **Par clé USB** — télécharger une fois, copier sur la clé, passer de poste en poste. À privilégier : les journaux s'accumulent sur la clé et donnent le suivi du parc. | + | |
| - | + | ||
| - | Contrôle après téléchargement, avant la première utilisation : | + | |
| - | + | ||
| - | <code bash> | + | |
| - | wc -l nettoyage_stickeuse.sh # doit afficher 334 lignes | + | |
| - | bash -n nettoyage_stickeuse.sh # vérifie la syntaxe, n'exécute rien | + | |
| - | </code> | + | |
| - | + | ||
| - | Si la seconde commande ne dit rien, le fichier est intact. | + | |
| ==== 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> | |
| - | <file bash nettoyage_stickeuse.sh> | + | <panel title="nettoyage_stickeuse.txt (cliquer pour afficher le code)"> |
| + | <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 469: | 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 488: | 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 : voir README.md | + | # 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 499: | 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 524: | 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 534: | 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 553: | 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 572: | 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 579: | 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 603: | 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 609: | 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 616: | 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 633: | 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 647: | 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 657: | 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 665: | 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 671: | 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 680: | Ligne 647: | ||
| fi | fi | ||
| fi | fi | ||
| + | |||
| if [[ $INVENTAIRE_SEUL -eq 1 ]]; then | if [[ $INVENTAIRE_SEUL -eq 1 ]]; then | ||
| msg "" | msg "" | ||
| Ligne 686: | 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 701: | 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 719: | 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 733: | 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 744: | 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 763: | 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 775: | 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." | ||
| msg "Journal : ${JOURNAL}" | msg "Journal : ${JOURNAL}" | ||
| </file> | </file> | ||
| + | </panel> | ||
| + | </accordion> | ||
| + | |||