Bir bash betiğinden bir dizüstü bilgisayarda veya masaüstü bilgisayarda yürütülüyorsa (programlı olarak) belirlemenin güvenilir bir yolu var mı?
Açıkçası sadece kullanıcı onlara sormak isteyebilir, ama bu oldukça aksak.
Bir bash betiğinden bir dizüstü bilgisayarda veya masaüstü bilgisayarda yürütülüyorsa (programlı olarak) belirlemenin güvenilir bir yolu var mı?
Açıkçası sadece kullanıcı onlara sormak isteyebilir, ama bu oldukça aksak.
Yanıtlar:
Sistemin pili olup olmadığına bakmak güvenilir değildir - sisteme bağlı bir UPS (sadece güç için değil, USB üzerinden ve aynı zamanda otomatik kapatma ve pil izleme için de) bir pil olarak görünebilir.
Ancak güzel ve güvenilir bir yol var:
dmidecode --string chassis-type
Bir dizüstü bilgisayarda, bu "Dizüstü Bilgisayar", "Dizüstü Bilgisayar" "Taşınabilir" veya "Alt Dizüstü Bilgisayar" dan birini döndürür (üreticinin BIOS'a ne kodladığına bağlı olarak). Windows 2000 Komut Dosyası Kılavuzu'ndaki " Bilgisayarın Kasa Türünü Tanımlama " bölümünde olası değerlerin tam listesi vardır ; bunun Microsoft TechNet sayfası olması konusunda endişelenmeyin, bu işletim sistemine özgü değildir.
dmidecode ayrıca donanım üreticisi, sistem seri numarası (bazen) vb. hakkında bilgi alabilir.
/sys/module/battery
?
Other
.
.bashrc
dosyalar gibi şeyler için geçerli değildir . /sys/class/dmi/id/chassis_type
Sadece tek bir sayı olan içeriklerini sorgulamak çok daha iyidir (aşağıda başka bir cevabın işaret ettiği gibi).
Debian çalıştıran bir makinenin dizüstü bilgisayar olup olmadığını öğrenmek için şunları deneyin:
[ -d /sys/module/battery ] && echo "Yes it's a laptop"
Bu yaklaşım root
ayrıcalık gerektirmez .
Bununla birlikte, diğer dağıtımlarda, bu dizin, bir pil olup olmadığına bakılmaksızın, en azından iskelet formunda var gibi görünmektedir. Yorumlardan (aşağıda) bu dağıtımlar arasında CentOS, Ubuntu ve Ubuntu'dan türetilmiş Linux Mint dağıtımı bulunmaktadır.
Debian sistemlerimde çalışmıyor olmasına rağmen, Alex tarafından önerilen çözümün Ubuntu ve CentOS üzerinde çalıştığı bildiriliyor. Böylece, daha fazla genellik için, olası bir birleşik çözüm önermektedir:
[ -f /sys/module/battery/initstate ] || [ -d /proc/acpi/battery/BAT0 ] && echo "Yes it's a laptop"
Bu yaklaşım root
ayrıcalık gerektirmez .
Gerçek pili olan bir Debian sisteminde, /sys/module/battery
dizin birçok dosya içerir. Böyle bir dosya /sys/module/battery/initstate
metni içerir live
. Ancak Ubuntu'da bu dosyalar gerçek dizüstü bilgisayarlarda bile mevcut değildir. Böylece, dosyanın varlığının /sys/module/battery/initstate
Debian çalıştıran bir dizüstü bilgisayarı test etmek için kullanılabileceği görülmektedir.
Test ettiğim Debian sistemlerinde ise /proc/acpi/battery
dizin yoktu.
Bilgisayarda pil takılı olup olmadığını kontrol ederdim. Ve aşağıdakileri test etmenin bir yolu var:
if [ -d /proc/acpi/battery/BAT* ]; then
echo has a battery
fi
BAT0
için BAT*
- bu tüm varyasyonları algılamalıdır.
Sudo kullanmaktan kaçınmak için içeriğini okuyabilirsiniz /sys/class/dmi/id/chassis_type
. Aşağıdaki tabloya uygun görünüyor:
Pilin varlığını kontrol etmek yeterince iyiyse, bu kabuk işlevini kullanabilirsiniz:
# 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
}
Bunu Debian'da yıllardır kullanıyor. Bunun WSL veya sanal kutuda çalışan Debian için de geçerli olduğunu unutmayın.
Düzenleme: daha fazla örnek yakalamak için bu konudaki diğer cevaplardan genelleştirilmiştir.