Existe alguma maneira confiável de determinar (programaticamente) a partir de um script bash se ele está sendo executado em um laptop ou computador desktop?
Obviamente, eu poderia simplesmente solicitar ao usuário que perguntasse, mas isso é bastante desajeitado.
linux
shell-script
PseudoPsique
fonte
fonte
Respostas:
Analisar se o sistema possui ou não uma bateria não é confiável - um no-break conectado ao sistema (não apenas para alimentação, mas também via USB, para desligamento automático e monitoramento da bateria) pode aparecer como uma bateria.
No entanto, existe uma maneira confiável e agradável:
Em um laptop, isso retornará um de "Laptop", "Notebook" "Portable" ou "Sub Notebook" (dependendo do que o fabricante codificou no BIOS). Há uma lista completa de valores possíveis em " Identificando o tipo de chassi de um computador " no Guia de script do Windows 2000 - não se preocupe por ser uma página do Microsoft TechNet, isso não é específico do sistema operacional.
O dmidecode também pode obter informações sobre o fabricante do hardware, o número de série do sistema (às vezes) etc.
fonte
/sys/module/battery
?Other
..bashrc
arquivos. Consultar o conteúdo de/sys/class/dmi/id/chassis_type
, que é apenas um único número, é muito melhor (como outra resposta abaixo apontou).Solução Debian:
Para descobrir se uma máquina executando o Debian é um laptop, tente:
Essa abordagem não requer
root
privilégios.Em outras distribuições, no entanto, esse diretório parece existir, pelo menos na forma de esqueleto, independentemente de haver ou não uma bateria. A partir dos comentários (abaixo), essas distribuições incluem o CentOS, Ubuntu e a distribuição do Linux Mint derivada do Ubuntu.
Solução mais geral
Embora não funcione nos meus sistemas Debian, a solução proposta por Alex supostamente funciona no Ubuntu e no CentOS. Assim, sugere, para maior generalidade, uma possível solução combinada:
Essa abordagem não requer
root
privilégios.Mais detalhes
Em um sistema Debian com uma bateria real, o
/sys/module/battery
diretório contém muitos arquivos. Um desses arquivos é o/sys/module/battery/initstate
que contém o textolive
. No Ubuntu, no entanto, esses arquivos não existem mesmo em laptops reais. Portanto, parece que a presença do arquivo/sys/module/battery/initstate
pode ser usada para testar um laptop executando o Debian.Nos sistemas Debian que testei, pelo contrário, o
/proc/acpi/battery
diretório não existia.fonte
Eu verificaria se o computador tem uma bateria instalada. E o seguinte é uma maneira de testar:
fonte
BAT0
paraBAT*
- deve detectar todas as variações.Para evitar o uso do sudo, você pode ler o conteúdo de
/sys/class/dmi/id/chassis_type
. Parece estar em conformidade com a seguinte tabela:fonte
Se a verificação da existência da bateria for boa o suficiente, você poderá usar esta função shell:
Estou usando isso no Debian há anos. Note que isso também funciona para o Debian em execução no WSL ou no VirtualBox.
Editar: generalizado de outras respostas neste tópico para capturar mais casos.
fonte