ল্যাপটপ বা ডেস্কটপে কোনও স্ক্রিপ্ট কার্যকর করা হচ্ছে কিনা তা প্রাথমিকভাবে নির্ধারণ করুন?


18

কোনও ল্যাপটপ বা ডেস্কটপ কম্পিউটারে এটি চালিত হলে বাশ স্ক্রিপ্টের মধ্যে থেকে (প্রোগ্রামিকভাবে) নির্ধারণ করার কোনও নির্ভরযোগ্য উপায় আছে কি?

আমি স্পষ্টতই তাদের জিজ্ঞাসা করতে ব্যবহারকারীকে অনুরোধ করতে পারি, তবে এটি বেশ জঘন্য।


1
আমি বলব কেন আপনার জানা দরকার? আপনি কি ব্যাটারির জীবন নিয়ে চিন্তিত
ধনী হোমোলকা

3
স্ক্রিপ্টটি ব্যবহারকারীর জন্য কিছু সিস্টেম সেটআপ করছে এবং এর কিছু অংশ ডিভাইস ল্যাপটপ হলে কিছু পাওয়ার সাশ্রয় সেটিংস কনফিগার করছে।
সিউডোপাইচে

উত্তর:


29

সিস্টেমের ব্যাটারি রয়েছে কি না তা দেখার জন্য নির্ভরযোগ্য নয় - সিস্টেমের সাথে যুক্ত একটি ইউপিএস (কেবল পাওয়ারের জন্য নয়, ইউএসবি-তে পাশাপাশি স্বয়ংক্রিয় শাটডাউন এবং ব্যাটারি পর্যবেক্ষণের জন্য) ব্যাটারি হিসাবে প্রদর্শিত হতে পারে।

একটি দুর্দান্ত নির্ভরযোগ্য উপায় আছে তবে:

dmidecode --string chassis-type

একটি ল্যাপটপে, এটি "ল্যাপটপ", "নোটবুক" "পোর্টেবল", বা "সাব নোটবুক" (উত্পাদক বিআইওএস-এ কী কোড করেছেন তার উপর নির্ভর করে) এর মধ্যে একটি ফেরত দেবে। উইন্ডোজ 2000 স্ক্রিপ্টিং গাইডে " কম্পিউটারের চ্যাসিস টাইপ সনাক্তকরণ " এ সম্ভাব্য মানগুলির একটি সম্পূর্ণ তালিকা রয়েছে - এটি একটি মাইক্রোসফ্ট টেকনেট পৃষ্ঠা হিসাবে উদ্বেগ করবেন না, এটি ওএস নির্দিষ্ট নয়।

dmidecode হার্ডওয়্যার প্রস্তুতকারক, সিস্টেম ক্রমিক সংখ্যা (কখনও কখনও) ইত্যাদি সম্পর্কিত তথ্যও পেতে পারে


নেটওয়ার্ক ইউপিএস সরঞ্জাম দিয়ে স্বয়ংক্রিয় শাটডাউন এবং ব্যাটারি পর্যবেক্ষণের জন্য আমার কাছে ইউপিএস নিয়ন্ত্রিত আছে । এটি ডেস্কটপে একটি "ব্যাটারি" হিসাবে প্রদর্শিত হয় না । আপনি কোন কনফিগারেশন ব্যবহার করছেন যার অধীনে একটি ইউপিএস উপস্থিত হয় /sys/module/battery?
1024

এটি / সিএস / মডিউল / ব্যাটারি পদ্ধতির চেয়ে আরও ভাল কাজ করে: আমার দুটি উবুন্টু 14.04 ডেস্কটপ যথাক্রমে "ডেস্কটপ" এবং "লো প্রোফাইল ডেস্কটপ" জবাব দেয় এবং সেন্টোস 6.5 সহ একটিতে "অজানা" বলা হয়েছে। CentOS 5.3 সহ যেটি "চ্যাসিস-টাইপ" শব্দটি চিনতে পারে না। আমি যে ল্যাপটপটি চেষ্টা করেছিলাম সেটি "নোটবুক" বলে। তবে এটি এমন একটি অসুবিধা যা আপনার রুট অ্যাক্সেসের প্রয়োজন।
টমাস প্যাড্রন-ম্যাকার্থি

আমি সত্যিই এই উত্তর পছন্দ!
লেম্বিক

বিতরণ স্বাধীনতার জন্য +1। আমি বেশ কয়েকটি মেশিনে এটি সফলভাবে পরীক্ষা করেছি। একমাত্র মেশিন, যার উপর dmidecode সাহায্যের চেয়ে কম কম উত্তর দিয়েছে, সেটি ছিল Aspire নেটবুক একটি চ্যাসিস ধরণের প্রত্যাবর্তন করেছিল Other
1024

এই উত্তরের জন্য সুডো প্রয়োজন, তাই .bashrcফাইলের মতো জিনিসগুলির পক্ষে কার্যকর নয় । /sys/class/dmi/id/chassis_typeকেবলমাত্র একটি একক সংখ্যা, এর বিষয়বস্তু অনুসন্ধান করা আরও ভাল (নীচের দিকে অন্য উত্তর হিসাবে উল্লেখ করা হয়েছে)।
xdavidliu

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
@ সিউডোপাইচে আমি এটি কেবলমাত্র ইউপিএসের সাথে একটি ডেস্কটপে পরীক্ষা করেছি এবং এটি মিথ্যা (ল্যাপটপ নয়) ফিরিয়েছে।
1024

1
প্রথম কমান্ড সেখানে কি করছে?
AndreKR

1
দৃশ্যত আমার 4U আইবিএম সার্ভারটি একটি এপিসি স্মার্টআপসের সাথে ইউএসবি-তে প্লাগ ইন রয়েছে ged আমি অবশ্যই সারা দিন আমার কোলে thing জিনিসটি চাইব না! (যেমন, যদি এটির কোনও ইউপি প্লাগ ইন থাকে এবং শাটডাউন / মনিটরিংয়ের জন্য কনফিগার করা থাকে তবে সেই ডিরেক্টরিটি উপস্থিত থাকবে)
অনুদান

1
@ চিপ্পিয়ারম্যান "কোনও ইউপিএস ওয়াল সকেট এবং কম্পিউটার পাওয়ার সকেটের মধ্যে যায় না?" হ্যাঁ, এবং অনেকগুলি ইউপিএস সেটআপস - গ্রাহক স্তর সহ - আপনাকে আপনার ডেস্কটপে ব্যাটারি সম্পর্কিত তথ্য এবং সতর্কতাগুলি পেতে একটি ইউএসবি কেবলটি হুকআপ করার অনুমতি দেয়।
জ্যাকগল্ড

8

কম্পিউটারে ব্যাটারি ইনস্টল আছে কিনা তা আমি পরীক্ষা করে দেখব। এবং নিম্নলিখিতটি পরীক্ষা করার একটি উপায়:

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

এই পদ্ধতিটি আমি এই পাঁচটি কম্পিউটারে সঠিক উত্তরটি দিয়েছি: উবুন্টু 14.04 সহ দুটি ডেস্কটপ, সেন্টোস 5.3 সহ একটি ডেস্কটপ, সেন্টোস 6.5 সহ একটি ডেস্কটপ এবং উবুন্টু 14.04 সহ একটি ল্যাপটপ। এছাড়াও, এটিতে রুট অ্যাক্সেসের প্রয়োজন নেই। উত্তরের তিনটি পদ্ধতির মধ্যে, আমার পরীক্ষাগুলি সূচিত করে যে এটি অস্থায়ীভাবে, সেরা হতে পারে।
টমাস প্যাড্রন-ম্যাকার্থি

এটি আমার পক্ষে কাজ করে।
লেম্বিক

এটি আমি পরীক্ষিত দুটি ডেবিয়ান ল্যাপটপে কাজ করে নি তবে বিভিন্ন গুরুত্বপূর্ণ বিতরণে কাজ করার জন্য +1 করে।
1024

আমার (তোশিবা নোটবুক) কাজ করে না, কারণ আমার ব্যাটারির নাম BAT1 রাখা হয়েছে। আমি জানি না সেখানে আরও কতগুলি সম্ভাব্য নাম থাকতে পারে।
জো

@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 সিল-কেস পিসি

টেবিলের জন্য উত্স? এবং 'লাঞ্চ বক্স' একটি রসিকতা ?!
ওজেফোর্ড

1
এই মুহূর্তে আমার কাছে উদ্ধৃতি নেই। 'লাঞ্চবাক্স' হিসাবে এটি একটি ফর্ম ফ্যাক্টরটিকে দেওয়া একটি ডাকনাম। আমি এর আগে কয়েকটি লাঞ্চবক্স এবং পিজ্জাবক্সের সাথে কাজ করেছি। এই লিঙ্কটি গত বছর, আপনি কিছু খুব আধুনিক lunchbox কম্পিউটারের দেখতে পারেন পারে theportablepc.com/portable-pc.html
অচপল

1
: গ্রান্ট এর উত্তর থেকে মাইক্রোসফট একটি তলব রয়েছে docs.microsoft.com/en-us/previous-versions/tn-archive/...
অচপল

ধন্যবাদ! এখন আমি একটি চাই ... তবে আমার সন্দেহ হয় যে আমার মানিব্যাগটি তা করে না।
ওজেফোর্ড

এটি ছিল একমাত্র সমাধান যা আমার জন্য সুডোর প্রয়োজন ছাড়াই কাজ করেছিল। ব্যাটারি-ভিত্তিক সমাধানগুলি বলেছিল যে আমার উবুন্টু ডেস্কটপ একটি ল্যাপটপ, বা বলেছিল আমার ডেবিয়ান ল্যাপটপ একটি ডেস্কটপ।
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
}

বছরের পর বছর ধরে এটি ডেবিয়ান ব্যবহার করে আসছে। দ্রষ্টব্য, ডাব্লিউএসএল বা ভার্চুয়ালবক্সে চলমান ডিবিয়ানদের জন্যও এটি কাজ করে।

সম্পাদনা করুন: আরও কেসগুলি ধরার জন্য এই থ্রেডের অন্যান্য উত্তর থেকে সাধারণীকরণ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.