Existe-t-il un moyen fiable de déterminer (par programme) à partir d'un script bash s'il est exécuté sur un ordinateur portable ou un ordinateur de bureau?
Je pourrais évidemment inviter simplement l'utilisateur à leur demander, mais c'est assez maladroit.
linux
shell-script
PseudoPsyche
la source
la source
Réponses:
Il n'est pas fiable de savoir si le système est équipé d'une batterie ou non - un onduleur connecté au système (non seulement pour l'alimentation, mais également via USB pour l'arrêt automatique et la surveillance de la batterie) peut apparaître comme une batterie.
Il existe cependant un bon moyen fiable:
Sur un ordinateur portable, cela renverra l'un des "Laptop", "Notebook" "Portable" ou "Sub Notebook" (selon ce que le fabricant a codé dans le BIOS). Il existe une liste complète des valeurs possibles dans « Identification du type de châssis d'un ordinateur » dans le Guide de script de Windows 2000 - ne vous inquiétez pas qu'il s'agisse d'une page Microsoft TechNet, ce n'est pas spécifique au système d'exploitation.
dmidecode peut également obtenir des informations sur le fabricant du matériel, le numéro de série du système (parfois), etc.
la source
/sys/module/battery
?Other
..bashrc
fichiers. Interroger le contenu de/sys/class/dmi/id/chassis_type
, qui n'est qu'un seul chiffre, est beaucoup mieux (comme l'a souligné une autre réponse ci-dessous).Solution Debian:
Pour savoir si une machine exécutant Debian est un ordinateur portable, essayez:
Cette approche ne nécessite pas de
root
privilèges.Sur d'autres distributions, cependant, ce répertoire semble exister, au moins sous forme de squelette, qu'il y ait ou non une batterie. D'après les commentaires (ci-dessous), ces distributions incluent CentOS, Ubuntu et la distribution dérivée d'Ubuntu de Linux Mint.
Solution plus générale
Bien qu'elle ne fonctionne pas sur mes systèmes Debian, la solution proposée par Alex fonctionnerait sur Ubuntu & CentOS. Suggère donc, pour une plus grande généralité, une solution combinée possible:
Cette approche ne nécessite pas de
root
privilèges.Plus de détails
Sur un système Debian avec une batterie réelle, le
/sys/module/battery
répertoire contient de nombreux fichiers. Un de ces fichiers/sys/module/battery/initstate
contient le textelive
. Sur Ubuntu, cependant, ces fichiers n'existent même pas sur les ordinateurs portables réels. Ainsi, il apparaît que la présence du fichier/sys/module/battery/initstate
peut être utilisée pour tester un ordinateur portable exécutant Debian.Sur les systèmes Debian que j'ai testés, en revanche, le
/proc/acpi/battery
répertoire n'existait pas.la source
Je vérifierais si l'ordinateur a une batterie installée. Et ce qui suit est une façon de tester:
la source
BAT0
pourBAT*
- il devrait détecter toutes les variations.Pour éviter d'utiliser sudo, vous pouvez lire le contenu de
/sys/class/dmi/id/chassis_type
. Il semble conforme au tableau suivant:la source
Si la vérification de l'existence de la batterie est suffisante, vous pouvez utiliser cette fonction shell:
Je l'utilise sur Debian depuis des années. Notez que cela fonctionne également pour Debian fonctionnant dans WSL ou virtualbox.
Edit: généralisé à partir d'autres réponses dans ce fil pour attraper plus de cas.
la source