Des scripts pour faciliter le reconditionnement de portables - retour accueil
git clone git://bebou.netlib.re/scripts-reco
Log | Files | Refs | README |
commit 677cb32cbce5311e9a3301534eeb1bd1e71c22f9 parent fa2998fc806fbaa07984d4149e9cea358a71e6d2 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 12 Mar 2025 17:48:07 +0100 Vraie première version A partir de maintenant je fais des commit qui ont du sens. On a : * Modularisé les tests dans des scripts à part * Permis de reprendre un protocole là où on en était si gros crash ou gros ctrl+c * Un peu mieux documenté * Testé le bluetooth Bugs connus : * On peut pas aplay sous sudo * L'état de la batterie ne peut pas toujours être vérifié en fonction des drivers ? Mieux se documenter. Améliorations à envisager : * A la fin d'un protocole pouvoir revenir sur n'importe qu'elle étape * Capturer la webcam autrement qu'avec ffmpeg et en pleine résolution * Réfléchir à un système pour le clavier * Remettre les tests usb * Sûrement pleins d'autres trucs Diffstat:
A | .gitignore | | | 1 | + |
M | README | | | 32 | ++++++++++++++++++++++++++++++-- |
M | common.sh | | | 56 | ++++++++++++++++++++++++++++++++++++++++++-------------- |
A | omen.sh | | | 10 | ++++++++++ |
A | tests/audio | | | 10 | ++++++++++ |
R | blue.png -> tests/blue.png | | | 0 | |
A | tests/bluetooth | | | 3 | +++ |
A | tests/clavier | | | 11 | +++++++++++ |
A | tests/ecran | | | 6 | ++++++ |
R | green.png -> tests/green.png | | | 0 | |
A | tests/rapport | | | 21 | +++++++++++++++++++++ |
R | red.png -> tests/red.png | | | 0 | |
A | tests/webcam | | | 2 | ++ |
A | tests/wifi | | | 8 | ++++++++ |
14 files changed, 144 insertions(+), 16 deletions(-)
diff --git a/.gitignore b/.gitignore @@ -0,0 +1 @@ +.*.sw? diff --git a/README b/README @@ -1,3 +1,31 @@ -Dépendances +# Scripts reconditionnement -feh +Un ensemble de scripts facilitant l'évaluation de l'état d'un ordinateur. Ecrit +initiallement pour les besoins de [Commown](https://commown.coop). Inspiré du +travail de Louis, adapté en scripts shell plus simples et plus portables. + +## Usage + +Lancer une suite de tests en tant que root : + + $ sudo ./omen.sh + +## Dépendances + + * feh + * dmidecode + * ffmpeg + * awk, grep, sed, sort + * shell + * mktemp -d + * aplay/arecord + * iw + +Sous debian ces dépendances peuvent-être installées en faisant : + + $ sudo apt install feh dmidecode ffmpeg alsa-utils iw + +A noter que `ffmpeg` est un paquet très lourd. Il pourrait être intéressant de +le remplacer. + +## Ecrire un script diff --git a/common.sh b/common.sh @@ -1,20 +1,48 @@ #! /bin/sh -feh --full-screen \ - --zoom fill \ - --on-last-slide quit \ - red.png blue.png green.png +set -e -ffmpeg -hide_banner -f v4l2 \ - -input_format mjpeg \ - -i /dev/video0 \ - -map 0:v \ - -vf "format=yuv420p" \ - -f xv display +[ $(whoami) != "root" ] && { printf "Lancer le script en root (sudo)\n"; exit 1; } -arecord -f cd -d 5 audio.test -aplay audio.test -rm audio.test +[ "$2" ] && id="$2" || id="$(mktemp -d /tmp/reco.XXX | cut -d'.' -f2)" +tmpdir="/tmp/reco.$id" +chmod -R 744 "$tmpdir" +printf "Identifiant du test : %s\n" "$id" +trap "printf '$id' | xclip -selection clipboard" EXIT QUIT INT -watch -n0.2 -d lsusb +red="\033[91m";green="\033[92m" +blue="\033[94m";norm="\033[0m" +up_one_line="\033[1F";del_line="\033[0K" +_ask() { + c="" + while [ "$c" != "o" ] && [ "$c" != "n" ];do + [ "$c" != "" ] && printf "$up_one_line$del_line" + printf "$blue$@ (o/n) : $norm" >&2; read c + done + [ "$c" = "o" ] && c=ok || c=NOK +} + +inform() { printf "$blue$@ (entrée pour commencer)$norm" >&2;read p; } + +launch_test() { + test_name="$1" + < "$tmpdir/histo" grep -q "^$1 pass" && return + . "tests/$test_name" | tee "$tmpdir/$test_name" + _ask "$test_name ok" + <<-. tee -a $tmpdir/$test_name + $test_name : $c + ------- + . + < "$tmpdir/histo" sed "/^$test_name/ s/$/ pass/" > "$tmpdir/tmp" + mv "$tmpdir/tmp" "$tmpdir/histo" +} + +end() { + [ -f "$tmpdir/histo" ] && < "$tmpdir/histo" awk -v tmp=$tmpdir '{ printf "%s/%s\n",tmp,$1 }' | + xargs cat +} + +# On lance le test +[ ! -f "$tmpdir/histo" ] && < "$1" awk '/launch_test/ { print $2 }' > "$tmpdir/histo" +. "$1" diff --git a/omen.sh b/omen.sh @@ -0,0 +1,10 @@ +#! /usr/bin/env ./common.sh + +launch_test rapport +launch_test ecran +launch_test audio +launch_test webcam +launch_test wifi +launch_test bluetooth + +end diff --git a/tests/audio b/tests/audio @@ -0,0 +1,10 @@ +# Son +# Micro +inform "Vous avez 3 secondes pour faire du bruit" +arecord -vv -f cd -d 5 $tmpdir/audio.test +# Haut-parleurs +inform "Ecoutez sur haut-parleurs" +aplay -vv audio.test +# Ecouteurs +inform "Ecoutez sur écouteurs" +aplay -vv audio.test diff --git a/blue.png b/tests/blue.png Binary files differ. diff --git a/tests/bluetooth b/tests/bluetooth @@ -0,0 +1,3 @@ +# Bluetooth +bluetoothctl --timeout 5 scan on + diff --git a/tests/clavier b/tests/clavier @@ -0,0 +1,11 @@ +#checkkeys() { +# xargs -n2 sh -c ' +# echo "test de $2" +# xev | grep -E --line-buffered "^ *state 0x11?0" > a +# num_events=$(< a grep -cE "keycode $1") +# [ "$num_events" -gt 1 ] && echo "$2 ok" || echo "$2 not ok" +# ' -- +#} +## Clavier et pad +#keys=$(sudo dumpkeys | awk '/^keycode/ {print $2,$4}') +#echo "$keys" | checkkeys diff --git a/tests/ecran b/tests/ecran @@ -0,0 +1,6 @@ +# Ecran +inform "Passez les couleurs avec les flèches" +feh --full-screen \ + --zoom fill \ + --on-last-slide quit \ + tests/red.png tests/blue.png tests/green.png diff --git a/green.png b/tests/green.png Binary files differ. diff --git a/tests/rapport b/tests/rapport @@ -0,0 +1,21 @@ +# Modèle +printf "Modèle : %s\n" "$(cat /sys/devices/virtual/dmi/id/product_name)" +printf "Num série : %s\n" "$(cat /sys/devices/virtual/dmi/id/product_serial)" + +# CPU +cat /proc/cpuinfo | grep "^model name" | sort -u | sed 's/^[^:]*:/CPU :/' + +# RAM +dmidecode -t memory | awk -F':' ' + /^ Size:/ { printf "RAM : %s",$2 } + /^ (Type:|Manufacturer:)/ { printf $2 } + /^ Configured Memory Speed:/ { print $2 }' + +# Batterie +. "/sys/class/power_supply/BAT0/uevent" +<<. cat +Batterie : Design capacity ${POWER_SUPPLY_CHARGE_FULL_DESIGN%???} mAh +Batterie : Charge courante ${POWER_SUPPLY_CHARGE_NOW%???} mAh, $POWER_SUPPLY_CAPACITY% +Batterie : Status $POWER_SUPPLY_STATUS +Batterie : Manufacturer $POWER_SUPPLY_MANUFACTURER +. diff --git a/red.png b/tests/red.png Binary files differ. diff --git a/tests/webcam b/tests/webcam @@ -0,0 +1,2 @@ +# Webcam +ffplay /dev/video0 diff --git a/tests/wifi b/tests/wifi @@ -0,0 +1,8 @@ +# WIFI +inform "On affiche les 5 réseaux wifi que l'on capte le mieux" +sudo iw wlo1 scan | + awk '/signal:|SSID:/ {print $2}' | + paste - - | + sort -rn | + head -n5 +