From a7a92ffadf53588b956cd596f2b6d9d5fb237b21 Mon Sep 17 00:00:00 2001 From: jerem Date: Mon, 15 Jun 2026 12:46:11 +0200 Subject: [PATCH] Kobo: tuer Nickel + siphon env WiFi + reboot a l'arret (refresh fiable) --- kobo/monitorink.sh | 61 +++++++++++++++++++++++++++++++----------- kobo/monitorinkloop.sh | 11 +++++++- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/kobo/monitorink.sh b/kobo/monitorink.sh index 1ceb1c8..8816e35 100755 --- a/kobo/monitorink.sh +++ b/kobo/monitorink.sh @@ -1,29 +1,60 @@ #!/bin/sh # Monitorink — point d'entrée lancé par NickelMenu. +# +# Prend le contrôle complet de l'appareil en TUANT Nickel (sinon Nickel auto-suspend +# l'appareil et coupe le WiFi, en conflit avec notre boucle). On siphonne d'abord les +# variables d'environnement WiFi de Nickel (WIFI_MODULE/PLATFORM/INTERFACE) pour pouvoir +# gérer le WiFi nous-mêmes. À l'arrêt (entrée « Monitorink STOP »), on REBOOT pour +# restaurer Nickel et l'usage normal de la liseuse. export LC_ALL="en_US.UTF-8" -# PATH complet : l'environnement NickelMenu est minimal (curl/ip absents sinon). export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH" BASE="/mnt/onboard/.adds/Monitorink" -LOG="$BASE/monitorink.log" # sur la partition USB-visible (debug via USB) +LOG="$BASE/monitorink.log" cd "$BASE" || exit 1 -# --- Configuration (adapter au besoin) --- -# HTTP direct vers l'IP du homelab (busybox wget, pas de curl/DNS/TLS requis). +# --- Configuration --- export MONITORINK_URL="http://192.168.0.43:8899/image.png" -export MONITORINK_REFRESH=30 # DEV: refresh rapide pour itérer (repasser à 300-600 en prod) +export MONITORINK_REFRESH=30 # DEV: refresh rapide (repasser à 300-600 en prod) -echo "===== monitorink start $(date) =====" >> "$LOG" -sync +echo "===== monitorink start $(date) =====" >> "$LOG"; sync -# Gouverneur CPU économe (Libra 2 = policy0 ; fallback générique). -echo ondemand > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 2>/dev/null -for gov in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do - echo ondemand > "$gov" 2>/dev/null -done +# --- Gouverneur CPU économe --- +CPUFREQ="/sys/devices/system/cpu/cpufreq/policy0" +[ -d "$CPUFREQ" ] || CPUFREQ="/sys/devices/system/cpu/cpu0/cpufreq" +if grep -q ondemand "$CPUFREQ/scaling_available_governors" 2>/dev/null; then + echo ondemand > "$CPUFREQ/scaling_governor" 2>/dev/null +fi -# Synchronise l'horloge RTC sur l'heure système (sinon rtcwake calcule mal -> suspend KO). +# --- Prendre le contrôle : siphonner l'env Nickel (WiFi) puis tuer Nickel --- +if pkill -0 nickel 2>/dev/null; then + NICKEL_PID="$(pidof -s nickel)" + if [ -n "$NICKEL_PID" ]; then + NENV=$(tr '\0' '\n' < "/proc/$NICKEL_PID/environ" 2>/dev/null \ + | grep -E '^(WIFI_MODULE|INTERFACE|NICKEL_HOME|DBUS_SESSION_BUS_ADDRESS|LANG|PLATFORM|PRODUCT)=') + [ -n "$NENV" ] && export $NENV + fi + UDEV_PID="$(pidof -s udevd)" + if [ -n "$UDEV_PID" ]; then + [ -z "$PRODUCT" ] && { V=$(tr '\0' '\n' < "/proc/$UDEV_PID/environ" 2>/dev/null | grep -E '^PRODUCT='); [ -n "$V" ] && export $V; } + [ -z "$PLATFORM" ] && { V=$(tr '\0' '\n' < "/proc/$UDEV_PID/environ" 2>/dev/null | grep -E '^PLATFORM='); [ -n "$V" ] && export $V; } + fi + [ -z "$INTERFACE" ] && export INTERFACE="eth0" + echo "[monitorink] WIFI_MODULE=$WIFI_MODULE PLATFORM=$PLATFORM INTERFACE=$INTERFACE PRODUCT=$PRODUCT" >> "$LOG"; sync + + sync + killall -q -TERM nickel hindenburg sickel fickel fontickel adobehost foxitpdf iink dhcpcd-dbus dhcpcd 2>/dev/null + t=0; while pkill -0 nickel 2>/dev/null; do [ "$t" -ge 16 ] && break; usleep 250000; t=$((t + 1)); done + rm -f /tmp/nickel-hardware-status +fi +[ -z "$INTERFACE" ] && export INTERFACE="eth0" + +# Synchronise l'horloge RTC (sinon rtcwake calcule mal le réveil). hwclock -w -u 2>/dev/null -# Lance la boucle, tout est journalisé dans $LOG. -exec sh "$BASE/monitorinkloop.sh" >> "$LOG" 2>&1 +# Boucle bloquante. À la sortie (STOP tue monitorinkloop.sh), on reboot pour restaurer Nickel. +sh "$BASE/monitorinkloop.sh" >> "$LOG" 2>&1 + +echo "===== monitorink stop $(date) — reboot =====" >> "$LOG"; sync +sleep 1 +reboot diff --git a/kobo/monitorinkloop.sh b/kobo/monitorinkloop.sh index 7cf8b9e..ecf8e79 100755 --- a/kobo/monitorinkloop.sh +++ b/kobo/monitorinkloop.sh @@ -56,10 +56,19 @@ suspend_for() { echo 0 > /sys/power/state-extended 2>/dev/null } +has_ip() { ip addr show 2>/dev/null | grep -o 'inet [0-9.]*' | grep -qv '127.0'; } + wifi_up() { ./scripts/enable-wifi.sh >/dev/null 2>&1 ./scripts/force-wifi-connection.sh >/dev/null 2>&1 - ./scripts/obtain-ip.sh >/dev/null 2>&1 + # Attend l'association + bail DHCP (jusqu'à ~24 s). + i=0 + while [ "$i" -lt 12 ]; do + ./scripts/obtain-ip.sh >/dev/null 2>&1 + has_ip && return 0 + sleep 2; i=$((i + 1)) + done + return 1 } # MODE DEV : on garde le WiFi allumé (pas de disable, pas de suspend) -> fiable.