GNU/Linux >> Belajar Linux >  >> Linux

Secara terprogram menentukan apakah skrip dijalankan di laptop atau desktop?

Melihat apakah sistem memiliki baterai atau tidak tidak dapat diandalkan - UPS yang terhubung ke sistem (tidak hanya untuk daya, tetapi melalui USB juga untuk pematian otomatis dan pemantauan baterai) mungkin muncul sebagai baterai.

Namun ada cara andal yang bagus:

dmidecode --string chassis-type

Pada laptop, ini akan mengembalikan salah satu dari "Laptop", "Notebook" "Portable", atau "Sub Notebook" (tergantung pada apa yang dikodekan pabrikan ke dalam BIOS). Ada daftar lengkap kemungkinan nilai di "Identifying the Chassis Type of a Computer" di Panduan Pembuatan Skrip Windows 2000 - jangan khawatir karena ini adalah halaman Microsoft TechNet, ini bukan khusus OS.

dmidecode juga dapat memperoleh informasi tentang pabrikan perangkat keras, nomor seri sistem (terkadang), dll.


Untuk menghindari penggunaan sudo, Anda dapat membaca isi /sys/class/dmi/id/chassis_type . Tampaknya sesuai dengan tabel berikut:

  • 1 Lainnya
  • 2 Tidak diketahui
  • 3 Desktop
  • 4 Desktop Profil Rendah
  • 5 Kotak Pizza
  • 6 Menara Mini
  • 7 Menara
  • 8 Portabel
  • 9 Laptop
  • 10 Buku Catatan
  • 11 Genggam
  • 12 Stasiun Dok
  • 13 Semuanya dalam Satu
  • 14 Sub Buku Catatan
  • 15 Hemat Ruang
  • 16 Kotak Makan Siang
  • 17 Sasis Sistem Utama
  • 18 Sasis Ekspansi
  • 19 Sub Sasis
  • 20 Sasis Ekspansi Bus
  • 21 Sasis Periferal
  • 22 Sasis Penyimpanan
  • 23 Sasis Pemasangan Rak
  • 24 PC Casing Tersegel

Solusi Debian:

Untuk mengetahui apakah mesin yang menjalankan Debian adalah laptop, coba:

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

Pendekatan ini tidak memerlukan root hak istimewa.

Namun, pada distribusi lain, direktori ini tampaknya ada, setidaknya dalam bentuk kerangka, terlepas dari ada atau tidaknya baterai. Dari komentar (di bawah), distribusi ini termasuk CentOS, Ubuntu, dan distribusi Linux Mint turunan Ubuntu.

Solusi Lebih Umum

Meskipun tidak bekerja pada sistem Debian saya, solusi yang diusulkan oleh Alex dikabarkan bekerja di Ubuntu &CentOS. Jadi menyarankan, untuk umum yang lebih besar, kemungkinan solusi gabungan:

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

Pendekatan ini tidak memerlukan root hak istimewa.

Detail Lebih Lanjut

Pada sistem Debian dengan baterai aktual, /sys/module/battery direktori berisi banyak file. Salah satu file tersebut adalah /sys/module/battery/initstate yang berisi teks live . Namun, di Ubuntu, file-file ini tidak ada bahkan di laptop sebenarnya. Dengan demikian, terlihat adanya file /sys/module/battery/initstate dapat digunakan untuk menguji laptop yang menjalankan Debian.

Sebaliknya, pada sistem Debian yang saya uji, /proc/acpi/battery direktori tidak ada.


Linux
  1. Tail -f, Tentukan Apakah Sebuah File Tidak Lagi Ditulis?

  2. Skrip Init.d Tidak Dijalankan Saat Boot?

  3. Shell Script:Kondisi "jika File Tidak Digunakan"?

  1. Tentukan apakah python sedang dijalankan di Ubuntu Linux

  2. Apakah aman membuka file yang sedang ditulis oleh skrip yang sedang berjalan?

  3. Apa yang dilakukan skrip sh ini jika dijalankan?

  1. Tentukan Shell In Script Selama Runtime?

  2. Bash Echo Baris Perintah Dieksekusi Di Baris Perintah Itu Sendiri (bukan Dalam Script)?

  3. tentukan shell dalam skrip selama runtime