यदि लैपटॉप या डेस्कटॉप पर किसी स्क्रिप्ट को निष्पादित किया जा रहा है, तो प्रोग्राम का निर्धारण करें?


18

अगर लैपटॉप या डेस्कटॉप कंप्यूटर पर निष्पादित किया जा रहा है तो क्या बैश स्क्रिप्ट के भीतर से (प्रोग्रामिक रूप से) निर्धारित करने का कोई विश्वसनीय तरीका है?

मैं स्पष्ट रूप से सिर्फ उपयोगकर्ता से उन्हें पूछने के लिए संकेत दे सकता था, लेकिन यह बहुत ही स्पष्ट है।


1
मैं कहूंगा कि आपको क्यों जानना चाहिए? क्या आप बैटरी जीवन के बारे में चिंतित हैं
रिच होमोलका

3
स्क्रिप्ट उपयोगकर्ता के लिए कुछ सिस्टम सेटअप कर रही है, और इसका कुछ हिस्सा डिवाइस को लैपटॉप होने पर कुछ बिजली की बचत सेटिंग्स को कॉन्फ़िगर करना है।
छद्मपीसिका

जवाबों:


29

यह देखते हुए कि सिस्टम में बैटरी है या नहीं, विश्वसनीय नहीं है - सिस्टम से जुड़ा एक यूपीएस (न केवल बिजली के लिए, बल्कि यूएसबी के साथ-साथ स्वचालित शटडाउन और बैटरी मॉनिटरिंग के लिए) बैटरी के रूप में दिखाई दे सकता है।

हालांकि एक अच्छा विश्वसनीय तरीका है:

dmidecode --string chassis-type

एक लैपटॉप पर, यह "लैपटॉप", "नोटबुक" "पोर्टेबल", या "सब नोटबुक" में से एक को लौटाएगा (यह निर्भर करता है कि निर्माता BIOS में क्या कोडित है)। विंडोज 2000 स्क्रिप्टिंग गाइड में " कंप्यूटर की चेसिस प्रकार की पहचान " में संभावित मूल्यों की एक पूरी सूची है - यह Microsoft TechNet पेज होने के बारे में चिंता न करें, यह ओएस विशिष्ट नहीं है।

dmidecode हार्डवेयर निर्माता, सिस्टम सीरियल नंबर (कभी-कभी), आदि के बारे में भी जानकारी प्राप्त कर सकता है।


नेटवर्क यूपीएस टूल के साथ स्वचालित शटडाउन और बैटरी मॉनिटरिंग के लिए मेरे पास USB के माध्यम से यूपीएस नियंत्रित है । यह डेस्कटॉप पर "बैटरी" के रूप में प्रदर्शित नहीं होता है । आप किस कॉन्फ़िगरेशन का उपयोग कर रहे हैं जिसके तहत एक यूपीएस दिखाई देता है /sys/module/battery?
जॉन 1024

यह / sys / मॉड्यूल / बैटरी विधि से बेहतर काम करता है: मेरे दो उबंटू 14.04 डेस्कटॉप क्रमशः "डेस्कटॉप" और "लो प्रोफाइल डेस्कटॉप" का जवाब देते हैं, और CentOS 6.5 वाले "अज्ञात" कहते हैं। CentOS 5.3 वाला शब्द "चेसिस-टाइप" कीवर्ड को नहीं पहचानता है। जिस लैपटॉप पर मैंने कोशिश की, वह "नोटबुक" कहता है। लेकिन यह एक खामी है कि आपको रूट एक्सेस की आवश्यकता है।
थॉमस पैड्रॉन-मैककार्थी

मुझे वास्तव में यह उत्तर पसंद है!
लेम्बिक

वितरण स्वतंत्रता के लिए +1। मैंने कई मशीनों पर इसका सफल परीक्षण किया। एकमात्र मशीन जिस पर dmidecode सहायक उत्तर से कम देता था, वह थी Aspire netbook ने एक चेसिस प्रकार की वापसी की Other
जॉन 1024 22

इस उत्तर में sudo की आवश्यकता होती है, इसलिए .bashrcफ़ाइलों जैसी चीज़ों के लिए व्यवहार्य नहीं है । की सामग्री को छोड़कर /sys/class/dmi/id/chassis_type, जो कि केवल एक ही संख्या है, बहुत बेहतर है (जैसा कि नीचे दिए गए एक अन्य उत्तर के अनुसार)।
xdavidliu 20

9

डेबियन समाधान:

यह जानने के लिए कि क्या डेबियन चलाने वाली मशीन एक लैपटॉप है, कोशिश करें:

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

इस दृष्टिकोण को rootविशेषाधिकारों की आवश्यकता नहीं है ।

अन्य वितरणों पर, हालांकि, यह निर्देशिका मौजूद है, कम से कम कंकाल के रूप में, चाहे बैटरी हो या न हो। टिप्पणियों (नीचे) से, इन वितरणों में सैंटोस, उबंटू और लिनक्स मिंट के उबंटू-व्युत्पन्न वितरण शामिल हैं।

अधिक सामान्य समाधान

यद्यपि यह मेरे डेबियन सिस्टम पर काम नहीं करता है, एलेक्स द्वारा प्रस्तावित समाधान उबंटू और सेंटोस पर काम करता है। इस प्रकार, अधिक से अधिक व्यापकता के लिए, एक संभव संयुक्त समाधान का सुझाव देता है:

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

इस दृष्टिकोण को rootविशेषाधिकारों की आवश्यकता नहीं है ।

अधिक जानकारी

वास्तविक बैटरी के साथ डेबियन सिस्टम पर, /sys/module/batteryनिर्देशिका में कई फाइलें होती हैं। ऐसी ही एक फाइल है /sys/module/battery/initstateजिसमें टेक्स्ट होता है live। हालाँकि, उबंटू में, ये फाइलें वास्तविक लैपटॉप पर भी मौजूद नहीं हैं। इस प्रकार, ऐसा प्रतीत होता है कि फ़ाइल की उपस्थिति का /sys/module/battery/initstateउपयोग डेबियन चलाने वाले लैपटॉप के परीक्षण के लिए किया जा सकता है।

इसके विपरीत, मैंने जिन डेबियन प्रणालियों का परीक्षण किया, उनमें /proc/acpi/batteryनिर्देशिका मौजूद नहीं थी।


1
क्या यह संभव नहीं है कि यूपीएस के साथ एक डेस्कटॉप के मामले में दूसरी कमान अभी भी सही हो सकती है?
स्यूडोस्पीक

3
@PseudoPsyche मैंने इसे केवल एक यूपीएस के साथ एक डेस्कटॉप पर परीक्षण किया और यह गलत (लैपटॉप नहीं) वापस आ गया।
जॉन १०२४

1
वह पहला आदेश वहां क्या कर रहा है?
आंद्रेकेआर

1
जाहिरा तौर पर USB पर प्लग किया गया APC SmartUPS वाला मेरा 4U IBM सर्वर एक लैपटॉप है। मैं निश्चित रूप से उस दिन मेरी गोद में नहीं चाहता! (यानी, अगर इसमें यूपीएस बंद हो गया है और शटडाउन / निगरानी के लिए कॉन्फ़िगर किया गया है, तो वह निर्देशिका मौजूद रहेगी)
अनुदान दें

1
@Chipperyman "दीवार सॉकेट और एक कंप्यूटर पावर सॉकेट के बीच एक यूपीएस नहीं जाता है?" हाँ, और उपभोक्ता स्तर सहित कई यूपीएस सेटअप - आपको अपने डेस्कटॉप पर बैटरी की जानकारी और अलर्ट प्राप्त करने के लिए एक यूएसबी केबल को हुक करने की अनुमति देते हैं।
जेकगॉल्ड

8

अगर कंप्यूटर में बैटरी लगाई गई है तो मैं जाँच करूँगा। और निम्नलिखित परीक्षण करने का एक तरीका है:

if [ -d /proc/acpi/battery/BAT* ]; then
  echo has a battery
fi

इस विधि ने उन सभी पाँच कंप्यूटरों पर सही उत्तर दिया, जिन पर मैंने यह कोशिश की: उबंटू 14.04 के साथ दो डेस्कटॉप, CentOS 5.3 वाला एक डेस्कटॉप, CentOS 6.5 वाला एक डेस्कटॉप, और Ubuntu 14.04 वाला एक लैपटॉप। इसके अलावा, इसे रूट एक्सेस की आवश्यकता नहीं है। उत्तरों में तीन तरीकों में से, मेरे परीक्षणों से संकेत मिलता है कि यह, अस्थायी रूप से, सबसे अच्छा हो सकता है।
थॉमस पैड्रॉन-मैककार्थी

यह मेरे लिए काम करता है।
लिम्बिक

यह उन दो डेबियन लैपटॉप पर काम नहीं करता जिन्हें मैंने परीक्षण किया था लेकिन कई अन्य महत्वपूर्ण वितरणों पर काम करने के लिए +1
जॉन 1024

मेरे लिए (तोशिबा नोटबुक) काम नहीं करता है, क्योंकि मेरी बैटरी का नाम बैट 1 है। मैं नहीं जानता कि कितने अन्य संभावित नाम हो सकते हैं।
जो

@Joe बदलें BAT0करने के लिए BAT*- यह सब विविधताओं का पता लगाने चाहिए।
एलेक्स

8

सुडो का उपयोग करने से बचने के लिए, आप सामग्री पढ़ सकते हैं /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 रैक माउंट चेसिस
  • 24 सील-केस पीसी

तालिका के लिए स्रोत? और 'लंच बॉक्स' एक मजाक है ?!
OJFord

1
@OJFord के पास इस समय मेरा कोई उद्धरण नहीं है। जहां तक ​​'लंचबॉक्स' की बात है, यह एक फॉर्म फैक्टर को दिया जाने वाला उपनाम है। मैंने पहले कुछ लंचबॉक्स और पिज़ाबॉक्सेस के साथ काम किया है। इस लिंक नहीं पिछले साल, आप कुछ बहुत आधुनिक लंचबॉक्स कंप्यूटर देख सकते हैं सकता है theportablepc.com/portable-pc.html
संकोची

1
: अनुदान के जवाब से माइक्रोसॉफ्ट एक प्रशस्ति पत्र शामिल docs.microsoft.com/en-us/previous-versions/tn-archive/...
संकोची

धन्यवाद! अब मुझे एक चाहिए ... लेकिन मुझे संदेह है कि मेरा बटुआ नहीं है।
OJFord

यह एकमात्र समाधान था जो सूडो की आवश्यकता के बिना मेरे लिए काम करता था। बैटरी आधारित समाधान या तो मेरे ubuntu डेस्कटॉप एक लैपटॉप था, या कहा कि मेरे डेबियन लैपटॉप एक डेस्कटॉप था।
xdavidliu

1

अगर बैटरी के अस्तित्व की जाँच काफी अच्छी है, तो आप इस शेल फ़ंक्शन का उपयोग कर सकते हैं:

# 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
}

सालों से डेबियन पर इसका इस्तेमाल कर रहे हैं। ध्यान दें कि यह कार्य WSL या वर्चुअलबॉक्स में चल रहे डेबियन के लिए भी है।

संपादित करें: अधिक मामलों को पकड़ने के लिए इस थ्रेड में अन्य उत्तरों से सामान्यीकृत।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.