Apakah ada cara yang dapat diandalkan untuk menentukan (secara terprogram) dari dalam skrip bash jika dijalankan pada laptop atau komputer desktop?
Saya jelas bisa meminta pengguna untuk bertanya kepada mereka, tapi itu cukup kikuk.
Apakah ada cara yang dapat diandalkan untuk menentukan (secara terprogram) dari dalam skrip bash jika dijalankan pada laptop atau komputer desktop?
Saya jelas bisa meminta pengguna untuk bertanya kepada mereka, tapi itu cukup kikuk.
Jawaban:
Melihat apakah sistem memiliki baterai atau tidak dapat diandalkan - UPS terhubung ke sistem (tidak hanya untuk daya, tetapi juga melalui USB juga untuk shutdown otomatis dan pemantauan baterai) dapat muncul sebagai baterai.
Namun ada cara bagus yang dapat diandalkan:
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 nilai yang mungkin di " Mengidentifikasi Jenis Chassis Komputer " di Windows 2000 Scripting Guide - jangan khawatir tentang itu menjadi halaman Microsoft TechNet, ini bukan OS spesifik.
dmidecode juga dapat memperoleh informasi tentang pabrik perangkat keras, nomor seri sistem (kadang-kadang), dll.
/sys/module/battery
?
Other
.
.bashrc
file. Meminta isi /sys/class/dmi/id/chassis_type
, yang hanya satu nomor, jauh lebih baik (seperti yang ditunjukkan oleh jawaban lain di bawah).
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 yang diturunkan dari Ubuntu.
Meskipun tidak bekerja pada sistem Debian saya, solusi yang diusulkan oleh Alex dilaporkan bekerja di Ubuntu & CentOS. Dengan demikian menyarankan, untuk generalisasi 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.
Pada sistem Debian dengan baterai yang sebenarnya, /sys/module/battery
direktori berisi banyak file. Salah satu file tersebut adalah /sys/module/battery/initstate
yang berisi teks live
. Namun pada Ubuntu, file-file ini tidak ada bahkan pada laptop sebenarnya. Dengan demikian, tampaknya keberadaan file /sys/module/battery/initstate
dapat digunakan untuk menguji laptop yang menjalankan Debian.
Sebaliknya, pada sistem Debian yang saya uji, /proc/acpi/battery
direktori tersebut tidak ada.
Saya akan memeriksa apakah komputer memiliki baterai yang terpasang. Dan berikut ini adalah salah satu cara untuk menguji:
if [ -d /proc/acpi/battery/BAT* ]; then
echo has a battery
fi
BAT0
ke BAT*
- ini akan mendeteksi semua variasi.
Untuk menghindari penggunaan sudo, Anda dapat membaca konten /sys/class/dmi/id/chassis_type
. Tampaknya sesuai dengan tabel berikut:
Jika memeriksa keberadaan baterai sudah cukup baik, Anda dapat menggunakan fungsi shell ini:
# Checks whether system is a laptop.
#
# @returns {bool} true if system is a laptop.
function is_laptop() {
local d
for d in /sys/class/power_supply /proc/acpi/battery; do
[[ -d "$d" ]] && find $d -mindepth 1 -maxdepth 1 -name 'BAT*' -print0 -quit 2>/dev/null | grep -q . && return 0
done
# note we're checking /sys/class/power_supply/battery/status for WSL
for d in /sys/class/power_supply/battery/status /sys/module/battery/initstate; do
[[ -f "$d" ]] && return 0
done
return 1
}
Telah menggunakan ini di Debian selama bertahun-tahun. Perhatikan ini berfungsi juga untuk Debian yang berjalan di WSL atau virtualbox.
Sunting: digeneralisasi dari jawaban lain di utas ini untuk menangkap lebih banyak kasus.