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へのルートアクセスが必要なため、制限のため直接使用できません。
2つのオプションがあります。
A)ログインしてrootとして実行します。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
この場合、システムの実行中にマザーボードを交換できないため、この方法は機能します。しかし、完全性を期すために、この情報は理論的には時代遅れになる可能性があることに言及しています。ユーザーがパイプから読み取るたびに、現在のバッファが空になり、休眠「プロバイダ」が存在します。その後、リーダーが既存のバッファを受信した後、新しい「プロバイダ」が作成され、新しい情報をバッファはいつでも次のリーダーに準備されます。