Como testar se o Linux está rodando em um ThinkPad?

3

Eu preciso detectar programaticamente se o Linux está sendo executado em um ThinkPad.

Um shell script seria ideal mas eu posso gerar programaticamente qualquer binário baixando alguma fonte e compilando-a na máquina se apenas um programa personalizado puder confiável faça isso.

O foco é: confiabilidade / precisão . Em caso de dúvida, prefiro que não execute o script.

Eu tenho um palpite de que isso pode ser feito de forma inteligente usando a análise de texto de coisas como dmesg ou lshw , mas qual método é mais confiável?

Restrição : executado como um usuário normal, como parte de um script de login, sem possibilidade de elevação temporária de privilégios apenas para detectar o modelo da máquina.

Permissão : leve o tempo que for necessário, a velocidade não é um fator.

Ambiente : Ubuntu, mas a generalidade do Linux é legal de se ter. Disponibilidade de ferramentas de criação no nível do desenvolvedor (o GCC pode ser considerado como "apenas trabalho"). O script de login é executado pelo bash, portanto, um snippet de código nessa sintaxe seria mais diretamente utilizável.

    
por Robottinosino 10.04.2013 / 12:37

2 respostas

2

O seguinte funciona no meu Lenovo ThinkPad (executando o FC17):

cat /sys/devices/virtual/dmi/id/chassis_vendor

Impressões:

LENOVO

O diretório a seguir pode ser verificado por /proc/acpi/ibm/ . Você poderia procurar em /proc/acpi/ibm/driver por "ThinkPad ACPI Extras".

    
por 10.04.2013 / 16:22
0

dmidecode pode fornecer esta informação. No entanto, requer privilégios de root para acessar / dev / mem, portanto, devido às suas restrições, isso não pode ser usado diretamente.

Você tem duas opções.

A) Faça o login como root e execute dmidecode -t system > /var/tmp/dmidecode_system Em seguida, verifique se o arquivo é legível por todos e verifique o conteúdo desse arquivo no script de login do usuário.

O problema é que as informações só serão atualizadas "manualmente". Você pode, no entanto, simplesmente atualizá-lo a partir de um script de inicialização.

B) Uma opção mais "ao vivo" é criar uma pequena ferramenta que forneça as informações necessárias para processos não privilegiados.

Primeiro, crie uma interface, por exemplo, mkfifo /var/tmp/dmidecode_read

Em seguida, crie um processo que irá escrever as informações toda vez que alguém solicitar, por exemplo

while true; do dmidecide -t system > /var/tmp/dmidecode_read; done

Nesse caso, isso funcionará, porque você não pode substituir uma placa-mãe enquanto o sistema estiver em execução. Mas, por completo, mencionei que essa informação ainda poderia teoricamente se tornar obsoleta. Cada vez que um usuário lê a partir do pipe, o buffer atual é esvaziado, o "fornecedor" adormecido existe, ae depois que o leitor receber o buffer existente, um novo "fornecedor" será gerado e colocará novas informações no buffer pronto para o próximo leitor, sempre que for.

    
por 10.04.2013 / 13:00