Controllare se il sistema ha o meno una batteria non è affidabile:un UPS collegato al sistema (non solo per l'alimentazione, ma anche tramite USB per lo spegnimento automatico e il monitoraggio della batteria) potrebbe apparire come una batteria.
C'è comunque un bel modo affidabile:
dmidecode --string chassis-type
Su un laptop, questo restituirà uno tra "Laptop", "Notebook" "Portable" o "Sub Notebook" (a seconda di ciò che il produttore ha codificato nel BIOS). C'è un elenco completo di possibili valori in "Identificazione del tipo di chassis di un computer" nella Guida agli script di Windows 2000:non preoccuparti se si tratta di una pagina Microsoft TechNet, non è specifica del sistema operativo.
dmidecode può anche ottenere informazioni sul produttore dell'hardware, il numero di serie del sistema (a volte), ecc.
Per evitare di usare sudo, puoi leggere il contenuto di /sys/class/dmi/id/chassis_type
. Sembra conforme alla seguente tabella:
- 1 altro
- 2 Sconosciuto
- 3 Desktop
- 4 Desktop a basso profilo
- Scatola da 5 pizze
- 6 Minitorre
- Torre 7
- 8 Portatile
- 9 Laptop
- 10 quaderni
- 11 Tenuto in mano
- 12 Docking Station
- 13 Tutto in uno
- 14 taccuini secondari
- 15 salvaspazio
- 16 contenitori per il pranzo
- 17 chassis del sistema principale
- 18 chassis di espansione
- 19 sottotelaio
- Chassis di espansione per autobus 20
- 21 telaio periferico
- 22 telai portaoggetti
- Chassis per montaggio su rack 23
- 24 PC in custodia sigillata
Soluzione Debian:
Per scoprire se una macchina che esegue Debian è un laptop, prova:
[ -d /sys/module/battery ] && echo "Yes it's a laptop"
Questo approccio non richiede root
privilegi.
Su altre distribuzioni, tuttavia, questa directory sembra esistere, almeno in forma scheletrica, indipendentemente dal fatto che ci sia o meno una batteria. Dai commenti (sotto), queste distribuzioni includono CentOS, Ubuntu e la distribuzione derivata da Ubuntu di Linux Mint.
Soluzione più generale
Sebbene non funzioni sui miei sistemi Debian, la soluzione proposta da Alex funziona su Ubuntu e CentOS. Suggerisce quindi, per maggiore generalità, una possibile soluzione combinata:
[ -f /sys/module/battery/initstate ] || [ -d /proc/acpi/battery/BAT0 ] && echo "Yes it's a laptop"
Questo approccio non richiede root
privilegi.
Ulteriori dettagli
Su un sistema Debian con una batteria reale, il /sys/module/battery
directory contiene molti file. Uno di questi file è /sys/module/battery/initstate
che contiene il testo live
. Su Ubuntu, tuttavia, questi file non esistono nemmeno sui laptop reali. Pertanto, sembra che la presenza del file /sys/module/battery/initstate
può essere usato per testare un laptop che esegue Debian.
Sui sistemi Debian che ho testato, invece, il /proc/acpi/battery
directory non esisteva.