#!/usr/bin/env bash # Installa la regola udev che da' un nome stabile alla scheda Adalight (/dev/ambilight). # Richiede sudo. Verifica il percorso USB della scheda e lo sostituisce se necessario. set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" RULE="$HERE/udev/99-ambilight.rules" DEST="/etc/udev/rules.d/99-ambilight.rules" DEV="${1:-/dev/ttyUSB0}" say() { printf '\033[1;32m==>\033[0m %s\n' "$*"; } die() { printf '\033[1;31m[x]\033[0m %s\n' "$*" >&2; exit 1; } # --- identifica la scheda e il suo percorso USB [ -e "$DEV" ] || die "dispositivo $DEV assente" VID=$(udevadm info -q property -n "$DEV" | sed -n 's/^ID_VENDOR_ID=//p') PID=$(udevadm info -q property -n "$DEV" | sed -n 's/^ID_MODEL_ID=//p') KER=$(udevadm info -q property -n "$DEV" | sed -n 's|^DEVPATH=.*usb[0-9]*/\([0-9-]*\)/.*|\1|p') SER=$(cat "/sys/bus/usb/devices/$KER/serial" 2>/dev/null || true) say "scheda su $DEV: USB $VID:$PID, porta fisica «$KER», iSerial='$SER'" [ -n "$KER" ] || die "non riesco a ricavare il percorso USB (KERNELS)" if [ "$VID:$PID" != "1a86:7523" ]; then printf '\033[1;33m[!]\033[0m ATTENZIONE: non e'"'"' un CH340 (1a86:7523). Adatto la regola comunque.\n' fi # --- prepara la regola con la porta reale TMP=$(mktemp) sed -e "s|KERNELS==\"1-2\"|KERNELS==\"$KER\"|" \ -e "s|ATTRS{idVendor}==\"1a86\"|ATTRS{idVendor}==\"$VID\"|" \ -e "s|ATTRS{idProduct}==\"7523\"|ATTRS{idProduct}==\"$PID\"|" \ "$RULE" > "$TMP" say "regola da installare:" sed 's/^/ /' "$TMP" # --- installa e ricarica sudo install -m 644 -o root -g root "$TMP" "$DEST" rm -f "$TMP" sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-match=tty sleep 1 # --- verifica if [ -L /dev/ambilight ]; then say "OK: /dev/ambilight -> $(readlink -f /dev/ambilight)" else die "/dev/ambilight non creato: controlla «udevadm test /sys/class/tty/$(basename "$DEV")»" fi cat <