linux:athesi
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| linux:athesi [2026/10/03 11:52] – créée root | linux:athesi [2026/10/23 19:03] (Version actuelle) – root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | Config tablette | + | ====== Tablette |
| - | 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' |
| - | Tactile Goodix | + | |
| - | Caméra | + | * **Matériel** : Athesi AP1001CL — Intel Atom x5-Z8350 (Cherry Trail), |
| - | Hostname | + | * **Système** |
| - | MX Linux XFCE 64 bit, kernel récent | + | * **Tablette modèle** |
| - | ⚠️ | + | * **Accès à distance** |
| - | Messages `cherryview-pinctrl INT33FF:04 ... error -61` et `i915 ... Failed to get the SoC PWM chip` = faux positifs bénins, à ignorer | + | * **Projet** : dossier '' |
| - | --- | + | |
| - | 1. GRUB — `/etc/default/grub` | + | ===== 1. Pourquoi |
| - | Dans `GRUB_CMDLINE_LINUX_DEFAULT` | + | |
| - | Retirer `splash` | + | NixOS a d' |
| - | Paramètres | + | |
| - | ⚠️ Orthographe | + | * Le bus I2C du circuit d' |
| - | Rotation | + | * Le noyau NixOS standard **n' |
| - | ``` | + | * Corriger demande de **recompiler tout le noyau** (l' |
| - | | + | * Le noyau Liquorix de MX a '' |
| - | | + | |
| - | Après toute modif : | + | Vérification sur une tablette : |
| - | ```bash | + | <code bash> |
| - | sudo update-grub | + | grep DESIGNWARE_BAYTRAIL / |
| - | ``` | + | </ |
| - | --- | + | |
| - | 2. Tactile — rotation à suivre | + | ===== 2. Installation de MX sur la tablette modèle ===== |
| - | Le tactile ne se pivote PAS via GRUB (couche input, pas noyau). Fichier Xorg. | + | |
| - | `/ | + | ==== 2.1 Démarrer sur la clé USB ==== |
| - | ``` | + | - Redémarrer la tablette |
| + | - Dans le menu GRUB de la clé, sélectionner l' | ||
| + | < | ||
| + | lang=fr_BE kbd=be tz=Europe/ | ||
| + | </code> | ||
| + | | ||
| + | |||
| + | ==== 2.2 Installateur MX ==== | ||
| + | * Type : **installation classique sur tout le disque** — '' | ||
| + | * Fichier | ||
| + | * Nom : '' | ||
| + | * Locale Belgique – français, fuseau Europe/ | ||
| + | * Utilisateur '' | ||
| + | |||
| + | Les options '' | ||
| + | |||
| + | ==== 2.3 Premier démarrage avec le PiKVM ==== | ||
| + | Avec l'HDMI branché, MX place l'HDMI **à côté** de l' | ||
| + | |||
| + | <WRAP important> | ||
| + | Ne pas éteindre l' | ||
| + | </ | ||
| + | |||
| + | Connecter ensuite le Wi-Fi **PainAntan** via l' | ||
| + | |||
| + | ===== 3. Script d' | ||
| + | |||
| + | ==== 3.1 Préparer le dossier ==== | ||
| + | Dans '' | ||
| + | ^ Fichier ^ Rôle ^ Obligatoire ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | <WRAP important> | ||
| + | Le jeton RustDesk ne va **jamais** dans git. Un '' | ||
| + | </ | ||
| + | |||
| + | Depuis une clé USB (montée sous ''/ | ||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | U=/ | ||
| + | cp $U/ | ||
| + | tr -d '\r\n ' < $U/ | ||
| + | </ | ||
| + | |||
| + | ==== 3.2 Lancer ==== | ||
| + | <code bash> | ||
| + | cd ~/ | ||
| + | </ | ||
| + | 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, | ||
| + | | GRUB | '' | ||
| + | | Wi-Fi Intel | '' | ||
| + | | Caméra | firmware '' | ||
| + | | Xorg | pilote modesetting en **DRI2** (capture RustDesk) ; matrice tactile ; aucune mise en veille de l' | ||
| + | | Session | connexion automatique LightDM ; variables '' | ||
| + | | 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 '' | ||
| + | | Clavier visuel | onboard en AZERTY belge, ouverture automatique dans les champs texte, bouton flottant | | ||
| + | | Interface | ||
| + | | Rotation ('' | ||
| + | | 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), | ||
| + | | GRUB graphique | ||
| + | | RustDesk | dernière version | ||
| + | | Clonage | installe '' | ||
| + | |||
| + | ===== 4. Clonage ===== | ||
| + | |||
| + | ==== 4.1 Ordre ==== | ||
| + | - Sur la tablette modèle : script d' | ||
| + | - Sur la modèle : <code bash> | ||
| + | - **Clonezilla** | ||
| + | - **Premier démarrage** de chaque tablette (et de la modèle) : | ||
| + | * une fenêtre demande le **nom** (minuscules, | ||
| + | * 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 ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | ===== 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' | ||
| + | * rien d' | ||
| + | Le jeton est stocké dans ''/ | ||
| + | |||
| + | ==== 5.2 Mots de passe ==== | ||
| + | * **Un mot de passe différent par tablette**, aléatoire, 20 caractères, | ||
| + | * Lecture sur la tablette : '' | ||
| + | * Stocké aussi dans le carnet PainAntan (serveur auto-hébergé). La console n' | ||
| + | * Réinscription manuelle : '' | ||
| + | |||
| + | ==== 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' | ||
| + | * 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 ''/ | ||
| + | |||
| + | ===== 6. Tests après installation ===== | ||
| + | * [ ] Démarrage **sans HDMI** : le bureau s' | ||
| + | * [ ] Image dans le menu GRUB | ||
| + | * [ ] Rotation | ||
| + | * [ ] Clavier visuel AZERTY dans un champ texte de Firefox | ||
| + | * [ ] Raccourcis Boucom, Shyfter, Infos PDA | ||
| + | * [ ] Caméra | ||
| + | * [ ] Batterie visible ('' | ||
| + | * [ ] RustDesk : connexion depuis le carnet PainAntan | ||
| + | * [ ] Mémoire compressée : '' | ||
| + | |||
| + | ===== 7. Problèmes rencontrés et solutions ===== | ||
| + | ^ Symptôme ^ Cause ^ Solution ^ | ||
| + | | Gels, '' | ||
| + | | Écran noir avec seulement le curseur au démarrage sans HDMI | commande '' | ||
| + | | É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' | ||
| + | | onboard en QWERTY | lancé avant la disposition belge | autostart d' | ||
| + | | Icône de raccourci invisible sur le bureau | fichier ajouté après le démarrage du bureau | '' | ||
| + | | zram inactif | service '' | ||
| + | | Image Plymouth | ||
| + | | Panneau XFCE disparu | écran intégré éteint pendant la session | rebrancher l'HDMI et choisir « miroir » | | ||
| + | |||
| + | ===== 8. Maintenance ===== | ||
| + | | ||
| + | * **Modifier un réglage** : corriger '' | ||
| + | * **Journal de la dernière installation** : '' | ||
| + | * **Fichiers installés** : ''/ | ||
| + | |||
| + | ===== 9. Script complet ===== | ||
| + | <file bash installer-tablette.sh> | ||
| + | # | ||
| + | # ============================================================================= | ||
| + | # Tablette Athesi AP1001CL (Cherry Trail x5-Z8350) - MX Linux 25 (systemd) | ||
| + | # Installation / mise a jour de tous les reglages. Relancable sans risque. | ||
| + | # | ||
| + | # Usage : sudo ./ | ||
| + | # Fichiers optionnels a cote du script : | ||
| + | # wallpaper.png | ||
| + | # jeton-rustdesk.txt | ||
| + | # ============================================================================= | ||
| + | set -euo pipefail | ||
| + | [ "$(id -u)" = 0 ] || exec sudo " | ||
| + | |||
| + | ICI=$(cd " | ||
| + | UTIL=tablette | ||
| + | RD_SERVEUR=rust.makeitsimple.be | ||
| + | RD_CLE=' | ||
| + | RD_CARNET=PainAntan | ||
| + | PART=/ | ||
| + | |||
| + | 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 >" | ||
| + | | ||
| + | # Fixe VAR=valeur dans / | ||
| + | env_var() { sed -i "/ | ||
| + | |||
| + | id " | ||
| + | HOME_U=$(getent passwd " | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | export DEBIAN_FRONTEND=noninteractive | ||
| + | apt-get | ||
| + | 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 " | ||
| + | # Cherry Trail : C-states profonds -> gels ; reboot ACPI qui ne redemarre pas. | ||
| + | # Pas de ' | ||
| + | CMDLINE=" | ||
| + | if ! grep -q " | ||
| + | sed -i " | ||
| + | update-grub | ||
| + | fi | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape "Wi-Fi Intel (iwlwifi)" | ||
| + | ecrire / | ||
| + | # Stabilite Wi-Fi : pas d' | ||
| + | # chiffrement logiciel | ||
| + | options iwlwifi power_save=0 11n_disable=1 bt_coex_active=0 swcrypto=1 | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | FW_SHA=e89359f4e4934c410c83d525e283f34c5fcce9cb5caa75ad8a32d66d3842d95c | ||
| + | FW=/ | ||
| + | if ! echo " | ||
| + | t=$(mktemp) | ||
| + | curl -fsSL -o " | ||
| + | echo " | ||
| + | install -D -m644 " | ||
| + | rm -f " | ||
| + | fi | ||
| + | # intel_atomisp2_pm s' | ||
| + | ecrire / | ||
| + | blacklist intel_atomisp2_pm | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | ecrire | ||
| + | # Pilote modesetting en DRI2 : necessaire pour la capture d' | ||
| + | Section " | ||
| + | Identifier " | ||
| + | Driver | ||
| + | Option | ||
| + | Option | ||
| + | Option | ||
| + | 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' | ||
| + | Section " | ||
| + | Identifier " | ||
| + | Option | ||
| + | EndSection | ||
| + | # HDMI (PiKVM) superpose a l' | ||
| + | Section " | ||
| + | Identifier " | ||
| + | Option | ||
| + | EndSection | ||
| + | # Ecran tactile Goodix : meme rotation que l' | ||
| Section " | Section " | ||
| - | Identifier "touch rotate" | + | Identifier "tactile tourne" |
| MatchIsTouchscreen " | MatchIsTouchscreen " | ||
| - | Option " | + | Option |
| EndSection | EndSection | ||
| - | ``` | + | # Libre-service |
| - | Matrice `0 1 0 -1 0 1 0 0 1` = 90° horaire (mode droite) — confirmée OK. | + | Section " |
| - | Rappel | + | |
| - | ```bash | + | |
| - | xinput list # nom du périphérique | + | Option " |
| - | xinput set-prop | + | Option " |
| - | ``` | + | EndSection |
| - | Les 4 orientations possibles : | + | EOF |
| - | ``` | + | |
| - | 90° horaire | + | # ----------------------------------------------------------------------------- |
| - | 90° anti-horaire : 0 -1 1 1 0 0 0 0 1 | + | etape " |
| - | Miroir X : | + | groupadd -rf autologin; usermod -aG autologin, |
| - | Axes inversés | + | ecrire |
| - | ``` | + | [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/ | + | EOF |
| - | Solution qui a fonctionné — téléchargement direct | + | |
| - | ```bash | + | env_var MOZ_USE_XINPUT2 1 # defilement tactile Firefox |
| - | cd /lib/firmware/ | + | 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/ | + | 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 |
| - | ``` | + | { " |
| - | Après reboot : `/dev/video0` apparaît, capteur OV2680 rattaché. | + | " |
| - | ⚠️ Note : driver atomisp toujours en staging, qualité/ | + | " |
| - | --- | + | "media.ffmpeg.vaapi.enabled" |
| - | 4. Défilement tactile — RÉSOLU (Firefox) | + | "dom.ipc.processCount": |
| - | Constat | + | " |
| - | Solution retenue — défilement natif dans Firefox via XInput2 | + | " |
| - | Dans `~/.xsessionrc` | + | }, |
| - | ``` | + | " |
| - | export MOZ_USE_XINPUT2=1 | + | " |
| - | ``` | + | " |
| - | (⚠️ `~/ | + | " |
| - | Test immédiat sans reconnexion | + | } } |
| - | ```bash | + | EOF |
| - | MOZ_USE_XINPUT2=1 firefox | + | |
| - | ``` | + | # Clavier visuel : s' |
| - | Réglages web complémentaires | + | ecrire / |
| - | --- | + | user-db:user |
| - | 5. `~/.xsessionrc` — fichier centralisant les réglages de session | + | system-db:local |
| - | Contenu à regrouper (`/home/tablette/.xsessionrc`) : | + | EOF |
| - | ``` | + | ecrire |
| - | export MOZ_USE_XINPUT2=1 | + | [org/gnome/desktop/a11y/ |
| - | setxkbmap fr | + | screen-keyboard-enabled=true |
| - | ``` | + | |
| - | `MOZ_USE_XINPUT2=1` → défilement tactile Firefox (section 4). | + | [org/ |
| - | `setxkbmap fr` → clavier AZERTY (le clavier physique était QWERTY ; utile aussi pour onboard). | + | toolkit-accessibility=true |
| - | --- | + | |
| - | 6. Clavier virtuel auto (onboard) | + | [org/ |
| - | ```bash | + | enabled=true |
| - | sudo apt install onboard | + | # La tablette ne signale pas de "mode tablette" |
| - | ``` | + | tablet-mode-detection-enabled=false |
| - | Activer l'auto-show | + | |
| - | ```bash | + | [org/onboard/ |
| - | 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/ | + | |
| - | ``` | + | # L'autostart livre par onboard demarre trop tot (avant la disposition belge) |
| + | # pour l' | ||
| + | install -d -o " | ||
| + | for a in onboard-autostart xfce4-screensaver light-locker conky; do | ||
| + | | ||
| + | | ecrire " | ||
| + | chown " | ||
| + | done | ||
| + | ecrire / | ||
| [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 | + | |
| - | ⚠️ Auto-show partiel | + | # ----------------------------------------------------------------------------- |
| - | --- | + | etape "Fond d' |
| - | 7. Accès SSH — agir sur la session graphique depuis SSH | + | if [ -f " |
| - | Pour que `gsettings` | + | raccourci() { # id nom url [icone] |
| - | ```bash | + | ecrire " |
| - | export DISPLAY=:0 | + | [Desktop Entry] |
| - | export XAUTHORITY=/home/tablette/.Xauthority | + | Type=Application |
| - | ``` | + | Name=$2 |
| - | Le déclaratif | + | Exec=firefox --new-window " |
| - | --- | + | Icon=${4:-applications-internet} |
| - | 8. Bureau à distance | + | Terminal=false |
| - | Symptôme | + | EOF |
| - | Pistes testées : | + | } |
| - | Driver `intel` + `AccelMethod uxa` → débloque la capture mais rendu très lent. Écarté. | + | raccourci boucom |
| - | Driver `intel` + `sna` → rapide mais risque de gels/ | + | raccourci shyfter |
| - | Solution retenue — garder `modesetting` mais forcer DRI2 (rendu rapide natif ET capture fonctionnelle) : | + | raccourci infos-pda "Infos PDA" " |
| - | `/etc/X11/xorg.conf.d/20-modesetting.conf` : | + | |
| - | ``` | + | # ----------------------------------------------------------------------------- |
| - | Section | + | etape " |
| - | | + | ecrire / |
| - | | + | #!/bin/bash |
| - | | + | # Interface tactile : tout en plus grand, fond d' |
| - | EndSection | + | sleep 5 # laisser xfconfd, le panneau et le bureau demarrer |
| - | ``` | + | q() { xfconf-query " |
| - | Puis relog. Vérifier | + | PART=/usr/ |
| - | (⚠️ | + | # Ecran integre en paysage, sans mise a l' |
| - | Fallback non destructif si besoin | + | # est debranche, une commande commune echoue entierement et l' |
| - | --- | + | xrandr --output DSI-1 --primary --mode 1200x1920 --rotate right --transform none --scale 1x1 --pos 0x0 || true |
| - | Reste à faire / optionnel | + | if xrandr | grep -q ' |
| - | [ ] Désactiver `smartd`/`smartmontools` | + | # Raccourcis du bureau, approuves (sinon alerte ' |
| - | [ ] Confirmer le réglage auto-show onboard coché dans l'interface après login. | + | desk=$(xdg-user-dir DESKTOP 2>/ |
| + | for f in " | ||
| + | dst=" | ||
| + | gio set " | ||
| + | done | ||
| + | xfdesktop | ||
| + | # Fenetres : pas de compositeur (perfs), theme a gros boutons | ||
| + | q -c xfwm4 -p /general/ | ||
| + | q -c xfwm4 -p / | ||
| + | q -c xfwm4 -p / | ||
| + | # Polices / DPI / curseur | ||
| + | q -c xsettings -p /Xft/DPI -n -t int -s 144 | ||
| + | q -c xsettings -p / | ||
| + | # Tableaux | ||
| + | for p in $(q -c xfce4-panel -l | grep -oE ' | ||
| + | q -c xfce4-panel -p " | ||
| + | q -c xfce4-panel -p " | ||
| + | done | ||
| + | q -c xfce4-desktop -p / | ||
| + | # Jamais de mise en veille ni de verrouillage | ||
| + | pm=/ | ||
| + | q -c xfce4-power-manager -p $pm/ | ||
| + | q -c xfce4-power-manager -p $pm/ | ||
| + | q -c xfce4-power-manager -p $pm/ | ||
| + | q -c xfce4-power-manager -p $pm/ | ||
| + | xset s off -dpms 2>/ | ||
| + | # Fond d' | ||
| + | if [ -f " | ||
| + | for out in $(xrandr | ||
| + | b=/ | ||
| + | q -c xfce4-desktop -p $b/ | ||
| + | q -c xfce4-desktop -p $b/ | ||
| + | done | ||
| + | fi | ||
| + | EOF | ||
| + | ecrire / | ||
| + | [Desktop Entry] | ||
| + | Type=Application | ||
| + | Name=Reglages tablette | ||
| + | Exec=/usr/local/ | ||
| + | X-GNOME-Autostart-enabled=true | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | ecrire / | ||
| + | # | ||
| + | # Orientation physique (iio-sensor-proxy) -> rotation xrandr + matrice du tactile Goodix | ||
| + | touch=" | ||
| + | last= | ||
| + | apply() { | ||
| + | case " | ||
| + | # Correspondance validee sur la tablette (capteur monte tete-beche) | ||
| + | | ||
| + | | ||
| + | right-up) | ||
| + | bottom-up) rot=normal; | ||
| + | *) return ;; | ||
| + | esac | ||
| + | # HDMI branche (PiKVM) | ||
| + | # recopiant sur l'HDMI a donne ecran noir et gels sur cette puce. | ||
| + | if xrandr | grep -q ' | ||
| + | [ " | ||
| + | last=$rot | ||
| + | xrandr --output DSI-1 --rotate " | ||
| + | for id in $(xinput list | grep -F " | ||
| + | xinput set-prop " | ||
| + | done | ||
| + | } | ||
| + | sleep 8 # apres les reglages de session | ||
| + | monitor-sensor | while read -r line; do | ||
| + | case " | ||
| + | *" | ||
| + | apply " | ||
| + | esac | ||
| + | done | ||
| + | EOF | ||
| + | ecrire | ||
| + | [Desktop Entry] | ||
| + | Type=Application | ||
| + | Name=Rotation automatique | ||
| + | Exec=/ | ||
| + | X-GNOME-Autostart-enabled=true | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape "Theme aux couleurs | ||
| + | # 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 / | ||
| + | for l in " | ||
| + | [ -L " | ||
| + | c=$(readlink " | ||
| + | case " | ||
| + | done | ||
| + | done | ||
| + | gtk-update-icon-cache -qf / | ||
| + | # Brun fonce du fond d' | ||
| + | install -d -o " | ||
| + | ecrire " | ||
| + | /* Couleurs Le Pain d' | ||
| + | @define-color theme_selected_bg_color #9a6a45; | ||
| + | @define-color theme_selected_fg_color #ffffff; | ||
| + | *:selected, selection, menuitem: | ||
| + | background-color: | ||
| + | progressbar progress, scale highlight { background-color: | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | EOF | ||
| + | chown " | ||
| + | ecrire / | ||
| + | # | ||
| + | # Theme neutre + accents bruns ; retrait des icones MX par defaut du bureau | ||
| + | sleep 6 | ||
| + | xfconf-query -c xsettings -p / | ||
| + | xfconf-query -c xsettings -p / | ||
| + | xfconf-query -c xfce4-panel -p / | ||
| + | desk=$(xdg-user-dir DESKTOP 2>/dev/null || echo " | ||
| + | rm -f " | ||
| + | EOF | ||
| + | ecrire / | ||
| + | [Desktop Entry] | ||
| + | Type=Application | ||
| + | Name=Theme tablette | ||
| + | Exec=/ | ||
| + | X-GNOME-Autostart-enabled=true | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | apt-get install -y -q zram-tools i965-va-driver python3-pil | ||
| + | # Memoire compressee | ||
| + | ecrire / | ||
| + | ALGO=zstd | ||
| + | PERCENT=50 | ||
| + | PRIORITY=100 | ||
| + | EOF | ||
| + | systemctl unmask zramswap >/ | ||
| + | ecrire / | ||
| + | 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; | ||
| + | # Pas de verification des mises a jour MX en arriere-plan (mises a jour faites a la main) | ||
| + | for f in / | ||
| + | if grep -qiE 'apt-notifier|mx-updater' | ||
| + | a=$(basename " | ||
| + | printf ' | ||
| + | chown "$UTIL:" " | ||
| + | fi | ||
| + | done | ||
| + | # eMMC : pas d' | ||
| + | if ! awk ' | ||
| + | cp /etc/fstab / | ||
| + | awk ' | ||
| + | fi | ||
| + | systemctl enable fstrim.timer >/ | ||
| + | ecrire / | ||
| + | [Journal] | ||
| + | SystemMaxUse=64M | ||
| + | EOF | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape "Image du menu de demarrage (GRUB)" | ||
| + | # GRUB s' | ||
| + | # (logo centre sur le brun du fond d'ecran) puis tournee d'un quart de tour. | ||
| + | if [ -f "$ICI/bootloader.png" ]; then | ||
| + | | ||
| + | import sys | ||
| + | from PIL import Image | ||
| + | src = Image.open(sys.argv[1]).convert(" | ||
| + | fond = Image.new(" | ||
| + | boite = (1920, 1200) if src.width >= 1600 else (1150, 720) | ||
| + | src.thumbnail(boite) | ||
| + | fond.alpha_composite(src, | ||
| + | fond.convert(" | ||
| + | PY | ||
| + | sed -i -e '/ | ||
| + | echo ' | ||
| + | update-grub | ||
| + | fi | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | if ! command -v rustdesk >/ | ||
| + | url=$(curl -fsSL https://api.github.com/ | ||
| + | | grep -oE '" | ||
| + | t=$(mktemp --suffix=.deb); | ||
| + | apt-get install -y -q " | ||
| + | fi | ||
| + | install -d -m700 /etc/ | ||
| + | [ -f " | ||
| + | |||
| + | ecrire / | ||
| + | # | ||
| + | # tablette-rustdesk config | ||
| + | # tablette-rustdesk motdepasse | ||
| + | # tablette-rustdesk enregistrer N : inscription dans le carnet $RD_CARNET sous le nom N | ||
| + | set -u | ||
| + | SERVEUR=$RD_SERVEUR; | ||
| + | EOF | ||
| + | cat >>/ | ||
| + | toml() { cat <<T | ||
| + | rendezvous_server = ' | ||
| + | nat_type = 1 | ||
| + | serial = 0 | ||
| + | |||
| + | [options] | ||
| + | custom-rendezvous-server = ' | ||
| + | relay-server = ' | ||
| + | key = ' | ||
| + | api-server = ' | ||
| + | T | ||
| + | } | ||
| + | attendre_service() { # la commande --password passe par l'IPC du service | ||
| + | for i in $(seq 1 30); do | ||
| + | out=$(rustdesk --password | ||
| + | | ||
| + | done; return 1 | ||
| + | } | ||
| + | case "${1:-}" | ||
| + | config) | ||
| + | | ||
| + | h=$(getent passwd | ||
| + | | ||
| + | install -d -m700 "$d"; toml > " | ||
| + | done | ||
| + | chown -R " | ||
| + | systemctl enable --now rustdesk ;; | ||
| + | motdepasse) | ||
| + | [ -s / | ||
| + | attendre_service "$(cat / | ||
| + | enregistrer) | ||
| + | nom=${2:?nom} | ||
| + | [ -s / | ||
| + | sleep 10 # laisser le service s' | ||
| + | | ||
| + | | ||
| + | echo " | ||
| + | echo "ID RustDesk | ||
| + | *) echo "usage : $0 config|motdepasse|enregistrer NOM"; exit 2 ;; | ||
| + | esac | ||
| + | EOF | ||
| + | chmod 755 /usr/local/sbin/ | ||
| + | tablette-rustdesk config | ||
| + | tablette-rustdesk motdepasse || echo " | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | # 1) tablette-preparer-clonage : a lancer sur la tablette modele juste avant l' | ||
| + | ecrire / | ||
| + | # | ||
| + | # Efface l' | ||
| + | # un nom est demande a l' | ||
| + | set -e | ||
| + | [ "$(id -u)" = 0 ] || exec sudo " | ||
| + | [ -s / | ||
| + | read -r -p " | ||
| + | systemctl stop rustdesk || true | ||
| + | rm -f /root/.config/rustdesk/ | ||
| + | rm -f / | ||
| + | rm -f / | ||
| + | truncate -s0 / | ||
| + | install -d /etc/ | ||
| + | journalctl --rotate >/ | ||
| + | echo "Prete pour l' | ||
| + | EOF | ||
| + | |||
| + | # 2) Au demarrage (root) : nouvelle identite, puis attente du nom saisi dans la session | ||
| + | ecrire / | ||
| + | # | ||
| + | set -u | ||
| + | [ -s / | ||
| + | ls / | ||
| + | install -d -m 770 -o root -g tablette / | ||
| + | EOF | ||
| + | ecrire / | ||
| + | [Unit] | ||
| + | Description=Tablette | ||
| + | ConditionPathExists=/ | ||
| + | Before=display-manager.service ssh.service | ||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=/ | ||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | EOF | ||
| + | |||
| + | # 3) Dans la session : demande du nom (clavier visuel affiche) | ||
| + | ecrire | ||
| + | #!/bin/bash | ||
| + | [ -e / | ||
| + | sleep 12; pgrep -x onboard >/dev/null || (setxkbmap be; onboard &) | ||
| + | while :; do | ||
| + | nom=$(yad --entry --center --on-top --title " | ||
| + | --text "< | ||
| + | --button=" | ||
| + | nom=$(echo " | ||
| + | if [[ " | ||
| + | yad --error --center --text "Nom invalide : $nom" --button=OK: | ||
| + | done | ||
| + | echo " | ||
| + | yad --info --center --no-buttons --timeout 120 --text "< | ||
| + | EOF | ||
| + | ecrire / | ||
| + | [Desktop Entry] | ||
| + | Type=Application | ||
| + | Name=Nom de la tablette | ||
| + | Exec=/ | ||
| + | X-GNOME-Autostart-enabled=true | ||
| + | EOF | ||
| + | |||
| + | # 4) Des que le nom est depose (root) | ||
| + | ecrire / | ||
| + | # | ||
| + | set -u | ||
| + | nom=$(head -c 63 / | ||
| + | [ -n " | ||
| + | hostnamectl set-hostname " | ||
| + | sed -i "/ | ||
| + | systemctl restart rustdesk; sleep 5 | ||
| + | tablette-rustdesk motdepasse | ||
| + | if tablette-rustdesk enregistrer " | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | fi | ||
| + | rm -f / | ||
| + | sleep 3; systemctl | ||
| + | EOF | ||
| + | ecrire /etc/systemd/ | ||
| + | [Unit] | ||
| + | Description=Tablette : nom saisi au premier demarrage | ||
| + | ConditionPathExists=/ | ||
| + | [Path] | ||
| + | PathExists=/ | ||
| + | [Install] | ||
| + | WantedBy=multi-user.target | ||
| + | EOF | ||
| + | ecrire / | ||
| + | [Unit] | ||
| + | Description=Tablette : nom, RustDesk, redemarrage | ||
| + | [Service] | ||
| + | Type=oneshot | ||
| + | ExecStart=/ | ||
| + | EOF | ||
| + | systemctl daemon-reload | ||
| + | systemctl enable tablette-premier-demarrage.service tablette-nommer.path | ||
| + | |||
| + | # ----------------------------------------------------------------------------- | ||
| + | etape " | ||
| + | tablette-rustdesk enregistrer " | ||
| + | |||
| + | etape " | ||
| + | echo "ID RustDesk : $(rustdesk --get-id 2>/ | ||
| + | echo "Mot de passe permanent : sudo cat / | ||
| + | echo " | ||
| + | </ | ||
linux/athesi.1791028375.txt.gz · Dernière modification : de root
