Outils pour utilisateurs

Outils du site


linux:athesi

Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
linux:athesi [2026/10/03 11:52] – créée rootlinux:athesi [2026/10/23 19:03] (Version actuelle) – root
Ligne 1: Ligne 1:
-Config tablette Athesi AP1001CL (Cherry Trail / Atom x5-Z8350) sous MX Linux +====== Tablette Athesi AP1001CL — MX Linux (Le Pain d'Antan) ====== 
-Contexte matériel + 
-Tablette ATHESI AP1001CL, Atom x5-Z8350 (Cherry Trail), 4 Go RAM, écran DSI. +Procédure complète pour installer, configurer et cloner les tablettes Athesi AP1001CL utilisées au Pain d'Antan. 
-Tactile Goodix (`i2c:0416:2397`, `Goodix Capacitive TouchScreen`). + 
-Caméra : capteur OmniVision OV2680 via ISP Intel `atomisp`. +  * **Matériel** : Athesi AP1001CL — Intel Atom x5-Z8350 (Cherry Trail), ~4 Go RAM, eMMC 58 Go, écran DSI 1200x1920 (portrait natif), tactile Goodix, caméra OV2680 (atomisp) 
-Hostname : `pa-ixl-tab` — utilisateur : `tablette`. +  * **Système** : MX Linux 25.2 « Infinity » XFCE, édition AHS, démarrage **systemd**, noyau Liquorix 
-MX Linux XFCE 64 bit, kernel récent (AHS) qui stabilise nettement le boot. +  * **Tablette modèle** : ''pa-ixl-tab'' — utilisateur ''tablette'' 
-⚠️ MX démarre en SysVinit par défaut, PAS systemd → `systemctl` absent. Utiliser `service` / `update-rc.d`, ou lancer les choses en session utilisateur. +  * **Accès à distance** : RustDesk via ''rust.makeitsimple.be'' (Server Pro), carnet d'adresses **PainAntan** 
-Messages `cherryview-pinctrl INT33FF:04 ... error -61` et `i915 ... Failed to get the SoC PWM chip` = faux positifs bénins, à ignorer (confirmé : le système boote malgré eux). +  * **Projet** : dossier ''tablette-mx'' (script ''installer-tablette.sh'', ''wallpaper.png'', ''bootloader.png'', ''LISEZMOI.md'') 
---- + 
-1. GRUB — `/etc/default/grub` +===== 1. Pourquoi MX Linux et pas NixOS ===== 
-Dans `GRUB_CMDLINE_LINUX_DEFAULT` : + 
-Retirer `splash` (empêche le démarrage de l'interface graphique sur Cherry Trail). Garder `quiet` seul est OK, ou ajouter `plymouth.enable=0`. +NixOS a d'abord été essayé (installation reproductible par flake). Il a été abandonné à cause de gels répétés : 
-Paramètres de stabilité : `reboot=hard intel_idle.max_cstate=1 pcie_aspm=off` + 
-⚠️ Orthographe : c'est bien `intel_idle.max_cstate=1` (et non `max_state=1`). +  * Le bus I2C du circuit d'alimentation AXP288 (PMIC) est **partagé avec la P-Unit** (gestion d'énergie du SoC). Le noyau doit arbitrer l'accès par un sémaphore : option ''CONFIG_I2C_DESIGNWARE_BAYTRAIL''. 
-Rotation vidéo (mode droite = 90° horaire) : +  * Le noyau NixOS standard **n'active pas** cette option. Résultats : ''i2c_designware … timeout'', « No PMIC registered », écran DSI qui ne se rallume pas après une rotation (''flip_done timed out''), gels. 
-``` +  * Corriger demande de **recompiler tout le noyau** (l'option est dans un pilote intégré, pas un module), et cela à chaque mise à jour du noyau. Trop coûteux pour quelques tablettes. 
-  fbcon=rotate:1 video=DSI-1:panel_orientation=right_side_up +  * Le noyau Liquorix de MX a ''CONFIG_I2C_DESIGNWARE_BAYTRAIL=y'' : le problème disparaît. 
-  ``` + 
-Après toute modif : +Vérification sur une tablette : 
-```bash +<code bash> 
-sudo update-grub +grep DESIGNWARE_BAYTRAIL /boot/config-$(uname -r)   # doit afficher =y 
-``` +</code> 
---- + 
-2. Tactile — rotation à suivre l'affichage +===== 2. Installation de MX sur la tablette modèle ===== 
-Le tactile ne se pivote PAS via GRUB (couche input, pas noyau). Fichier Xorg. + 
-`/etc/X11/xorg.conf.d/99-touch.conf` : +==== 2.1 Démarrer sur la clé USB ==== 
-```+  - Redémarrer la tablette en appuyant sur **F7** (menu de démarrage du BIOS) ; choisir ''UEFI: USB DISK…''. 
 +  - Dans le menu GRUB de la clé, sélectionner l'entrée **(systemd)**, appuyer sur ''e'' et ajouter à la ligne ''linux'' : 
 +<code> 
 +lang=fr_BE kbd=be tz=Europe/Brussels intel_idle.max_cstate=1 reboot=hard 
 +</code> 
 +  - Démarrer avec **F10**. 
 + 
 +==== 2.2 Installateur MX ==== 
 +  * Type : **installation classique sur tout le disque** — ''mmcblk0'' (eMMC 58 Go). //Ne pas confondre avec la clé USB (sdX).// 
 +  * Fichier d'échange de 2 Go (par défaut). 
 +  * Nom : ''pa-ixl-tab'' (modèle), domaine ''painantan.lan'', **Samba décoché**. 
 +  * Locale Belgique – français, fuseau Europe/Brussels, clavier ''be''. 
 +  * Utilisateur ''tablette'', **connexion automatique** cochée. 
 + 
 +Les options ''intel_idle.max_cstate=1 reboot=hard'' saisies au démarrage live sont reprises dans le GRUB installé. 
 + 
 +==== 2.3 Premier démarrage avec le PiKVM ==== 
 +Avec l'HDMI branché, MX place l'HDMI **à côté** de l'écran de la tablette (bureau étendu). Si le panneau ou le menu disparaît : débrancher puis rebrancher l'HDMI et choisir **Écran en miroir** dans la fenêtre qui s'ouvre. 
 + 
 +<WRAP important> 
 +Ne pas éteindre l'écran intégré (''xrandr --output DSI-1 --off'') pendant la session : le panneau XFCE s'y perd et l'affichage HDMI devient inexploitable. 
 +</WRAP> 
 + 
 +Connecter ensuite le Wi-Fi **PainAntan** via l'icône réseau. 
 + 
 +===== 3. Script d'installation ===== 
 + 
 +==== 3.1 Préparer le dossier ==== 
 +Dans ''~/tablette-mx/'' : 
 +^ Fichier ^ Rôle ^ Obligatoire ^ 
 +| ''installer-tablette.sh'' | le script | oui | 
 +| ''wallpaper.png'' | fond d'écran 1920x1200 | non | 
 +| ''bootloader.png'' | logo affiché dans le menu GRUB | non | 
 +| ''jeton-rustdesk.txt'' | jeton API de la console RustDesk Pro | non (sans lui, pas d'inscription automatique au carnet) | 
 + 
 +<WRAP important> 
 +Le jeton RustDesk ne va **jamais** dans git. Un ''.gitignore'' l'exclut. 
 +</WRAP> 
 + 
 +Depuis une clé USB (montée sous ''/media/tablette/<NOM>/'') : 
 +<code bash> 
 +cd ~/tablette-mx 
 +U=/media/tablette/MX-LIVE 
 +cp $U/wallpaper.png $U/bootloader.png . 
 +tr -d '\r\n ' < $U/RUSTDESK_TOKEN.TXT > jeton-rustdesk.txt && chmod 600 jeton-rustdesk.txt 
 +</code> 
 + 
 +==== 3.2 Lancer ==== 
 +<code bash> 
 +cd ~/tablette-mx && sudo ./installer-tablette.sh 2>&1 | tee ~/installation.log 
 +</code> 
 +Puis **redémarrer**. Le script est **relançable sans risque** : il ne réécrit que ce qui change (lignes « ecrit : … »). Pour modifier un réglage : corriger le script, le relancer, redémarrer. 
 + 
 +==== 3.3 Ce que fait le script ==== 
 +^ Étape ^ Détail ^ 
 +| Paquets | onboard, iio-sensor-proxy, xinput, xdotool, yad, v4l-utils, dconf-cli… | 
 +| GRUB | ''quiet intel_idle.max_cstate=1 reboot=hard pcie_aspm=off'' — pas de ''splash'' (bloquait l'interface) | 
 +| Wi-Fi Intel | ''options iwlwifi power_save=0 11n_disable=1 bt_coex_active=0 swcrypto=1'' | 
 +| Caméra | firmware ''shisp_2401a0_v21.bin'' (vérifié par SHA-256) dans ''/lib/firmware/intel/ipu/'' ; ''intel_atomisp2_pm'' mis en liste noire | 
 +| Xorg | pilote modesetting en **DRI2** (capture RustDesk) ; matrice tactile ; aucune mise en veille de l'écran | 
 +| Session | connexion automatique LightDM ; variables ''MOZ_USE_XINPUT2'', ''GNOME_ACCESSIBILITY'', ''QT_ACCESSIBILITY'' ; curseur 48 | 
 +| Firefox (politiques) | accessibilité forcée (clavier visuel) ; VA-API ; 2 processus ; pas de cache disque ; mots de passe non révélables ; outils de développement et ''about:config'' bloqués | 
 +| Clavier visuel | onboard en AZERTY belge, ouverture automatique dans les champs texte, bouton flottant | 
 +| Interface (''tablette-ui'') | rotation paysage, raccourcis Boucom / Shyfter / Infos PDA, DPI 144, thème de fenêtre ''Default-xhdpi'', panneaux et icônes agrandis, pas de veille, fond d'écran | 
 +| Rotation (''tablette-rotation'') | accéléromètre → rotation de l'écran et du tactile ; bloquée en paysage si HDMI branché | 
 +| Thème | Greybird + accents caramel, panneau brun foncé, dossiers Papirus bruns ; icônes MX par défaut retirées du bureau ; horloge (conky) désactivée | 
 +| Performances | zram (zstd, 50 %, prioritaire), ''vm.swappiness=100'', pilote vidéo ''i965'', cups/ModemManager coupés, notificateur de mises à jour MX coupé, ''noatime'', TRIM hebdomadaire, journal limité à 64 Mo | 
 +| GRUB graphique | ''bootloader.png'' centré sur fond brun, tourné d'un quart de tour (dalle en portrait natif) | 
 +| RustDesk | dernière version .deb, serveur ''rust.makeitsimple.be'', mot de passe permanent aléatoire, inscription au carnet PainAntan | 
 +| Clonage | installe ''tablette-preparer-clonage'' et le mécanisme de premier démarrage | 
 + 
 +===== 4. Clonage ===== 
 + 
 +==== 4.1 Ordre ==== 
 +  - Sur la tablette modèle : script d'installation (§3), redémarrage, **tests** (§6). 
 +  - Sur la modèle : <code bash>sudo tablette-preparer-clonage</code> Efface l'identité (ID et mot de passe RustDesk, clés SSH, machine-id), crée ''/etc/tablette/a-personnaliser'' et **éteint**. 
 +  - **Clonezilla** : image du disque ''mmcblk0'', puis restauration sur chaque tablette. 
 +  - **Premier démarrage** de chaque tablette (et de la modèle) : 
 +    * une fenêtre demande le **nom** (minuscules, chiffres, tirets — ex. ''pa-ixl-tab-02''), clavier visuel affiché ; 
 +    * nouvelle identité : machine-id, clés SSH, nouvel ID RustDesk, nouveau mot de passe RustDesk ; 
 +    * inscription dans le carnet **PainAntan** sous ce nom ; 
 +    * redémarrage. 
 + 
 +==== 4.2 Fonctionnement interne ==== 
 +^ Élément ^ Rôle ^ 
 +| ''tablette-premier-demarrage.service'' | si ''/etc/tablette/a-personnaliser'' existe : machine-id, clés SSH, crée ''/run/tablette'' | 
 +| ''tablette-demander-nom'' (autostart) | demande le nom (yad) et l'écrit dans ''/run/tablette/nom'' | 
 +| ''tablette-nommer.path'' / ''.service'' | dès que le nom est déposé : ''hostnamectl'', ''/etc/hosts'', RustDesk, suppression du témoin, redémarrage | 
 +| ''tablette-rustdesk'' | ''config'' / ''motdepasse'' / ''enregistrer NOM'' | 
 + 
 +===== 5. RustDesk et sécurité ===== 
 + 
 +==== 5.1 Jeton de la console ==== 
 +Console RustDesk Pro → **Paramètres → Jetons → Créer** : 
 +  * **Périphérique** : lecture et écriture 
 +  * **Carnet d'adresses** : lecture et écriture 
 +  * rien d'autre ; **date d'expiration** recommandée, révoquer après le déploiement. 
 +Le jeton est stocké dans ''/etc/rustdesk/token'' (root, 600) et se retrouve dans l'image Clonezilla. 
 + 
 +==== 5.2 Mots de passe ==== 
 +  * **Un mot de passe différent par tablette**, aléatoire, 20 caractères, généré au premier démarrage. Il n'est **pas** dans l'image. 
 +  * Lecture sur la tablette : ''sudo cat /etc/rustdesk/password'' 
 +  * Stocké aussi dans le carnet PainAntan (serveur auto-hébergé). La console n'affiche que « défini / non défini ». 
 +  * Réinscription manuelle : ''sudo tablette-rustdesk enregistrer <nom>'' 
 + 
 +==== 5.3 Recommandations ==== 
 +  * Double authentification sur les comptes qui ont accès au carnet PainAntan. 
 +  * Lecture seule pour ceux qui ne font que se connecter ; écriture réservée à l'administrateur. 
 +  * Protéger le serveur RustDesk et ses sauvegardes (ils contiennent de quoi accéder aux tablettes). 
 +  * Tablette perdue ou volée : la retirer du carnet. 
 + 
 +==== 5.4 Firefox ==== 
 +Politiques dans ''/etc/firefox/policies/policies.json'' : ''DisablePasswordReveal'', ''DisableDeveloperTools'', ''BlockAboutConfig'', ''DisableAppUpdate''. Les mots de passe enregistrés restent utilisables en remplissage automatique mais ne peuvent pas être affichés. 
 + 
 +===== 6. Tests après installation ===== 
 +  * [ ] Démarrage **sans HDMI** : le bureau s'affiche directement (pas d'écran noir avec seulement le curseur) 
 +  * [ ] Image dans le menu GRUB 
 +  * [ ] Rotation automatique dans les 4 sens (HDMI débranché) 
 +  * [ ] Clavier visuel AZERTY dans un champ texte de Firefox 
 +  * [ ] Raccourcis Boucom, Shyfter, Infos PDA 
 +  * [ ] Caméra 
 +  * [ ] Batterie visible (''ls /sys/class/power_supply'' → ''axp288_fuel_gauge'') 
 +  * [ ] RustDesk : connexion depuis le carnet PainAntan 
 +  * [ ] Mémoire compressée : ''swapon --show'' → ''/dev/zram0'' priorité 100 
 + 
 +===== 7. Problèmes rencontrés et solutions ===== 
 +^ Symptôme ^ Cause ^ Solution ^ 
 +| Gels, ''i2c_designware … timeout'', écran DSI noir après rotation (NixOS) | noyau sans ''I2C_DESIGNWARE_BAYTRAIL'' | passer à MX (noyau Liquorix) | 
 +| Écran noir avec seulement le curseur au démarrage sans HDMI | commande ''xrandr'' commune DSI + HDMI qui échoue si l'HDMI est absent ; rotation dans Xorg dès le démarrage | rotation faite par la session, commande séparée pour l'HDMI | 
 +| Écran noir puis gel en tournant la tablette avec l'HDMI branché | rotation + recopie HDMI trop lourde pour le GPU Cherry Trail | rotation bloquée en paysage quand l'HDMI est branché | 
 +| Clavier visuel qui ne s'ouvre jamais seul | onboard attend un « mode tablette » que la tablette ne signale pas | ''tablet-mode-detection-enabled=false'' (dconf), redémarrer onboard | 
 +| onboard en QWERTY | lancé avant la disposition belge | autostart d'origine masqué ; lancement différé avec ''setxkbmap be'' | 
 +| Icône de raccourci invisible sur le bureau | fichier ajouté après le démarrage du bureau | ''xfdesktop --reload'' | 
 +| zram inactif | service ''zramswap'' masqué par MX | ''systemctl unmask zramswap'' | 
 +| Image Plymouth : écran noir (NixOS) | ''i915'' chargé trop tôt (initrd) avant le pilote du rétroéclairage | pas de Plymouth ; image dans GRUB à la place | 
 +| Panneau XFCE disparu | écran intégré éteint pendant la session | rebrancher l'HDMI et choisir « miroir » | 
 + 
 +===== 8. Maintenance ===== 
 +  * **Mises à jour** : à la main (MX Updater ou ''sudo apt update && sudo apt full-upgrade''). Après une mise à jour du noyau, redémarrer et vérifier la caméra. 
 +  * **Modifier un réglage** : corriger ''installer-tablette.sh'', le relancer sur les tablettes déjà déployées, redémarrer. Refaire l'image Clonezilla pour les futures tablettes. 
 +  * **Journal de la dernière installation** : ''~/installation.log'' 
 +  * **Fichiers installés** : ''/usr/local/bin/tablette-*'', ''/usr/local/sbin/tablette-*'', ''/usr/local/share/tablette/'', ''/etc/xdg/autostart/tablette-*.desktop'', ''/etc/X11/xorg.conf.d/20-tablette.conf'' 
 + 
 +===== 9. Script complet ===== 
 +<file bash installer-tablette.sh> 
 +#!/bin/bash 
 +# ============================================================================= 
 +#  Tablette Athesi AP1001CL (Cherry Trail x5-Z8350) - MX Linux 25 (systemd) 
 +#  Installation / mise a jour de tous les reglages. Relancable sans risque. 
 +# 
 +#  Usage :  sudo ./installer-tablette.sh 
 +#  Fichiers optionnels a cote du script : 
 +#    wallpaper.png         fond d'ecran 
 +#    jeton-rustdesk.txt    jeton API de la console RustDesk Pro (jamais dans git) 
 +# ============================================================================= 
 +set -euo pipefail 
 +[ "$(id -u)" = 0 ] || exec sudo "$0" "$@" 
 + 
 +ICI=$(cd "$(dirname "$0")" && pwd) 
 +UTIL=tablette 
 +RD_SERVEUR=rust.makeitsimple.be 
 +RD_CLE='OhOcYR3xOjsI+4EInYR74DB3Ot1dd0aAl5W0odZXNVk=' 
 +RD_CARNET=PainAntan 
 +PART=/usr/local/share/tablette          # fichiers partages (fond d'ecran, raccourcis) 
 + 
 +etape() { echo; echo "=== $* ==="; } 
 +# Ecrit un fichier seulement si son contenu change (stdin -> chemin, mode) 
 +ecrire() { local f=$1 m=${2:-644} t; t=$(mktemp); cat >"$t" 
 +  if ! cmp -s "$t" "$f" 2>/dev/null; then install -D -m "$m" "$t" "$f"; echo "  ecrit : $f"; fi; rm -f "$t"; } 
 +# Fixe VAR=valeur dans /etc/environment 
 +env_var() { sed -i "/^$1=/d" /etc/environment; echo "$1=$2" >> /etc/environment; } 
 + 
 +id "$UTIL" >/dev/null 2>&1 || { echo "Utilisateur $UTIL absent : cree-le pendant l'installation de MX."; exit 1; } 
 +HOME_U=$(getent passwd "$UTIL" | cut -d: -f6) 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Paquets" 
 +export DEBIAN_FRONTEND=noninteractive 
 +apt-get update -q 
 +apt-get install -y -q onboard iio-sensor-proxy xinput xdotool x11-xserver-utils \ 
 +  v4l-utils yad curl ca-certificates dconf-cli at-spi2-core 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Demarrage (GRUB)" 
 +# Cherry Trail : C-states profonds -> gels ; reboot ACPI qui ne redemarre pas. 
 +# Pas de 'splash' : il bloquait l'interface graphique sur cette tablette. 
 +CMDLINE="quiet intel_idle.max_cstate=1 reboot=hard pcie_aspm=off" 
 +if ! grep -q "^GRUB_CMDLINE_LINUX_DEFAULT=\"$CMDLINE\"" /etc/default/grub; then 
 +  sed -i "s|^GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT=\"$CMDLINE\"|" /etc/default/grub 
 +  update-grub 
 +fi 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Wi-Fi Intel (iwlwifi)" 
 +ecrire /etc/modprobe.d/tablette-iwlwifi.conf <<'EOF' 
 +# Stabilite Wi-Fi : pas d'economie d'energie, pas de 802.11n, pas de coexistence BT, 
 +# chiffrement logiciel 
 +options iwlwifi power_save=0 11n_disable=1 bt_coex_active=0 swcrypto=1 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Firmware camera (atomisp / OV2680)" 
 +FW_SHA=e89359f4e4934c410c83d525e283f34c5fcce9cb5caa75ad8a32d66d3842d95c 
 +FW=/lib/firmware/intel/ipu/shisp_2401a0_v21.bin 
 +if ! echo "$FW_SHA  $FW" | sha256sum -c --quiet 2>/dev/null; then 
 +  t=$(mktemp) 
 +  curl -fsSL -o "$t" https://raw.githubusercontent.com/intel-aero/meta-intel-aero-base/master/recipes-kernel/linux/linux-yocto/shisp_2401a0_v21.bin 
 +  echo "$FW_SHA  $t" | sha256sum -c --quiet 
 +  install -D -m644 "$t" "$FW"; ln -sf intel/ipu/shisp_2401a0_v21.bin /lib/firmware/shisp_2401a0_v21.bin 
 +  rm -f "$t" 
 +fi 
 +# intel_atomisp2_pm s'accroche a l'ISP et empeche le pilote atomisp de le prendre 
 +ecrire /etc/modprobe.d/tablette-camera.conf <<'EOF' 
 +blacklist intel_atomisp2_pm 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Affichage et tactile (Xorg)" 
 +ecrire /etc/X11/xorg.conf.d/20-tablette.conf <<'EOF' 
 +# Pilote modesetting en DRI2 : necessaire pour la capture d'ecran RustDesk 
 +Section "Device" 
 +    Identifier "Intel" 
 +    Driver     "modesetting" 
 +    Option     "DRI" "2" 
 +    Option     "Monitor-DSI-1"  "DSI-1" 
 +    Option     "Monitor-HDMI-2" "HDMI-2" 
 +EndSection 
 +# Dalle native en portrait (1200x1920). La rotation en paysage est faite par la session 
 +# (tablette-ui) : tournee des le demarrage de X, la dalle restait noire avec seulement 
 +# le curseur jusqu'a la premiere rotation. 
 +Section "Monitor" 
 +    Identifier "DSI-1" 
 +    Option     "Primary" "true" 
 +EndSection 
 +# HDMI (PiKVM) superpose a l'ecran integre 
 +Section "Monitor" 
 +    Identifier "HDMI-2" 
 +    Option     "Position" "0 0" 
 +EndSection 
 +# Ecran tactile Goodix : meme rotation que l'affichage
 Section "InputClass" Section "InputClass"
-    Identifier "touch rotate"+    Identifier "tactile tourne"
     MatchIsTouchscreen "on"     MatchIsTouchscreen "on"
-    Option "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"+    Option     "TransformationMatrix" "0 1 0 -1 0 1 0 0 1"
 EndSection EndSection
-``` +# Libre-service : jamais de mise en veille de l'ecran 
-Matrice `0 1 0 -1 0 1 0 0 1` = 90° horaire (mode droite) — confirmée OK. +Section "ServerFlags" 
-Rappel : tester une matrice à chaud (sans reboot) +    Option "BlankTime"   "0" 
-```bash +    Option "StandbyTime" "0" 
-xinput list                                          # nom du périphérique +    Option "SuspendTime" "0" 
-xinput set-prop "NOM_TACTILE" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1 +    Option "OffTime"     "0" 
-``` +EndSection 
-Les 4 orientations possibles : +EOF 
-``` + 
-90° horaire      : 0 1 0 -1 0 1 0 0 1   <-- celle en place +# ----------------------------------------------------------------------------- 
-90° anti-horaire : 0 -1 1 1 0 0 0 0 1 +etape "Session : connexion automatique, variables, Firefox, onboard" 
-Miroir X         : -1 0 1 0 1 0 0 0 1 +groupadd -rf autologin; usermod -aG autologin,video,audio,input,netdev "$UTIL" 2>/dev/null || true 
-Axes inversés    : 0 1 0 1 0 0 0 0 1 +ecrire /etc/lightdm/lightdm.conf.d/50-tablette.conf <<EOF 
-``` +[Seat:*] 
---- +autologin-user=$UTIL 
-3. Caméra — firmware atomisp (OV2680) — RÉSOLU +autologin-user-timeout=0 
-L'ISP `atomisp` se charge mais manque son firmware → `Direct firmware load for intel/ipu/shisp_2401a0_v21.bin failed with error -2`. Le paquet Debian `firmware-misc-nonfree` / `firmware-intel-misc` ne le contient PAS. +EOF 
-Solution qui a fonctionné — téléchargement direct : + 
-```bash +env_var MOZ_USE_XINPUT2 1                   # defilement tactile Firefox 
-cd /lib/firmware/intel/ipu +env_var GNOME_ACCESSIBILITY 1               # AT-SPI force : onboard voit les champs texte 
-sudo wget https://raw.githubusercontent.com/intel-aero/meta-intel-aero-base/master/recipes-kernel/linux/linux-yocto/shisp_2401a0_v21.bin +env_var QT_ACCESSIBILITY 1 
-sha256sum shisp_2401a0_v21.bin +env_var QT_LINUX_ACCESSIBILITY_ALWAYS_ON 1 
-# doit valoir : e89359f4e4934c410c83d525e283f34c5fcce9cb5caa75ad8a32d66d3842d95c +env_var XCURSOR_SIZE 48 
-sudo update-initramfs -u + 
-sudo reboot +ecrire /etc/firefox/policies/policies.json <<'EOF' 
-``` +{ "policies": { 
-Après reboot : `/dev/video0` apparaît, capteur OV2680 rattaché. +    "Preferences": { 
-⚠️ Note : driver atomisp toujours en staging, qualité/compatibilité V4L2 limitée. Pour un usage caméra fiable (visio), une webcam USB reste supérieure. Mais installer le firmware peut aussi aider la stabilité de boot (les soft-lockups atomisp sans firmware sont connus). +      "accessibility.force_disabled": { "Value": 0, "Status": "default" }, 
---- +      "media.ffmpeg.vaapi.enabled": { "Value": true, "Status": "default" }, 
-4. Défilement tactile — RÉSOLU (Firefox) +      "dom.ipc.processCount": { "Value": 2, "Status": "default" }, 
-Constat : libinput classe le Goodix comme device `touch` avec `Scroll methods: none`. Aucune option libinput/xorg (`ScrollMethod`, `Tapping`, `TappingDrag`) ne s'applique — c'est une limite architecturale d'X11, pas un défaut de config. touchegg ne convient pas non plus (gère les touchpads multi-doigts, pas le tactile absolu). Le vrai défilement tactile universel n'existe que sous Wayland/GNOME. +      "browser.cache.disk.enable": { "Value": false, "Status": "default" }, 
-Solution retenue — défilement natif dans Firefox via XInput2 : +      "browser.sessionstore.interval": { "Value": 60000, "Status": "default" } 
-Dans `~/.xsessionrc` : +    }, 
-``` +    "DisableAppUpdate": true, 
-export MOZ_USE_XINPUT2=1 +    "DisablePasswordReveal": true, 
-``` +    "DisableDeveloperTools": true, 
-(⚠️ `~/.profile` n'était PAS transmis à la session graphique sur cette install — `~/.xsessionrc` fonctionne, lui.) +    "BlockAboutConfig": true 
-Test immédiat sans reconnexion : +} } 
-```bash +EOF 
-MOZ_USE_XINPUT2=1 firefox + 
-``` +# Clavier visuel : s'ouvre seul dans les champs texte ; bouton flottant de secours 
-Réglages web complémentaires dans `about:config` si besoin : `dom.w3c_touch_events.enabled=1`, `apz.gtk.touchpad_pinch.enabled`. +ecrire /etc/dconf/profile/user <<'EOF' 
---- +user-db:user 
-5. `~/.xsessionrc` — fichier centralisant les réglages de session +system-db:local 
-Contenu à regrouper (`/home/tablette/.xsessionrc`) : +EOF 
-``` +ecrire /etc/dconf/db/local.d/00-tablette <<'EOF' 
-export MOZ_USE_XINPUT2=1 +[org/gnome/desktop/a11y/applications] 
-setxkbmap fr +screen-keyboard-enabled=true 
-``` + 
-`MOZ_USE_XINPUT2=1` → défilement tactile Firefox (section 4). +[org/gnome/desktop/interface] 
-`setxkbmap fr` → clavier AZERTY (le clavier physique était QWERTY ; utile aussi pour onboard). +toolkit-accessibility=true 
---- + 
-6. Clavier virtuel auto (onboard) +[org/onboard/auto-show] 
-```bash +enabled=true 
-sudo apt install onboard +# La tablette ne signale pas de "mode tablette" : sans ceci, onboard ne s'affiche jamais seul 
-``` +tablet-mode-detection-enabled=false 
-Activer l'auto-show (accessibilité AT-SPI) — sur la session en cours : + 
-```bash +[org/onboard/icon-palette] 
-gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled true +in-use=true 
-``` +EOF 
-Puis Onboard → Préférences → Général → cocher « Afficher automatiquement lors de l'édition de texte ». +dconf update 
-Démarrage auto — `/home/tablette/.config/autostart/onboard.desktop` : + 
-```+# L'autostart livre par onboard demarre trop tot (avant la disposition belge) : on le masque 
 +# pour l'utilisateur et on lance le notre, apres un setxkbmap be 
 +install -d -o "$UTIL" -g "$UTIL" "$HOME_U/.config" "$HOME_U/.config/autostart" 
 +for a in onboard-autostart xfce4-screensaver light-locker conky; do 
 +  printf '[Desktop Entry]\nType=Application\nName=%s\nHidden=true\n' "$a" \ 
 +    | ecrire "$HOME_U/.config/autostart/$a.desktop" 
 +  chown "$UTIL:" "$HOME_U/.config/autostart/$a.desktop" 
 +done 
 +ecrire /etc/xdg/autostart/tablette-onboard.desktop <<'EOF'
 [Desktop Entry] [Desktop Entry]
 Type=Application Type=Application
-Name=Onboard +Name=Clavier visuel (tablette) 
-Exec=onboard+Exec=sh -c "sleep 10; setxkbmap be; exec onboard"
 X-GNOME-Autostart-enabled=true X-GNOME-Autostart-enabled=true
-``` +EOF 
-(si créé en root : `chown -R tablette:tablette /home/tablette/.config/autostart`) + 
-⚠️ Auto-show partiel : marche dans les apps GTK/AT-SPI, capricieux sous Firefox/Qt. Prévoir un lanceur onboard dans le tableau de bord XFCE comme secours manuel. +# ----------------------------------------------------------------------------- 
---- +etape "Fond d'ecran et raccourcis" 
-7. Accès SSH — agir sur la session graphique depuis SSH +if [ -f "$ICI/wallpaper.png" ]; then install -D -m644 "$ICI/wallpaper.png" "$PART/wallpaper.png"; fi 
-Pour que `gsettings` / `setxkbmap` / `onboard` agissent sur l'écran de la tablette (session déverrouillée requise) : +raccourci() { # id nom url [icone] 
-```bash +  ecrire "$PART/raccourcis/$1.desktop" <<EOF 
-export DISPLAY=:0 +[Desktop Entry] 
-export XAUTHORITY=/home/tablette/.Xauthority +Type=Application 
-``` +Name=$2 
-Le déclaratif (`~/.xsessionrc`, fichiers autostart, fichiers Xorg) ne nécessite pas ça — il s'applique au prochain login. +Exec=firefox --new-window "$3" 
---- +Icon=${4:-applications-internet} 
-8. Bureau à distance (RustDesk / AnyDesk) — écran noir — RÉSOLU +Terminal=false 
-Symptôme : la connexion s'établit mais l'écran reste noir côté client. Cause : le driver X par défaut `modesetting` produit un framebuffer (DRI3) que la capture d'écran de RustDesk/AnyDesk ne sait pas lire sur i915 Cherry Trail. +EOF 
-Pistes testées : +} 
-Driver `intel` + `AccelMethod uxa` → débloque la capture mais rendu très lent. Écarté. +raccourci boucom    "Boucom"    "https://lepaindantan.quadrabee.com" 
-Driver `intel` + `sna` → rapide mais risque de gels/corruptions sur Cherry Trail. Non retenu. +raccourci shyfter   "Shyfter"   "https://pos.shyfter.co" 
-Solution retenue — garder `modesetting` mais forcer DRI2 (rendu rapide natif ET capture fonctionnelle) : +raccourci infos-pda "Infos PDA" "https://painantan.sharepoint.com/:f:/s/PDAAdmin2/Ev_ASDVTxTxNszW6JAxCSpsBiUlDROPC28Ml7upK4BF8yg?e=phZYsd" folder-remote 
-`/etc/X11/xorg.conf.d/20-modesetting.conf` : + 
-``` +# ----------------------------------------------------------------------------- 
-Section "Device" +etape "Reglages d'interface appliques a chaque ouverture de session" 
-    Identifier "modeset" +ecrire /usr/local/bin/tablette-ui 755 <<'EOF' 
-    Driver "modesetting" +#!/bin/bash 
-    Option "DRI" "2" +# Interface tactile : tout en plus grand, fond d'ecran, raccourcis. Lance a chaque session. 
-EndSection +sleep 5   # laisser xfconfd, le panneau et le bureau demarrer 
-``` +q() { xfconf-query "$@"; } 
-Puis relog. Vérifier : `grep -i -E "modesetting|DRI" /var/log/Xorg.0.log`. +PART=/usr/local/share/tablette 
-(⚠️ ne pas cumuler avec un fichier `20-intel.conf` — supprimer ce dernier s'il existe : `sudo rm /etc/X11/xorg.conf.d/20-intel.conf`.) +# Ecran integre en paysage, sans mise a l'echelle. Commande separee pour l'HDMI : si l'HDMI 
-Fallback non destructif si besoin : `RUSTDESK_DISABLE_XShm=1 rustdesk`. +# est debranche, une commande commune echoue entierement et l'ecran reste noir. 
---- +xrandr --output DSI-1 --primary --mode 1200x1920 --rotate right --transform none --scale 1x1 --pos 0x0 || true 
-Reste à faire / optionnel +if xrandr | grep -q '^HDMI-2 connected'; then xrandr --output HDMI-2 --same-as DSI-1 || true; fi 
-[ ] Désactiver `smartd`/`smartmontools` (échoue au boot, inutile sur eMMC). En SysVinit : `sudo service smartmontools stop` puis `sudo update-rc.d smartmontools disable` (ou `sudo systemctl disable` seulement si booté en mode systemd). +# Raccourcis du bureau, approuves (sinon alerte 'lanceur non sur' d'XFCE) 
-[ ] Confirmer le réglage auto-show onboard coché dans l'interface après login.+desk=$(xdg-user-dir DESKTOP 2>/dev/null || echo "$HOME/Bureau"); mkdir -p "$desk" 
 +for f in "$PART"/raccourcis/*.desktop; do 
 +  dst="$desk/$(basename "$f")"; install -m755 "$f" "$dst" 
 +  gio set "$dst" metadata::xfce-exe-checksum "$(sha256sum "$dst" | cut -d' ' -f1)" 2>/dev/null || true 
 +done 
 +xfdesktop --reload 2>/dev/null || true   # sinon une icone ajoutee apres son demarrage reste invisible 
 +# Fenetres : pas de compositeur (perfs), theme a gros boutons 
 +q -c xfwm4 -p /general/use_compositing -n -t bool -s false 
 +q -c xfwm4 -p /general/theme -n -t string -s Default-xhdpi 
 +q -c xfwm4 -p /general/title_font -n -t string -s "Sans Bold 11" 
 +# Polices / DPI / curseur 
 +q -c xsettings -p /Xft/DPI -n -t int -s 144 
 +q -c xsettings -p /Gtk/CursorThemeSize -n -t int -s 48 
 +# Tableaux de bord et icones plus grands 
 +for p in $(q -c xfce4-panel -l | grep -oE '^/panels/panel-[0-9]+' | sort -u); do 
 +  q -c xfce4-panel -p "$p/size" -n -t uint -s 56 
 +  q -c xfce4-panel -p "$p/icon-size" -n -t uint -s 40 
 +done 
 +q -c xfce4-desktop -p /desktop-icons/icon-size -n -t uint -s 72 
 +# Jamais de mise en veille ni de verrouillage 
 +pm=/xfce4-power-manager 
 +q -c xfce4-power-manager -p $pm/dpms-enabled -n -t bool -s false 
 +q -c xfce4-power-manager -p $pm/blank-on-ac -n -t int -s 0 
 +q -c xfce4-power-manager -p $pm/blank-on-battery -n -t int -s 0 
 +q -c xfce4-power-manager -p $pm/lock-screen-suspend-hibernate -n -t bool -s false 
 +xset s off -dpms 2>/dev/null || true 
 +# Fond d'ecran sur chaque sortie connectee 
 +if [ -f "$PART/wallpaper.png" ]; then 
 +  for out in $(xrandr --query | awk '/ connected/{print $1}'); do 
 +    b=/backdrop/screen0/monitor$out/workspace0 
 +    q -c xfce4-desktop -p $b/last-image -n -t string -s "$PART/wallpaper.png" 
 +    q -c xfce4-desktop -p $b/image-style -n -t int -s 5 
 +  done 
 +fi 
 +EOF 
 +ecrire /etc/xdg/autostart/tablette-ui.desktop <<'EOF' 
 +[Desktop Entry] 
 +Type=Application 
 +Name=Reglages tablette 
 +Exec=/usr/local/bin/tablette-ui 
 +X-GNOME-Autostart-enabled=true 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Rotation automatique (accelerometre)" 
 +ecrire /usr/local/bin/tablette-rotation 755 <<'EOF' 
 +#!/bin/bash 
 +# Orientation physique (iio-sensor-proxy) -> rotation xrandr + matrice du tactile Goodix 
 +touch="Goodix Capacitive TouchScreen" 
 +last= 
 +apply() { 
 +  case "$1" in 
 +    # Correspondance validee sur la tablette (capteur monte tete-beche) 
 +    normal)    rot=inverted; m="-1 0 1 0 -1 1 0 0 1" ;; 
 +    left-up)   rot=left;     m="0 -1 1 1 0 0 0 0 1" ;; 
 +    right-up)  rot=right;    m="0 1 0 -1 0 1 0 0 1" ;; 
 +    bottom-up) rot=normal;   m="1 0 0 0 1 0 0 0 1" ;; 
 +    *) return ;; 
 +  esac 
 +  # HDMI branche (PiKVM) : on reste en paysage. Tourner l'ecran integre tout en le 
 +  # recopiant sur l'HDMI a donne ecran noir et gels sur cette puce. 
 +  if xrandr | grep -q '^HDMI-2 connected'; then rot=right; m="0 1 0 -1 0 1 0 0 1"; fi 
 +  [ "$rot" = "$last" ] && return 
 +  last=$rot 
 +  xrandr --output DSI-1 --rotate "$rot" --transform none --scale 1x1 
 +  for id in $(xinput list | grep -F "$touch" | grep -o 'id=[0-9]*' | cut -d= -f2); do 
 +    xinput set-prop "$id" "Coordinate Transformation Matrix" $m 2>/dev/null 
 +  done 
 +} 
 +sleep 8   # apres les reglages de session 
 +monitor-sensor | while read -r line; do 
 +  case "$line" in 
 +    *"orientation changed:"*|*"Has accelerometer"*orientation:*) 
 +      apply "$(echo "$line" | grep -oE '(normal|left-up|right-up|bottom-up)' | tail -1)" ;; 
 +  esac 
 +done 
 +EOF 
 +ecrire /etc/xdg/autostart/tablette-rotation.desktop <<'EOF' 
 +[Desktop Entry] 
 +Type=Application 
 +Name=Rotation automatique 
 +Exec=/usr/local/bin/tablette-rotation 
 +X-GNOME-Autostart-enabled=true 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Theme aux couleurs Le Pain d'Antan" 
 +# Icones Papirus avec des dossiers bruns (au lieu du bleu) : on repointe les liens 
 +# symboliques des dossiers *-blue* vers leur equivalent *-brown* livre avec Papirus 
 +for d in /usr/share/icons/Papirus/*/places; do 
 +  for l in "$d"/*.svg; do 
 +    [ -L "$l" ] || continue 
 +    c=$(readlink "$l") 
 +    case "$c" in *-blue*) n=${c//-blue/-brown}; [ -e "$d/$n" ] && ln -sfn "$n" "$l" ;; esac 
 +  done 
 +done 
 +gtk-update-icon-cache -qf /usr/share/icons/Papirus 2>/dev/null || true 
 +# Brun fonce du fond d'ecran, creme du logo, caramel pour les selections 
 +install -d -o "$UTIL" -g "$UTIL" "$HOME_U/.config/gtk-3.0" 
 +ecrire "$HOME_U/.config/gtk-3.0/gtk.css" <<'EOF' 
 +/* Couleurs Le Pain d'Antan (tablette) */ 
 +@define-color theme_selected_bg_color #9a6a45; 
 +@define-color theme_selected_fg_color #ffffff; 
 +*:selected, selection, menuitem:hover, row:selected, treeview:selected { 
 +  background-color: #9a6a45; color: #ffffff; } 
 +progressbar progress, scale highlight { background-color: #9a6a45; border-color: #6e4a30; } 
 +#XfcePanelWindow, .xfce4-panel { background-color: #2e1d15; color: #f3e9d8; } 
 +#XfcePanelWindow button, #XfcePanelWindow label, .xfce4-panel button, .xfce4-panel label { color: #f3e9d8; } 
 +#XfcePanelWindow button:hover, #XfcePanelWindow button:checked { background-color: #4a2e20; } 
 +EOF 
 +chown "$UTIL:" "$HOME_U/.config/gtk-3.0/gtk.css" 
 +ecrire /usr/local/bin/tablette-theme 755 <<'EOF' 
 +#!/bin/bash 
 +# Theme neutre + accents bruns ; retrait des icones MX par defaut du bureau 
 +sleep 6 
 +xfconf-query -c xsettings -p /Net/ThemeName -n -t string -s Greybird 
 +xfconf-query -c xsettings -p /Net/IconThemeName -n -t string -s Papirus 
 +xfconf-query -c xfce4-panel -p /panels/panel-1/background-style -n -t uint -s 0 2>/dev/null 
 +desk=$(xdg-user-dir DESKTOP 2>/dev/null || echo "$HOME/Bureau") 
 +rm -f "$desk/FAQ.desktop" "$desk/Help.desktop" "$desk/Quick_System_Info.desktop" 
 +EOF 
 +ecrire /etc/xdg/autostart/tablette-theme.desktop <<'EOF' 
 +[Desktop Entry] 
 +Type=Application 
 +Name=Theme tablette 
 +Exec=/usr/local/bin/tablette-theme 
 +X-GNOME-Autostart-enabled=true 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Performances (memoire, services, eMMC, video)" 
 +apt-get install -y -q zram-tools i965-va-driver python3-pil 
 +# Memoire compressee : moins d'echanges avec l'eMMC, lente 
 +ecrire /etc/default/zramswap <<'EOF' 
 +ALGO=zstd 
 +PERCENT=50 
 +PRIORITY=100 
 +EOF 
 +systemctl unmask zramswap >/dev/null 2>&1 || true; systemctl enable zramswap >/dev/null 2>&1 || true; systemctl restart zramswap || true 
 +ecrire /etc/sysctl.d/90-tablette.conf <<'EOF' 
 +vm.swappiness=100 
 +EOF 
 +sysctl -q --system || true 
 +env_var LIBVA_DRIVER_NAME i965              # decodage video materiel (Cherry Trail) 
 +# Services inutiles sur la tablette (Bluetooth conserve) 
 +for s in cups cups-browsed ModemManager; do systemctl disable --now "$s" >/dev/null 2>&1 || true; done 
 +# Pas de verification des mises a jour MX en arriere-plan (mises a jour faites a la main) 
 +for f in /etc/xdg/autostart/*.desktop; do 
 +  if grep -qiE 'apt-notifier|mx-updater' "$f"; then 
 +    a=$(basename "$f") 
 +    printf '[Desktop Entry]\nType=Application\nName=%s\nHidden=true\n' "$a" | ecrire "$HOME_U/.config/autostart/$a" 
 +    chown "$UTIL:" "$HOME_U/.config/autostart/$a" 
 +  fi 
 +done 
 +# eMMC : pas d'ecriture a chaque lecture (noatime), TRIM hebdomadaire, journal limite 
 +if ! awk '$2=="/" {print $4}' /etc/fstab | grep -q noatime; then 
 +  cp /etc/fstab /etc/fstab.avant-tablette 
 +  awk 'BEGIN{OFS="\t"} $1 !~ /^#/ && $2=="/" {$4=$4",noatime"} {print}' /etc/fstab.avant-tablette > /etc/fstab 
 +fi 
 +systemctl enable fstrim.timer >/dev/null 2>&1 || true 
 +ecrire /etc/systemd/journald.conf.d/tablette.conf <<'EOF' 
 +[Journal] 
 +SystemMaxUse=64M 
 +EOF 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Image du menu de demarrage (GRUB)" 
 +# GRUB s'affiche sur la dalle en portrait natif : l'image est composee en paysage 
 +# (logo centre sur le brun du fond d'ecran) puis tournee d'un quart de tour. 
 +if [ -f "$ICI/bootloader.png" ]; then 
 +  python3 - "$ICI/bootloader.png" /boot/grub/tablette-fond.png <<'PY' 
 +import sys 
 +from PIL import Image 
 +src = Image.open(sys.argv[1]).convert("RGBA") 
 +fond = Image.new("RGBA", (1920, 1200), (74, 46, 32, 255)) 
 +boite = (1920, 1200) if src.width >= 1600 else (1150, 720) 
 +src.thumbnail(boite) 
 +fond.alpha_composite(src, ((1920 - src.width) // 2, (1200 - src.height) // 2)) 
 +fond.convert("RGB").transpose(Image.Transpose.ROTATE_270).save(sys.argv[2]) 
 +PY 
 +  sed -i -e '/^GRUB_THEME=/s/^/#/' -e '/^GRUB_BACKGROUND=/d' /etc/default/grub 
 +  echo 'GRUB_BACKGROUND="/boot/grub/tablette-fond.png"' >> /etc/default/grub 
 +  update-grub 
 +fi 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "RustDesk" 
 +if ! command -v rustdesk >/dev/null; then 
 +  url=$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk/releases/latest \ 
 +        | grep -oE '"browser_download_url": *"[^"]+x86_64\.deb"' | tail -n1 | cut -d'"' -f4) 
 +  t=$(mktemp --suffix=.deb); curl -fsSL -o "$t" "$url" 
 +  apt-get install -y -q "$t"; rm -f "$t" 
 +fi 
 +install -d -m700 /etc/rustdesk 
 +[ -f "$ICI/jeton-rustdesk.txt" ] && install -m600 "$ICI/jeton-rustdesk.txt" /etc/rustdesk/token 
 + 
 +ecrire /usr/local/sbin/tablette-rustdesk 755 <<EOF 
 +#!/bin/bash 
 +# tablette-rustdesk config        : serveur Make IT Simple pour root et l'utilisateur 
 +# tablette-rustdesk motdepasse    : mot de passe permanent (genere s'il n'existe pas) 
 +# tablette-rustdesk enregistrer N : inscription dans le carnet $RD_CARNET sous le nom N 
 +set -u 
 +SERVEUR=$RD_SERVEUR; CLE='$RD_CLE'; CARNET=$RD_CARNET; UTIL=$UTIL 
 +EOF 
 +cat >>/usr/local/sbin/tablette-rustdesk <<'EOF' 
 +toml() { cat <<T 
 +rendezvous_server = '$SERVEUR:21116' 
 +nat_type = 1 
 +serial = 0 
 + 
 +[options] 
 +custom-rendezvous-server = '$SERVEUR' 
 +relay-server = '$SERVEUR' 
 +key = '$CLE' 
 +api-server = 'https://$SERVEUR' 
 +T 
 +} 
 +attendre_service() { # la commande --password passe par l'IPC du service 
 +  for i in $(seq 1 30); do 
 +    out=$(rustdesk --password "$1" 2>&1) && case "$out" in *refused*|*rror*) ;; *) return 0 ;; esac 
 +    sleep 2 
 +  done; return 1 
 +} 
 +case "${1:-}" in 
 +  config) 
 +    systemctl stop rustdesk 2>/dev/null || true 
 +    h=$(getent passwd "$UTIL" | cut -d: -f6) 
 +    for d in /root/.config/rustdesk "$h/.config/rustdesk"; do 
 +      install -d -m700 "$d"; toml > "$d/RustDesk2.toml"; chmod 600 "$d/RustDesk2.toml" 
 +    done 
 +    chown -R "$UTIL:" "$h/.config/rustdesk" 
 +    systemctl enable --now rustdesk ;; 
 +  motdepasse) 
 +    [ -s /etc/rustdesk/password ] || ( umask 077; tr -dc 'A-Za-z0-9' </dev/urandom | head -c 20 > /etc/rustdesk/password ) 
 +    attendre_service "$(cat /etc/rustdesk/password)" && echo "mot de passe permanent applique" ;; 
 +  enregistrer) 
 +    nom=${2:?nom} 
 +    [ -s /etc/rustdesk/token ] || { echo "pas de jeton (/etc/rustdesk/token) : enregistrement ignore"; exit 0; } 
 +    sleep 10   # laisser le service s'annoncer aupres du serveur 
 +    out=$(rustdesk --assign --token "$(cat /etc/rustdesk/token)" --address_book_name "$CARNET" \ 
 +          --address_book_alias "$nom" --address_book_password "$(cat /etc/rustdesk/password)" 2>&1) 
 +    echo "$out"; case "$out" in *rror*|*ailed*) exit 1 ;; esac 
 +    echo "ID RustDesk : $(rustdesk --get-id)" ;; 
 +  *) echo "usage : $0 config|motdepasse|enregistrer NOM"; exit 2 ;; 
 +esac 
 +EOF 
 +chmod 755 /usr/local/sbin/tablette-rustdesk 
 +tablette-rustdesk config 
 +tablette-rustdesk motdepasse || echo "  (mot de passe : le service n'a pas repondu, relancer le script)" 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Clonage : preparation et premier demarrage" 
 +# 1) tablette-preparer-clonage : a lancer sur la tablette modele juste avant l'image Clonezilla 
 +ecrire /usr/local/sbin/tablette-preparer-clonage 755 <<'EOF' 
 +#!/bin/bash 
 +# Efface l'identite de cette tablette puis l'eteint. Au prochain demarrage (modele ou clone), 
 +# un nom est demande a l'ecran et une nouvelle identite est creee. 
 +set -e 
 +[ "$(id -u)" = 0 ] || exec sudo "$0" "$@" 
 +[ -s /etc/rustdesk/token ] || echo "ATTENTION : pas de jeton RustDesk, les clones ne s'inscriront pas dans le carnet." 
 +read -r -p "Effacer l'identite de cette tablette et l'eteindre ? [o/N] " r; [ "$r" = o ] || exit 1 
 +systemctl stop rustdesk || true 
 +rm -f /root/.config/rustdesk/RustDesk.toml /home/*/.config/rustdesk/RustDesk.toml   # -> nouvel ID 
 +rm -f /etc/rustdesk/password                                                        # -> nouveau mot de passe 
 +rm -f /etc/ssh/ssh_host_*                                                           # -> nouvelles cles SSH 
 +truncate -s0 /etc/machine-id; rm -f /var/lib/dbus/machine-id                        # -> nouveau machine-id 
 +install -d /etc/tablette; touch /etc/tablette/a-personnaliser 
 +journalctl --rotate >/dev/null 2>&1 && journalctl --vacuum-time=1s >/dev/null 2>&1 || true 
 +echo "Prete pour l'image Clonezilla. Extinction."; sleep 2; poweroff 
 +EOF 
 + 
 +# 2) Au demarrage (root) : nouvelle identite, puis attente du nom saisi dans la session 
 +ecrire /usr/local/sbin/tablette-premier-demarrage 755 <<'EOF' 
 +#!/bin/bash 
 +set -u 
 +[ -s /var/lib/dbus/machine-id ] || ln -sf /etc/machine-id /var/lib/dbus/machine-id 
 +ls /etc/ssh/ssh_host_*_key >/dev/null 2>&1 || ssh-keygen -A 2>/dev/null || true 
 +install -d -m 770 -o root -g tablette /run/tablette      # le nom y sera depose par la session 
 +EOF 
 +ecrire /etc/systemd/system/tablette-premier-demarrage.service <<'EOF' 
 +[Unit] 
 +Description=Tablette : nouvelle identite apres clonage 
 +ConditionPathExists=/etc/tablette/a-personnaliser 
 +Before=display-manager.service ssh.service rustdesk.service 
 +[Service] 
 +Type=oneshot 
 +ExecStart=/usr/local/sbin/tablette-premier-demarrage 
 +[Install] 
 +WantedBy=multi-user.target 
 +EOF 
 + 
 +# 3) Dans la session : demande du nom (clavier visuel affiche) 
 +ecrire /usr/local/bin/tablette-demander-nom 755 <<'EOF' 
 +#!/bin/bash 
 +[ -e /etc/tablette/a-personnaliser ] || exit 0 
 +sleep 12; pgrep -x onboard >/dev/null || (setxkbmap be; onboard &) 
 +while :; do 
 +  nom=$(yad --entry --center --on-top --title "Nouvelle tablette" --width 600 \ 
 +        --text "<big>Nom de cette tablette ?</big>\n(minuscules, chiffres et tirets - ex. pa-ixl-tab-02)" \ 
 +        --button="Valider:0") || continue 
 +  nom=$(echo "$nom" | tr 'A-Z' 'a-z') 
 +  if [[ "$nom" =~ ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$ ]]; then break; fi 
 +  yad --error --center --text "Nom invalide : $nom" --button=OK:0 
 +done 
 +echo "$nom" > /run/tablette/nom 
 +yad --info --center --no-buttons --timeout 120 --text "<big>Configuration de '$nom'...</big>\nLa tablette va redemarrer." & 
 +EOF 
 +ecrire /etc/xdg/autostart/tablette-demander-nom.desktop <<'EOF' 
 +[Desktop Entry] 
 +Type=Application 
 +Name=Nom de la tablette 
 +Exec=/usr/local/bin/tablette-demander-nom 
 +X-GNOME-Autostart-enabled=true 
 +EOF 
 + 
 +# 4) Des que le nom est depose (root) : nom de machine, RustDesk, puis redemarrage 
 +ecrire /usr/local/sbin/tablette-nommer 755 <<'EOF' 
 +#!/bin/bash 
 +set -u 
 +nom=$(head -c 63 /run/tablette/nom | tr -cd 'a-z0-9-'); rm -f /run/tablette/nom 
 +[ -n "$nom" ] || exit 1 
 +hostnamectl set-hostname "$nom" 
 +sed -i "/^127\.0\.1\.1/d" /etc/hosts; echo -e "127.0.1.1\t$nom" >> /etc/hosts 
 +systemctl restart rustdesk; sleep 5 
 +tablette-rustdesk motdepasse 
 +if tablette-rustdesk enregistrer "$nom"; then 
 +  echo "Inscrite dans le carnet RustDesk sous '$nom'" 
 +else 
 +  echo "Inscription RustDesk echouee : relancer 'sudo tablette-rustdesk enregistrer $nom'" 
 +fi 
 +rm -f /etc/tablette/a-personnaliser 
 +sleep 3; systemctl reboot 
 +EOF 
 +ecrire /etc/systemd/system/tablette-nommer.path <<'EOF' 
 +[Unit] 
 +Description=Tablette : nom saisi au premier demarrage 
 +ConditionPathExists=/etc/tablette/a-personnaliser 
 +[Path] 
 +PathExists=/run/tablette/nom 
 +[Install] 
 +WantedBy=multi-user.target 
 +EOF 
 +ecrire /etc/systemd/system/tablette-nommer.service <<'EOF' 
 +[Unit] 
 +Description=Tablette : nom, RustDesk, redemarrage 
 +[Service] 
 +Type=oneshot 
 +ExecStart=/usr/local/sbin/tablette-nommer 
 +EOF 
 +systemctl daemon-reload 
 +systemctl enable tablette-premier-demarrage.service tablette-nommer.path 
 + 
 +# ----------------------------------------------------------------------------- 
 +etape "Inscription RustDesk de cette tablette" 
 +tablette-rustdesk enregistrer "$(hostname)" || echo "  (a relancer plus tard : sudo tablette-rustdesk enregistrer $(hostname))" 
 + 
 +etape "Termine" 
 +echo "ID RustDesk : $(rustdesk --get-id 2>/dev/null)" 
 +echo "Mot de passe permanent : sudo cat /etc/rustdesk/password" 
 +echo "Redemarre la tablette pour appliquer GRUB, Xorg et la session." 
 +</file>
linux/athesi.1791028375.txt.gz · Dernière modification : de root