Dizüstü bilgisayarda veya masaüstünde bir komut dosyasının yürütülüp yürütülmediğini programlı olarak belirlensin mi?


18

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.


1
Neden bilmeniz gerektiğini söyleyebilirim? Pil ömrü konusunda endişeli misiniz
Rich Homolka

3
Komut dosyası, kullanıcı için bazı sistem kurulumları yapıyor ve bunun bir kısmı, aygıt bir dizüstü bilgisayarsa, bazı güç tasarrufu ayarlarını yapılandırıyor.
PseudoPsyche

Yanıtlar:


29

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.


Ağ UPS Aracı ile otomatik kapanma ve akü izleme için USB üzerinden kontrol edilen bir UPS'im var . O yapmasıdır değil Masaüstünde bir "pil" olarak gösterilir. Bir UPS altında görünen konfigürasyonu hangi konfigürasyonu kullanıyorsunuz /sys/module/battery?
John1024

Bu, / sys / module / battery yönteminden daha iyi çalışır: İki Ubuntu 14.04 masaüstü bilgisayarım sırasıyla "Masaüstü" ve "Düşük Profil Masaüstü" yanıtını verir ve CentOS 6.5 olana "Bilinmeyen" der. CentOS 5.3 olanı "şasi tipi" anahtar kelimesini tanımıyor. Denediğim Laptop "Notebook" yazıyor. Ancak kök erişimine ihtiyacınız olan bir dezavantajdır.
Thomas Padron-McCarthy

Bu cevabı gerçekten çok beğendim!
Lembik

Dağıtım bağımsızlığı için +1. Birkaç makinede başarıyla test ettim. Dmidecode'un daha az yardımcı bir cevap verdiği tek makine, bir Aspire netbook'un şasi türünü döndürmesiydi Other.
John1024

bu cevap sudo gerektirir, bu yüzden .bashrcdosyalar gibi şeyler için geçerli değildir . /sys/class/dmi/id/chassis_typeSadece tek bir sayı olan içeriklerini sorgulamak çok daha iyidir (aşağıda başka bir cevabın işaret ettiği gibi).
xdavidliu

9

Debian Çözümü:

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 rootayrı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.

Daha Genel Çözüm

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 rootayrıcalık gerektirmez .

Daha fazla detay

Gerçek pili olan bir Debian sisteminde, /sys/module/batterydizin birçok dosya içerir. Böyle bir dosya /sys/module/battery/initstatemetni 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/initstateDebian ç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/batterydizin yoktu.


1
UPS'li bir masaüstünde ikinci komutun yine de doğru olması mümkün değil mi?
PseudoPsyche

3
@PseudoPsyche Bir UPS ile masaüstünde test ettim ve yanlış döndü (dizüstü bilgisayar değil).
John1024

1
İlk komut orada ne yapıyor?
AndreKR

1
Görünüşe göre USB üzerinden takılı bir APC SmartUPS ile 4U IBM sunucum bir laptop. Kesinlikle bütün gün kucağımda bu şeyi istemezdim! (yani, bir UPS dizin mevcut olacağı, izleme / takılı ve kapatma için yapılandırılmış varsa)
Grant

1
@Chipperyman “Bir UPS duvar prizi ile bir bilgisayar güç soketi arasına girmiyor mu?” Evet ve tüketici düzeyi de dahil olmak üzere birçok UPS kurulumu, masaüstünüze pil bilgisi ve uyarıları almak için bir USB kablosu bağlamanızı sağlar.
JakeGould

8

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

Bu yöntem, denediğim her beş bilgisayarda da doğru cevabı verdi: Ubuntu 14.04 ile iki masaüstü, CentOS 5.3 ile bir masaüstü, CentOS 6.5 ile bir masaüstü ve Ubuntu 14.04 ile bir dizüstü bilgisayar. Ayrıca, kök erişimi gerektirmez. Cevaplardaki üç yöntemden, testlerim bunun geçici olarak en iyisi olabileceğini gösteriyor.
Thomas Padron-McCarthy

Bu benim için çalışıyor.
Lembik

Bu, test ettiğim iki Debian dizüstü bilgisayarda çalışmadı, ancak çeşitli diğer önemli dağıtımlarda çalışmak için +1 .
John1024

Benim için çalışmıyor (Toshiba Notebook), çünkü pilimin adı BAT1. Başka kaç olası isim olabileceğini bilmiyorum.
Joe

@Joe Değişim BAT0için BAT*- bu tüm varyasyonları algılamalıdır.
Alex

8

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:

  • 1 Diğer
  • 2 Bilinmiyor
  • 3 Masaüstü
  • 4 Düşük Profil Masaüstü
  • 5 Pizza Kutusu
  • 6 Mini Kule
  • 7 Kule
  • 8 Taşınabilir
  • 9 Dizüstü Bilgisayar
  • 10 Dizüstü Bilgisayar
  • 11 Elde taşınan
  • 12 Bağlantı İstasyonu
  • 13 Hepsi Bir Arada
  • 14 Alt Not Defteri
  • 15 Yer Tasarrufu
  • 16 yemek kutusu
  • 17 Ana Sistem Şasisi
  • 18 Genişletme Kasası
  • 19 Alt Şasi
  • 20 Otobüs Genleşme Şasesi
  • 21 Çevresel Şasi
  • 22 Saklama Kasası
  • 23 Raf Montajlı Şasi
  • 24 Mühürlü Kasa PC

Tablo için kaynak? Peki 'öğle yemeği kutusu' bir şaka mı ?!
OJFord

1
@OJFord Şu anda bir alıntım yok. 'Beslenme çantası' ile ilgili olarak, bir form faktörüne verilen bir takma addır. Daha önce birkaç beslenme çantası ve pizzabox ile çalıştım. Bu bağlantı uzun yıllar devam etmese de, bazı modern beslenme çantası bilgisayarlarını görebilirsiniz theportablepc.com/portable-pc.html
ağırbaşlı

1
Grant'in cevabı microsoft'tan bir alıntı içeriyor: docs.microsoft.com/en-us/previous-versions/tn-archive/…
ağırbaşlı

Teşekkürler! Şimdi bir tane istiyorum ... Ama cüzdanımın şüphelenmediğini düşünüyorum.
OJFord

Sudo'ya ihtiyaç duymadan benim için çalışan tek çözüm buydu. Pil tabanlı çözümler ubuntu masaüstümün bir dizüstü bilgisayar olduğunu veya debian dizüstü bilgisayarımın bir masaüstü olduğunu söyledi.
xdavidliu

1

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.