GNU/Linux >> Linux の 問題 >  >> Linux

スクリプトがラップトップまたはデスクトップで実行されているかどうかをプログラムで判断しますか?

システムにバッテリーがあるかどうかを確認するのは信頼できません。システムに接続されている UPS (電源のためだけでなく、自動シャットダウンとバッテリー監視のために USB 経由でも) がバッテリーとして表示される場合があります。

ただし、信頼できる優れた方法があります:

dmidecode --string chassis-type

ラップトップでは、"Laptop"、"Notebook"、"Portable"、または "Sub Notebook" のいずれかが返されます (製造元が BIOS にコーディングした内容によって異なります)。 Windows 2000 Scripting Guide の「Identifying the Chassis Type of a Computer」に、可能な値の完全なリストがあります。Microsoft TechNet のページであることに注意してください。これは OS 固有のものではありません。

dmidecode は、ハードウェアの製造元、システムのシリアル番号 (場合によっては) などに関する情報も取得できます。


sudo の使用を避けるには、 /sys/class/dmi/id/chassis_type の内容を読み取ることができます .次の表に準拠しているようです:

  • 1 その他
  • 2 不明
  • 3 デスクトップ
  • 4 ロー プロファイル デスクトップ
  • 5 ピザボックス
  • 6 ミニタワー
  • 7 タワー
  • 8 ポータブル
  • 9 ラップトップ
  • ノート10冊
  • 11 ハンドヘルド
  • 12 ドッキング ステーション
  • 13 のオールインワン
  • 14 サブ ノートブック
  • 15 省スペース
  • 16 ランチ ボックス
  • 17 メイン システム シャーシ
  • 18 拡張シャーシ
  • 19 サブシャーシ
  • 20 バス拡張シャーシ
  • 21 周辺シャーシ
  • 22 台のストレージ シャーシ
  • 23 ラック マウント シャーシ
  • 密閉型PC 24台

Debian ソリューション:

Debian を実行しているマシンがラップトップかどうかを調べるには、次を試してください:

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

このアプローチには root は必要ありません

ただし、他のディストリビューションでは、バッテリーの有無に関係なく、少なくともスケルトン形式でこのディレクトリが存在するようです。コメント (以下) から、これらのディストリビューションには、CentOS、Ubuntu、Linux Mint の Ubuntu 派生ディストリビューションが含まれます。

より一般的な解決策

私の Debian システムでは動作しませんが、Alex が提案したソリューションは Ubuntu と CentOS で動作すると報告されています。したがって、一般性を高めるために、可能な組み合わせソリューションを提案します:

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

このアプローチには root は必要ありません

詳細

実際のバッテリーを搭載した Debian システムでは、/sys/module/battery ディレクトリには多くのファイルが含まれています。そのようなファイルの 1 つが /sys/module/battery/initstate です。 テキスト live を含む .ただし、Ubuntu では、これらのファイルは実際のラップトップにも存在しません。したがって、ファイル /sys/module/battery/initstate が存在するようです。 Debian を実行しているラップトップのテストに使用できます。

対照的に、私がテストした Debian システムでは、/proc/acpi/battery ディレクトリが存在しませんでした。


Linux
  1. 実行時にスクリプトでシェルを決定しますか?

  2. Bash Echoコマンドライン自体で実行されるコマンドライン(スクリプトではない)?

  3. Tail -f、ファイルが書き込まれなくなったかどうかを判断しますか?

  1. Init.dスクリプトが起動時に実行されていませんか?

  2. ファイルが画像であるかどうかを判断するためのスクリプト?

  3. シェルスクリプト:「ファイルが使用されていない場合」の状態?

  1. デスクトップショートカットからShスクリプトを実行する方法は?

  2. スクリプト内で Linux または BSD システムを使用しているかどうかをどのように判断しますか?

  3. 実行中のスクリプトによって書き込まれているファイルを開くのは安全ですか?