GNU/Linux >> Znalost Linux >  >> Linux

Programově určit, zda se skript spouští na notebooku nebo stolním počítači?

Pohled na to, zda má systém baterii nebo ne, není spolehlivý – UPS připojená k systému (nejen pro napájení, ale také přes USB pro automatické vypínání a monitorování baterie) se může zobrazit jako baterie.

Existuje však pěkný spolehlivý způsob:

dmidecode --string chassis-type

Na notebooku to vrátí jednu z možností „Laptop“, „Notebook“, „Portable“ nebo „Sub Notebook“ (podle toho, co výrobce zakódoval do BIOSu). Úplný seznam možných hodnot je uveden v části "Identification the Chassis Type of a Computer" v příručce Windows 2000 Scripting Guide - nebojte se, že se jedná o stránku Microsoft TechNet, toto není specifické pro OS.

dmidecode může také získat informace o výrobci hardwaru, sériovém čísle systému (někdy) atd.


Chcete-li se vyhnout použití sudo, můžete si přečíst obsah /sys/class/dmi/id/chassis_type . Zdá se, že odpovídá následující tabulce:

  • 1 další
  • 2 Neznámé
  • 3 Desktop
  • 4 Nízkoprofilová plocha
  • 5 krabic od pizzy
  • 6 Mini Tower
  • 7 věž
  • 8 přenosných
  • 9 Notebook
  • 10 Notebook
  • 11 ruční
  • 12 Dokovací stanice
  • 13 vše v jednom
  • 14 Sub Notebook
  • 15 Úspora místa
  • 16 obědový box
  • 17 šasi hlavního systému
  • 18 Rozšiřovací podvozek
  • 19 SubChassis
  • 20 Bus Expansion Chassis
  • 21 Periferní podvozek
  • 22 úložný podvozek
  • 23 Rack Mount Chassis
  • 24 PC s uzavřeným pouzdrem

Řešení Debianu:

Chcete-li zjistit, zda je počítač s Debianem notebook, zkuste:

[ -d /sys/module/battery ] && echo "Yes it's a laptop"

Tento přístup nevyžaduje root privilegia.

Na jiných distribucích se však zdá, že tento adresář existuje, alespoň ve formě kostry, bez ohledu na to, zda je nebo není baterie. Z komentářů (níže) tyto distribuce zahrnují CentOS, Ubuntu a distribuci Linux Mint odvozenou z Ubuntu.

Obecnější řešení

Ačkoli to nefunguje na mých systémech Debian, řešení navržené Alexem údajně funguje na Ubuntu a CentOS. Pro větší obecnost tedy navrhuje možné kombinované řešení:

[ -f /sys/module/battery/initstate ] || [ -d /proc/acpi/battery/BAT0 ] && echo "Yes it's a laptop"

Tento přístup nevyžaduje root privilegia.

Další podrobnosti

Na systému Debian se skutečnou baterií /sys/module/battery adresář obsahuje mnoho souborů. Jedním takovým souborem je /sys/module/battery/initstate který obsahuje text live . Na Ubuntu však tyto soubory neexistují ani na skutečných noteboocích. Zdá se tedy, že přítomnost souboru /sys/module/battery/initstate lze použít k testování notebooku s Debianem.

Na systémech Debian, které jsem testoval, je naopak /proc/acpi/battery adresář neexistoval.


Linux
  1. Tail -f, určit, zda se do souboru již nezapisuje?

  2. Skript pro zjištění, zda jsou soubory obrázky?

  3. Jak spustit skript Sh ze zástupce na ploše?

  1. Je bezpečné otevřít soubor, který je zapsán spuštěným skriptem?

  2. Co dělá tento skript sh, pokud je spuštěn?

  3. Zjistit, zda je souborový systém nebo oddíl připojen RO nebo RW pomocí skriptu Bash?

  1. Určit prostředí ve skriptu za běhu?

  2. Bash Echo Příkazový řádek spuštěn na samotném příkazovém řádku (ne ve skriptu)?

  3. Skript Init.d není spuštěn při spouštění?