GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Programmgesteuert bestimmen, ob ein Skript auf einem Laptop oder Desktop ausgeführt wird?

Es ist nicht zuverlässig, zu prüfen, ob das System über eine Batterie verfügt oder nicht - eine an das System angeschlossene USV (nicht nur für die Stromversorgung, sondern auch über USB zum automatischen Herunterfahren und zur Batterieüberwachung) kann als Batterie angezeigt werden.

Es gibt jedoch einen netten zuverlässigen Weg:

dmidecode --string chassis-type

Auf einem Laptop gibt dies entweder „Laptop“, „Notebook“, „Portable“ oder „Sub Notebook“ zurück (je nachdem, was der Hersteller im BIOS codiert hat). Eine vollständige Liste möglicher Werte finden Sie unter "Identifying the Chassis Type of a Computer" im Windows 2000 Scripting Guide - machen Sie sich keine Sorgen, dass es sich um eine Microsoft TechNet-Seite handelt, dies ist nicht betriebssystemspezifisch.

dmidecode kann auch Informationen über den Hardwarehersteller, die Seriennummer des Systems (manchmal) usw. erhalten.


Um die Verwendung von sudo zu vermeiden, können Sie den Inhalt von /sys/class/dmi/id/chassis_type lesen . Es scheint der folgenden Tabelle zu entsprechen:

  • 1 Sonstiges
  • 2 Unbekannt
  • 3 Desktop
  • 4 Low-Profile-Desktop
  • 5 Pizzaschachteln
  • 6 Mini-Tower
  • 7 Turm
  • 8 Tragbar
  • 9 Laptop
  • 10 Notizbuch
  • 11 Handheld
  • 12 Dockingstation
  • 13 Alles in Einem
  • 14 Sub-Notizbuch
  • 15 Platzsparend
  • 16 Brotdose
  • 17 Hauptsystemgehäuse
  • 18 Erweiterungsgehäuse
  • 19 Subchassis
  • 20-Bus-Erweiterungsgehäuse
  • 21 Peripheriegehäuse
  • 22 Speichergehäuse
  • 23 Gehäuse für Rackmontage
  • 24 Sealed-Case-PC

Debian-Lösung:

Um herauszufinden, ob eine Maschine, auf der Debian läuft, ein Laptop ist, versuchen Sie:

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

Dieser Ansatz erfordert nicht root Privilegien.

Auf anderen Distributionen scheint dieses Verzeichnis jedoch zumindest in Skelettform vorhanden zu sein, unabhängig davon, ob eine Batterie vorhanden ist oder nicht. Aus den Kommentaren (unten) geht hervor, dass diese Distributionen CentOS, Ubuntu und die von Ubuntu abgeleitete Distribution von Linux Mint enthalten.

Allgemeinere Lösung

Obwohl es auf meinen Debian-Systemen nicht funktioniert, funktioniert die von Alex vorgeschlagene Lösung Berichten zufolge auf Ubuntu und CentOS. Daher schlägt für eine größere Allgemeinheit eine mögliche kombinierte Lösung vor:

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

Für diesen Ansatz ist root nicht erforderlich Privilegien.

Mehr Details

Auf einem Debian-System mit einer echten Batterie ist die /sys/module/battery Verzeichnis enthält viele Dateien. Eine solche Datei ist /sys/module/battery/initstate die den Text live enthält . Unter Ubuntu existieren diese Dateien jedoch nicht einmal auf tatsächlichen Laptops. Somit scheint das Vorhandensein der Datei /sys/module/battery/initstate kann verwendet werden, um einen Laptop zu testen, auf dem Debian läuft.

Auf von mir getesteten Debian-Systemen dagegen der /proc/acpi/battery Verzeichnis existierte nicht.


Linux
  1. Shell im Script zur Laufzeit ermitteln?

  2. Tail -f, feststellen, ob in eine Datei nicht mehr geschrieben wird?

  3. Init.d-Skript wird beim Booten nicht ausgeführt?

  4. Shell-Skript:Bedingung „wenn Datei nicht verwendet wird“?

  5. Wie führe ich ein Sh-Skript von einer Desktop-Verknüpfung aus?

Top 10 Linux-Distributionen für Laptop und Desktop

Ubuntu-Tipps:So ändern Sie Datum und Uhrzeit auf Laptop oder Desktop

Top 15+ der besten Skripterstellungssoftware für Linux-Desktop

Trace von ausgeführten Programmen, die von einem Bash-Skript aufgerufen werden

Shell zur Laufzeit im Skript ermitteln

Ubuntu / Unity-Skript zum Anhängen an Launcher