GNU/Linux >> Linux Esercitazione >  >> Linux

Determinare in modo programmatico se uno script viene eseguito su laptop o desktop?

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.


Linux
  1. Determinare la shell nello script durante il runtime?

  2. Bash Echo La riga di comando eseguita sulla riga di comando stessa (non in uno script)?

  3. Tail -f, Determina se un file non viene più scritto?

  4. Come determini se sei su un sistema Linux o BSD all'interno di uno script?

  5. Determinare se il file è in fase di scrittura?

Le 10 migliori distribuzioni Linux per laptop e desktop

Suggerimenti per Ubuntu:come modificare la data e l'ora su laptop o desktop

I 15 migliori software di scrittura di script per desktop Linux

Traccia dei programmi eseguiti richiamati da uno script Bash

Ubuntu / Unity collega lo script al Launcher

Determina se il filesystem o la partizione è montata RO o RW tramite Bash Script?