Linux가 ThinkPad에서 실행되고 있는지 프로그래밍 방식으로 감지해야 합니다.
쉘 스크립트는 다음과 같습니다.이상적인그러나 사용자 정의 프로그램만 가능하다면 일부 소스 코드를 다운로드하고 내 컴퓨터에서 컴파일하여 프로그래밍 방식으로 바이너리를 생성할 수 있습니다.안정적으로해.
요점은 다음과 같습니다.신뢰성/정확성. 의심스러우면 나는 선호한다아니요스크립트를 실행합니다.
dmesg나 다른 텍스트 구문 분석을 사용하면 깔끔하게 처리할 수 있을 것 같은데 lshw
어떤 방법이 가장 신뢰할 수 있나요?
한계: 로그인 스크립트의 일부로 일반 사용자로 실행하면 시스템 모델을 감지하기 위해 일시적으로 권한을 상승시킬 수 없습니다.
허용하다: 필요한 만큼 속도는 문제가 되지 않습니다.
환경: Ubuntu이지만 Linux는 매우 다재다능합니다. 개발자급 빌드 도구의 가용성(GCC가 "그냥 작동한다"고 가정할 수 있음) 로그인 스크립트는 bash에 의해 실행되므로 이 구문의 코드 조각을 더 직접적으로 사용할 수 있습니다.
답변1
다음은 내 Lenovo ThinkPad(FC17 실행)에서 작동합니다.
cat /sys/devices/virtual/dmi/id/chassis_vendor
인쇄:
LENOVO
다음 디렉토리를 확인할 수 있습니다 /proc/acpi/ibm/
. "ThinkPad ACPI Extras" 를 찾아보세요 /proc/acpi/ibm/driver
.
답변2
dmidecode는 이 정보를 제공할 수 있습니다. 그러나 /dev/mem에 대한 루트 액세스가 필요하므로 제한 사항으로 인해 직접 사용할 수 없습니다.
두 가지 옵션이 있습니다.
A) 로그인하고 루트로 실행합니다. dmidecode -t system > /var/tmp/dmidecode_system
그런 다음 파일이 누구나 읽을 수 있는지 확인하고 사용자의 로그인 스크립트에서 파일 내용을 확인합니다.
문제는 정보가 "수동으로"만 업데이트될 수 있다는 것입니다. 그러나 init 스크립트에서 간단히 업데이트할 수 있습니다.
B) 보다 "실시간" 옵션은 권한이 없는 프로세스에 필요한 정보를 제공하는 가젯을 만드는 것입니다.
예를 들어 먼저 인터페이스를 만듭니다.mkfifo /var/tmp/dmidecode_read
그런 다음 누군가가 요청할 때마다 정보를 쓰는 프로세스를 생성합니다.
while true; do dmidecide -t system > /var/tmp/dmidecode_read; done
이 경우에는 시스템이 실행되는 동안 마더보드를 교체할 수 없으므로 이 방법이 작동합니다. 그러나 완전성을 기하기 위해 이 정보는 이론적으로 여전히 구식이 될 수 있음을 언급합니다. 사용자가 파이프에서 읽을 때마다 현재 버퍼가 비워지고 휴면 "제공자"가 존재하게 됩니다. 그런 다음 리더가 기존 버퍼를 수신한 후 새로운 "제공자"가 생성되고 새 정보를 버퍼는 언제든지 다음 판독기를 위해 준비됩니다.