- udev/99-ambilight.rules: symlink /dev/ambilight ancorato alla porta USB fisica (il CH340 clone non ha iSerial, quindi by-id non e' univoco), ID_MM_DEVICE_IGNORE, TAG+=uaccess - setup-udev.sh: rileva VID/PID/porta, installa la regola, verifica il symlink - backend: fallback di porta (config -> /dev/ambilight -> /dev/ttyUSB0) e campo 'dev' nello stato D-Bus - README: tabella dei percorsi, prove sull'indicatore di condivisione schermo e le tre alternative (portal, KWin ScreenShot2, kmsgrab)
62 lines
2.2 KiB
Bash
Executable File
62 lines
2.2 KiB
Bash
Executable File
#!/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 <<EOF
|
|
|
|
Ora rendi persistente il percorso nel demone:
|
|
|
|
ambilight-ctl set port /dev/ambilight
|
|
systemctl --user restart ambilight.service
|
|
ambilight-ctl state
|
|
|
|
Nota: se cambi porta USB alla scheda, il nome resta legato alla porta fisica:
|
|
aggiorna KERNELS nella regola oppure usa come alternativa il percorso
|
|
/dev/serial/by-path/... (vedi README).
|
|
EOF
|