¿Hay alguna forma confiable de determinar (mediante programación) desde un script bash si se ejecuta en una computadora portátil o de escritorio?
Obviamente, podría pedirle al usuario que les pregunte, pero eso es bastante torpe.
linux
shell-script
PseudoPsique
fuente
fuente
Respuestas:
Observar si el sistema tiene o no una batería no es confiable: un UPS conectado al sistema (no solo por alimentación, sino también por USB para apagado automático y monitoreo de batería) puede aparecer como una batería.
Sin embargo, hay una buena manera confiable:
En una computadora portátil, esto devolverá uno de "Laptop", "Notebook", "Portable" o "Sub Notebook" (según lo que el fabricante haya codificado en el BIOS). Hay una lista completa de posibles valores en " Identificación del tipo de chasis de una computadora " en la Guía de secuencias de comandos de Windows 2000; no se preocupe por ser una página de Microsoft TechNet, esto no es específico del sistema operativo.
dmidecode también puede obtener información sobre el fabricante del hardware, el número de serie del sistema (a veces), etc.
fuente
/sys/module/battery
?Other
..bashrc
archivos. Consultar el contenido de/sys/class/dmi/id/chassis_type
, que es solo un número, es mucho mejor (como señaló otra respuesta a continuación).Solución Debian:
Para saber si una máquina que ejecuta Debian es una computadora portátil, intente:
Este enfoque no requiere
root
privilegios.Sin embargo, en otras distribuciones, este directorio parece existir, al menos en forma de esqueleto, independientemente de si hay o no una batería. De los comentarios (a continuación), estas distribuciones incluyen CentOS, Ubuntu y la distribución de Linux Mint derivada de Ubuntu.
Solución más general
Aunque no funciona en mis sistemas Debian, la solución propuesta por Alex funciona en Ubuntu y CentOS. Por lo tanto, sugiere, para una mayor generalidad, una posible solución combinada:
Este enfoque no requiere
root
privilegios.Más detalles
En un sistema Debian con una batería real, el
/sys/module/battery
directorio contiene muchos archivos. Uno de esos archivos es el/sys/module/battery/initstate
que contiene el textolive
. Sin embargo, en Ubuntu, estos archivos no existen incluso en las computadoras portátiles reales. Por lo tanto, parece que la presencia del archivo/sys/module/battery/initstate
se puede utilizar para probar una computadora portátil con Debian.En los sistemas Debian que probé, por el contrario, el
/proc/acpi/battery
directorio no existía.fuente
Verificaría si la computadora tiene una batería instalada. Y la siguiente es una forma de probar:
fuente
BAT0
toBAT*
: debería detectar todas las variaciones.Para evitar usar sudo, puede leer el contenido de
/sys/class/dmi/id/chassis_type
. Parece cumplir con la siguiente tabla:fuente
Si verificar la existencia de la batería es lo suficientemente bueno, puede usar esta función de shell:
He estado usando esto en Debian durante años. Tenga en cuenta que esto también funciona para Debian ejecutándose en WSL o virtualbox.
Editar: generalizado de otras respuestas en este hilo para capturar más casos.
fuente