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/21 18:50] emoc [Logiciels de création graphique] |
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 316: | Ligne 316: | ||
| * Installation de MPlayer (nécessaire pour Jubler, merci) | * Installation de MPlayer (nécessaire pour Jubler, merci) | ||
| * Ajouter Anaouder | * Ajouter Anaouder | ||
| + | |||
| + | ===== Désinstaller l'ancienne Stickeuse QL-570 des OP[XX] ===== | ||
| + | |||
| + | 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. | ||
| + | |||
| + | Il faut le mot de passe root — le demander à Pierre. | ||
| + | |||
| + | ==== 1. Télécharger le script ==== | ||
| + | |||
| + | [[https://lesporteslogiques.net/wiki/_export/code/materiel/logicos/start?codeblock=6|nettoyage_stickeuse.txt]] | ||
| + | |||
| + | Le fichier arrive dans le dossier **Téléchargements**. | ||
| + | |||
| + | Le code du script est reproduit en bas de page, pour qui veut le lire avant de | ||
| + | l'exécuter. | ||
| + | ==== 2. Ouvrir un terminal ==== | ||
| + | |||
| + | ''Ctrl'' + ''Alt'' + ''T''. | ||
| + | |||
| + | ==== 3. Taper les commandes ==== | ||
| + | |||
| + | Une ligne à la fois, en validant chacune par ''Entrée''. | ||
| + | |||
| + | 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> | ||
| + | su - | ||
| + | </code> | ||
| + | |||
| + | 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 ''#''. | ||
| + | |||
| + | <code bash> | ||
| + | cd /home/lesporteslogiques/Téléchargements | ||
| + | </code> | ||
| + | |||
| + | 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. | ||
| + | |||
| + | <code bash> | ||
| + | bash nettoyage_stickeuse.txt -n | ||
| + | </code> | ||
| + | |||
| + | Inventaire seul : **ne supprime rien**. Deux cas : | ||
| + | |||
| + | * ''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. | ||
| + | |||
| + | 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 place. Ne rien faire. | ||
| + | |||
| + | <code bash> | ||
| + | bash nettoyage_stickeuse.txt | ||
| + | </code> | ||
| + | |||
| + | 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 script vérifie ensuite son travail et conclut par l'un des deux messages : | ||
| + | |||
| + | * ''Aucun reste. Poste OPxx propre.'' — nettoyage complet. | ||
| + | * ''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. | ||
| + | <code bash> | ||
| + | exit | ||
| + | </code> | ||
| + | |||
| + | Referme la session root. La ligne devant le curseur redevient normale. | ||
| + | |||
| + | Puis **fermer et rouvrir la session** du poste : le menu ne se met à jour qu'à | ||
| + | ce moment-là. | ||
| + | |||
| + | ==== Ensuite ==== | ||
| + | |||
| + | Installer la version actuelle : [[https://github.com/lesporteslogiques/stickeuse|dépôt du projet]]. | ||
| + | Les comptes des OP[XX] n'ont pas ''sudo'' : suivre la **voie B**. | ||
| + | |||
| + | ---- | ||
| + | |||
| + | //Protocole du 29 juillet 2026, révisé le 21 août 2026 — script v1.1. | ||
| + | Options avancées et fonctionnement détaillé : ''bash nettoyage_stickeuse.sh -h''.// | ||
| + | |||
| + | ==== Le script ==== | ||
| + | |||
| + | Auteurice : Vitally LUBIN — Les Portes Logiques, 2026. | ||
| + | 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 | ||
| + | CC BY-SA du wiki (le pied de page réserve ce cas : //sauf mention contraire//). | ||
| + | |||
| + | <accordion> | ||
| + | <panel title="nettoyage_stickeuse.txt (cliquer pour afficher le code)"> | ||
| + | <file bash nettoyage_stickeuse.txt> | ||
| + | #!/usr/bin/env bash | ||
| + | # | ||
| + | # ============================================================================ | ||
| + | # nettoyage_stickeuse.txt — version 1.1 | ||
| + | # | ||
| + | # Retire l'ANCIENNE Stickeuse QL-570 d'un poste OP (Les Portes Logiques). | ||
| + | # | ||
| + | # Auteurice : Vitally LUBIN — Les Portes Logiques, 2026 | ||
| + | # Licence : GNU Affero General Public License v3 (AGPL-3.0) | ||
| + | # https://www.gnu.org/licenses/agpl-3.0.html | ||
| + | # | ||
| + | # POURQUOI | ||
| + | # Faire place nette AVANT d'installer la version aboutie du dépôt : | ||
| + | # https://github.com/lesporteslogiques/stickeuse | ||
| + | # Sans ce ménage, les résidus de l'ancienne version (lanceurs orphelins, | ||
| + | # agent fantôme, règle udev obsolète) parasitent le déploiement. | ||
| + | # Ordre : nettoyer, puis installer. | ||
| + | # | ||
| + | # UTILISATION RAPIDE | ||
| + | # su - | ||
| + | # bash nettoyage_stickeuse.txt -n # inventaire seul, ne supprime rien | ||
| + | # bash nettoyage_stickeuse.txt # inventorie, montre, demande, supprime | ||
| + | # | ||
| + | # OPTIONS | ||
| + | # -n, --inventaire-seul affiche ce qui serait supprimé, puis s'arrête | ||
| + | # -y, --oui ne demande pas confirmation (passage en série) | ||
| + | # --avec-pip désinstalle aussi la bibliothèque Python brother_ql | ||
| + | # -h, --aide affiche cette aide | ||
| + | # | ||
| + | # DÉROULÉ | ||
| + | # 1. Inventaire : cherche les traces, ne touche à rien | ||
| + | # 2. Confirmation : affiche la liste, attend un « o » | ||
| + | # 3. Suppression : efface, recharge udev, rafraîchit les menus | ||
| + | # 4. Vérification : relance la recherche et annonce ce qui subsiste | ||
| + | # | ||
| + | # GARDE-FOU | ||
| + | # La NOUVELLE version (/opt/ql570 et son venv) n'est JAMAIS supprimée. | ||
| + | # Tout lanceur .desktop pointant vers elle est conservé et signalé. | ||
| + | # | ||
| + | # 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 | ||
| + | # silencieux. Sur un script qui fait des rm, c'est vital : « rm -rf | ||
| + | # $CHEMIN » avec CHEMIN vide viserait la racine. | ||
| + | # set -o pipefail : dans « a | b », le code retour est celui du premier | ||
| + | # maillon qui échoue, pas seulement du dernier. | ||
| + | # (pas de « set -e » : on veut continuer le nettoyage même si un rm échoue, | ||
| + | # et le signaler dans le journal.) | ||
| + | set -uo pipefail | ||
| + | |||
| + | VERSION="1.1" | ||
| + | HOTE="$(hostname)" # sert à nommer le journal par poste | ||
| + | HORODATE="$(date +%Y%m%d-%H%M%S)" | ||
| + | JOURNAL="$(pwd)/nettoyage_${HOTE}_${HORODATE}.log" | ||
| + | |||
| + | # Drapeaux, modifiés plus bas par les options de la ligne de commande | ||
| + | INVENTAIRE_SEUL=0 | ||
| + | SANS_CONFIRMATION=0 | ||
| + | AVEC_PIP=0 | ||
| + | |||
| + | # Liste blanche : chemins de la NOUVELLE version, jamais supprimés. | ||
| + | # Ajouter ici tout autre chemin à préserver. | ||
| + | PROTEGES=("/opt/ql570") | ||
| + | |||
| + | CIBLES=() # ce qui sera supprimé | ||
| + | SIGNALES=() # ce qui est conservé volontairement, mais mérite d'être dit | ||
| + | |||
| + | # ---------------------------------------------------------------- utilitaires | ||
| + | |||
| + | # 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 | ||
| + | # trace de ce qui a été trouvé et supprimé sur chacun. | ||
| + | msg() { printf '%s\n' "$*" | tee -a "$JOURNAL"; } | ||
| + | titre() { printf '\n=== %s ===\n' "$*" | tee -a "$JOURNAL"; } | ||
| + | |||
| + | # Le chemin appartient-il à la nouvelle version ? | ||
| + | # Le motif "$p"/* attrape aussi tout ce qui est DANS un dossier protégé. | ||
| + | est_protege() { | ||
| + | local chemin="$1" p | ||
| + | for p in "${PROTEGES[@]}"; do | ||
| + | [[ "$chemin" == "$p" || "$chemin" == "$p"/* ]] && return 0 | ||
| + | done | ||
| + | return 1 | ||
| + | } | ||
| + | |||
| + | # Ajoute un chemin à la liste de suppression, avec trois filtres : | ||
| + | # 1. chemin vide -> ignoré (protection anti-« rm -rf » sur rien) | ||
| + | # 2. n'existe pas -> ignoré (inutile d'encombrer la liste) | ||
| + | # 3. protégé -> ignoré (nouvelle version) | ||
| + | # 4. déjà présent -> ignoré (évite les doublons) | ||
| + | ajouter() { | ||
| + | local chemin="$1" | ||
| + | [[ -z "$chemin" ]] && return | ||
| + | [[ -e "$chemin" ]] || return | ||
| + | est_protege "$chemin" && return | ||
| + | local c | ||
| + | # ${CIBLES[@]+"${CIBLES[@]}"} : formule qui évite l'erreur « variable non | ||
| + | # définie » (set -u) quand le tableau est encore vide. | ||
| + | for c in ${CIBLES[@]+"${CIBLES[@]}"}; do | ||
| + | [[ "$c" == "$chemin" ]] && return | ||
| + | done | ||
| + | CIBLES+=("$chemin") | ||
| + | } | ||
| + | |||
| + | signaler() { SIGNALES+=("$1"); } | ||
| + | |||
| + | # 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. | ||
| + | aide() { sed -n '4,41p' "$0" | sed 's/^# \{0,1\}//'; exit 0; } | ||
| + | |||
| + | # ------------------------------------------------------------------ arguments | ||
| + | |||
| + | while [[ $# -gt 0 ]]; do | ||
| + | case "$1" in | ||
| + | -n|--inventaire-seul) INVENTAIRE_SEUL=1 ;; | ||
| + | -y|--oui) SANS_CONFIRMATION=1 ;; | ||
| + | --avec-pip) AVEC_PIP=1 ;; | ||
| + | -h|--aide) aide ;; | ||
| + | *) echo "Option inconnue : $1 (voir --aide)" >&2; exit 2 ;; | ||
| + | esac | ||
| + | shift | ||
| + | done | ||
| + | |||
| + | # EUID = identifiant effectif de l'utilisateur ; 0 = root. | ||
| + | # Nécessaire pour /opt et /etc, et pour parcourir tous les /home. | ||
| + | if [[ "${EUID}" -ne 0 ]]; then | ||
| + | echo "Ce script doit tourner en root : su - puis bash $0" >&2 | ||
| + | exit 1 | ||
| + | fi | ||
| + | |||
| + | msg "nettoyage_stickeuse.txt v${VERSION} — poste ${HOTE} — ${HORODATE}" | ||
| + | msg "Journal : ${JOURNAL}" | ||
| + | |||
| + | # ============================================================== 1. INVENTAIRE | ||
| + | # Rien n'est supprimé ici : on ne fait que remplir CIBLES et SIGNALES. | ||
| + | |||
| + | titre "1. Inventaire" | ||
| + | |||
| + | # --- côté système ----------------------------------------------------------- | ||
| + | ajouter "/opt/stickeuse_ql570" # dossier 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 / | ||
| + | # nouvelle : la ligne « Exec= » du fichier .desktop dit quel programme est | ||
| + | # lancé. Si elle pointe vers /opt/ql570, c'est la NOUVELLE -> on conserve. | ||
| + | for f in /usr/share/applications/*ql570* /usr/share/applications/*stickeuse*; do | ||
| + | [[ -e "$f" ]] || continue # le motif non résolu reste littéral : on saute | ||
| + | if grep -qs 'Exec=.*/opt/ql570' "$f"; then | ||
| + | signaler "$f (lanceur de la NOUVELLE version — conservé)" | ||
| + | else | ||
| + | ajouter "$f" | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | # Règles udev : elles donnent à l'utilisateur le droit de parler à | ||
| + | # l'imprimante USB. Absentes sur OP60, présentes sur OP42. | ||
| + | for f in /etc/udev/rules.d/*ql570* /etc/udev/rules.d/*brother-ql*; do | ||
| + | [[ -e "$f" ]] && ajouter "$f" | ||
| + | done | ||
| + | |||
| + | # --- côté utilisateurs ------------------------------------------------------ | ||
| + | # On balaie /home/* plutôt que d'écrire un nom de compte en dur : il vaut | ||
| + | # « xor » sur OP42, « lesporteslogiques » sur OP60, et sans doute autre chose | ||
| + | # ailleurs. Le script s'adapte sans être modifié. | ||
| + | for maison in /home/*; do | ||
| + | [[ -d "$maison" ]] || continue | ||
| + | |||
| + | ajouter "$maison/bin/stickeuse_ql570" # dossier de travail (OP60) | ||
| + | ajouter "$maison/.gitdl/ql570" # sources téléchargées (OP60) | ||
| + | ajouter "$maison/.ql570" # journal d'impression de l'appli | ||
| + | |||
| + | # Recherche par motif dans les dossiers de configuration. | ||
| + | # -maxdepth 1 : on ne descend pas dans les sous-dossiers, pour ne pas | ||
| + | # ramasser un fichier sans rapport enfoui quelque part. | ||
| + | for d in "$maison/.icons" "$maison/.config" "$maison/.cache" \ | ||
| + | "$maison/.local/share" "$maison/.config/autostart"; do | ||
| + | [[ -d "$d" ]] || continue | ||
| + | # « while read < <(commande) » : on lit ligne par ligne sans sous-shell, | ||
| + | # sinon les ajouts au tableau CIBLES seraient perdus. | ||
| + | while IFS= read -r f; do | ||
| + | ajouter "$f" | ||
| + | done < <(find "$d" -maxdepth 1 \( -iname '*stickeuse*' -o -iname '*ql570*' \) 2>/dev/null) | ||
| + | done | ||
| + | |||
| + | # Lanceurs personnels : menu utilisateur, Bureau (session en français) et | ||
| + | # Desktop (session en anglais). Même test Exec= que plus haut. | ||
| + | for d in "$maison/.local/share/applications" "$maison/Bureau" "$maison/Desktop"; do | ||
| + | [[ -d "$d" ]] || continue | ||
| + | while IFS= read -r f; do | ||
| + | if grep -qs 'Exec=.*/opt/ql570' "$f"; then | ||
| + | signaler "$f (lanceur de la NOUVELLE version — conservé)" | ||
| + | else | ||
| + | ajouter "$f" | ||
| + | fi | ||
| + | done < <(find "$d" -maxdepth 1 \( -iname '*stickeuse*' -o -iname '*ql570*' \) 2>/dev/null) | ||
| + | done | ||
| + | done | ||
| + | |||
| + | # --- bibliothèque Python brother_ql ----------------------------------------- | ||
| + | # Installée par pip en root dans /usr/local, donc partagée par tout le poste. | ||
| + | # Elle n'appartient PAS à l'ancienne version (qui utilisait un binaire C) : | ||
| + | # quelqu'un a pu l'installer pour son propre usage. Conservée par défaut. | ||
| + | PIP_PRESENT=0 | ||
| + | if command -v brother_ql >/dev/null 2>&1 || \ | ||
| + | ls -d /usr/local/lib/python3.*/dist-packages/brother_ql >/dev/null 2>&1; then | ||
| + | PIP_PRESENT=1 | ||
| + | fi | ||
| + | |||
| + | # --- restitution de l'inventaire -------------------------------------------- | ||
| + | if [[ ${#CIBLES[@]} -eq 0 ]]; then | ||
| + | msg "Aucune trace de l'ancienne Stickeuse sur ce poste." | ||
| + | else | ||
| + | msg "${#CIBLES[@]} élément(s) à supprimer :" | ||
| + | for c in "${CIBLES[@]}"; do msg " - $c"; done | ||
| + | fi | ||
| + | |||
| + | if [[ ${#SIGNALES[@]} -gt 0 ]]; then | ||
| + | msg "" | ||
| + | msg "Conservé (non concerné par l'ancienne version) :" | ||
| + | for s in "${SIGNALES[@]}"; do msg " ! $s"; done | ||
| + | fi | ||
| + | |||
| + | if [[ $PIP_PRESENT -eq 1 ]]; then | ||
| + | msg "" | ||
| + | if [[ $AVEC_PIP -eq 1 ]]; then | ||
| + | msg "brother_ql (pip) : présent — sera désinstallé (--avec-pip)." | ||
| + | else | ||
| + | msg "brother_ql (pip) : présent — CONSERVÉ. Relancer avec --avec-pip pour l'ôter." | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | if [[ $INVENTAIRE_SEUL -eq 1 ]]; then | ||
| + | msg "" | ||
| + | msg "Mode inventaire seul : rien n'a été supprimé." | ||
| + | exit 0 | ||
| + | fi | ||
| + | |||
| + | # Poste déjà propre : on s'arrête là. | ||
| + | [[ ${#CIBLES[@]} -eq 0 && $PIP_PRESENT -eq 0 ]] && exit 0 | ||
| + | |||
| + | # ============================================================ 2. CONFIRMATION | ||
| + | |||
| + | if [[ $SANS_CONFIRMATION -eq 0 ]]; then | ||
| + | printf '\nSupprimer les éléments ci-dessus ? [o/N] ' | ||
| + | read -r reponse | ||
| + | echo "Réponse : ${reponse:-N}" >> "$JOURNAL" | ||
| + | case "${reponse}" in | ||
| + | [oOyY]) ;; # o, O, y ou Y : on continue | ||
| + | *) msg "Abandon : rien n'a été supprimé."; exit 0 ;; # tout le reste : on sort | ||
| + | esac | ||
| + | fi | ||
| + | |||
| + | # ============================================================= 3. SUPPRESSION | ||
| + | |||
| + | titre "2. Suppression" | ||
| + | |||
| + | UDEV_TOUCHE=0 | ||
| + | for c in ${CIBLES[@]+"${CIBLES[@]}"}; do | ||
| + | est_protege "$c" && continue # second contrôle, au cas où la liste | ||
| + | # blanche aurait évolué entre-temps | ||
| + | [[ "$c" == /etc/udev/rules.d/* ]] && UDEV_TOUCHE=1 | ||
| + | # « -- » marque la fin des options : un fichier nommé « -rf » serait traité | ||
| + | # comme un nom, pas comme un drapeau. | ||
| + | if rm -rf -- "$c"; then | ||
| + | msg " supprimé : $c" | ||
| + | else | ||
| + | msg " ÉCHEC : $c" | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | # Sans rechargement, une règle supprimée reste active jusqu'au redémarrage. | ||
| + | if [[ $UDEV_TOUCHE -eq 1 ]]; then | ||
| + | udevadm control --reload-rules 2>/dev/null && msg " règles udev rechargées" | ||
| + | fi | ||
| + | |||
| + | # 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é | ||
| + | # par apt. Le « || » relance sans le drapeau sur les Debian plus anciennes. | ||
| + | if [[ $PIP_PRESENT -eq 1 && $AVEC_PIP -eq 1 ]]; then | ||
| + | msg " désinstallation de brother_ql (pip)" | ||
| + | pip3 uninstall -y --break-system-packages brother_ql 2>&1 | tee -a "$JOURNAL" \ | ||
| + | || pip3 uninstall -y brother_ql 2>&1 | tee -a "$JOURNAL" | ||
| + | fi | ||
| + | |||
| + | # Le menu lit un cache : sans ce rafraîchissement, l'entrée reste affichée | ||
| + | # alors que le fichier a disparu (clic sans effet). | ||
| + | if command -v update-desktop-database >/dev/null 2>&1; then | ||
| + | update-desktop-database /usr/share/applications 2>/dev/null | ||
| + | for maison in /home/*; do | ||
| + | [[ -d "$maison/.local/share/applications" ]] && \ | ||
| + | update-desktop-database "$maison/.local/share/applications" 2>/dev/null | ||
| + | done | ||
| + | msg " menus rafraîchis" | ||
| + | fi | ||
| + | |||
| + | # ============================================================ 4. VERIFICATION | ||
| + | # On relance la recherche à blanc sur tout le disque pour confirmer. | ||
| + | |||
| + | titre "3. Vérification" | ||
| + | |||
| + | # -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 | ||
| + | # relancer la recherche dessus (voir le wiki, section « Limites connues »). | ||
| + | # | ||
| + | # On écarte de la liste des « restes » : la nouvelle version, ce qui a été | ||
| + | # volontairement conservé, le script lui-même et son journal — sinon le script | ||
| + | # signalerait comme suspect ce qu'il vient de décider de garder. | ||
| + | MOI="$(readlink -f "$0" 2>/dev/null || echo "$0")" | ||
| + | RESTES="$(find / -xdev \( -iname '*stickeuse*' -o -iname '*ql570*' \) 2>/dev/null \ | ||
| + | | grep -v '^/opt/ql570' \ | ||
| + | | grep -Fxv "$MOI" \ | ||
| + | | grep -Fv "$(basename "$MOI")" \ | ||
| + | | grep -Fxv "$JOURNAL" || true)" | ||
| + | |||
| + | for s in ${SIGNALES[@]+"${SIGNALES[@]}"}; do | ||
| + | chemin="${s%% (*}" # retire le commentaire entre parenthèses | ||
| + | RESTES="$(printf '%s\n' "$RESTES" | grep -Fxv "$chemin" || true)" | ||
| + | done | ||
| + | |||
| + | if [[ -z "$RESTES" ]]; then | ||
| + | msg "Aucun reste. Poste ${HOTE} propre." | ||
| + | else | ||
| + | msg "Restes à examiner :" | ||
| + | printf '%s\n' "$RESTES" | tee -a "$JOURNAL" | ||
| + | fi | ||
| + | |||
| + | if command -v brother_ql >/dev/null 2>&1; then | ||
| + | msg "brother_ql (pip) toujours en place (conservé volontairement, ou --avec-pip non passé)." | ||
| + | fi | ||
| + | |||
| + | msg "" | ||
| + | msg "Terminé. Fermer et rouvrir la session pour rafraîchir l'affichage du menu." | ||
| + | msg "Journal : ${JOURNAL}" | ||
| + | </file> | ||
| + | </panel> | ||
| + | </accordion> | ||
| + | |||