GNU/Linux >> Tutoriales Linux >  >> Linux

¿Determinar programáticamente si un script se está ejecutando en una computadora portátil o de escritorio?

Ver si el sistema tiene o no una batería no es confiable:un UPS conectado al sistema (no solo para la alimentación, sino también a través de USB para el apagado automático y el monitoreo de la batería) puede aparecer como una batería.

Sin embargo, hay una manera agradable y confiable:

dmidecode --string chassis-type

En una computadora portátil, esto devolverá uno de "Laptop", "Notebook", "Portable" o "Sub Notebook" (dependiendo de lo que el fabricante codificó en el BIOS). Hay una lista completa de valores posibles en "Identificación del tipo de chasis de una computadora" en la Guía de secuencias de comandos de Windows 2000; no se preocupe si se trata de una página de Microsoft TechNet, no es específica 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.


Para evitar usar sudo, puede leer el contenido de /sys/class/dmi/id/chassis_type . Parece ajustarse a la siguiente tabla:

  • 1 Otro
  • 2 Desconocido
  • 3 Escritorio
  • 4 Escritorio de bajo perfil
  • Caja de 5 pizzas
  • 6 minitorres
  • Torre 7
  • 8 Portátil
  • 9 Ordenador portátil
  • Cuaderno 10
  • 11 de mano
  • 12 estación de acoplamiento
  • 13 todo en uno
  • 14 cuadernos secundarios
  • 15 ahorro de espacio
  • 16 fiambreras
  • 17 chasis del sistema principal
  • 18 chasis de expansión
  • 19 subchasis
  • Chasis de expansión de 20 autobuses
  • 21 Chasis periférico
  • 22 chasis de almacenamiento
  • 23 Chasis de montaje en bastidor
  • 24 PC con caja sellada

Solución Debian:

Para averiguar si una máquina que ejecuta Debian es una computadora portátil, intente:

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

Este enfoque no requiere root privilegios.

En otras distribuciones, sin embargo, este directorio parece existir, al menos en forma de esqueleto, independientemente de si hay o no una batería. Según 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. Así sugiere, para mayor generalidad, una posible solución combinada:

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

Este enfoque no requiere root privilegios.

Más detalles

En un sistema Debian con una batería real, el /sys/module/battery El directorio contiene muchos archivos. Uno de esos archivos es /sys/module/battery/initstate que contiene el texto live . En Ubuntu, sin embargo, estos archivos no existen ni siquiera en las computadoras portátiles reales. Por lo tanto, parece que la presencia del archivo /sys/module/battery/initstate se puede usar para probar una computadora portátil que ejecuta Debian.

En los sistemas Debian que probé, por el contrario, el /proc/acpi/battery directorio no existía.


Linux
  1. ¿La secuencia de comandos Init.d no se ejecuta en el arranque?

  2. ¿Script para determinar si los archivos son imágenes?

  3. Shell Script:¿Condición "si el archivo no se está utilizando"?

  4. Determinar si python se está ejecutando en Ubuntu Linux

  5. ¿Cómo determina si está en un sistema Linux o BSD dentro de un script?

Las 10 mejores distribuciones de Linux para computadoras portátiles y de escritorio

Consejos de Ubuntu:cómo cambiar la fecha y la hora en una computadora portátil o de escritorio

Los 15 mejores software de escritura de guiones para escritorio Linux

Rastreo de programas ejecutados llamados por un script Bash

Ubuntu / Unity adjuntar secuencia de comandos a Launcher

¿Determinar si el archivo está en proceso de escritura?