কোনও ল্যাপটপ বা ডেস্কটপ কম্পিউটারে এটি চালিত হলে বাশ স্ক্রিপ্টের মধ্যে থেকে (প্রোগ্রামিকভাবে) নির্ধারণ করার কোনও নির্ভরযোগ্য উপায় আছে কি?
আমি স্পষ্টতই তাদের জিজ্ঞাসা করতে ব্যবহারকারীকে অনুরোধ করতে পারি, তবে এটি বেশ জঘন্য।
কোনও ল্যাপটপ বা ডেস্কটপ কম্পিউটারে এটি চালিত হলে বাশ স্ক্রিপ্টের মধ্যে থেকে (প্রোগ্রামিকভাবে) নির্ধারণ করার কোনও নির্ভরযোগ্য উপায় আছে কি?
আমি স্পষ্টতই তাদের জিজ্ঞাসা করতে ব্যবহারকারীকে অনুরোধ করতে পারি, তবে এটি বেশ জঘন্য।
উত্তর:
সিস্টেমের ব্যাটারি রয়েছে কি না তা দেখার জন্য নির্ভরযোগ্য নয় - সিস্টেমের সাথে যুক্ত একটি ইউপিএস (কেবল পাওয়ারের জন্য নয়, ইউএসবি-তে পাশাপাশি স্বয়ংক্রিয় শাটডাউন এবং ব্যাটারি পর্যবেক্ষণের জন্য) ব্যাটারি হিসাবে প্রদর্শিত হতে পারে।
একটি দুর্দান্ত নির্ভরযোগ্য উপায় আছে তবে:
dmidecode --string chassis-type
একটি ল্যাপটপে, এটি "ল্যাপটপ", "নোটবুক" "পোর্টেবল", বা "সাব নোটবুক" (উত্পাদক বিআইওএস-এ কী কোড করেছেন তার উপর নির্ভর করে) এর মধ্যে একটি ফেরত দেবে। উইন্ডোজ 2000 স্ক্রিপ্টিং গাইডে " কম্পিউটারের চ্যাসিস টাইপ সনাক্তকরণ " এ সম্ভাব্য মানগুলির একটি সম্পূর্ণ তালিকা রয়েছে - এটি একটি মাইক্রোসফ্ট টেকনেট পৃষ্ঠা হিসাবে উদ্বেগ করবেন না, এটি ওএস নির্দিষ্ট নয়।
dmidecode হার্ডওয়্যার প্রস্তুতকারক, সিস্টেম ক্রমিক সংখ্যা (কখনও কখনও) ইত্যাদি সম্পর্কিত তথ্যও পেতে পারে
/sys/module/battery
?
Other
।
.bashrc
ফাইলের মতো জিনিসগুলির পক্ষে কার্যকর নয় । /sys/class/dmi/id/chassis_type
কেবলমাত্র একটি একক সংখ্যা, এর বিষয়বস্তু অনুসন্ধান করা আরও ভাল (নীচের দিকে অন্য উত্তর হিসাবে উল্লেখ করা হয়েছে)।
ডেবিয়ান চালিত কোনও মেশিন ল্যাপটপ কিনা তা অনুসন্ধান করার জন্য, চেষ্টা করুন:
[ -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
ডিরেক্টরিটি বিদ্যমান ছিল না।
কম্পিউটারে ব্যাটারি ইনস্টল আছে কিনা তা আমি পরীক্ষা করে দেখব। এবং নিম্নলিখিতটি পরীক্ষা করার একটি উপায়:
if [ -d /proc/acpi/battery/BAT* ]; then
echo has a battery
fi
BAT0
করতে BAT*
- এটা সব বৈচিত্র সনাক্ত করা উচিত নয়।
সুডো ব্যবহার এড়াতে আপনি এর সামগ্রীগুলি পড়তে পারেন /sys/class/dmi/id/chassis_type
। এটি নিম্নলিখিত টেবিলের সাথে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে:
যদি ব্যাটারির অস্তিত্বের জন্য পরীক্ষা করা যথেষ্ট ভাল হয় তবে আপনি এই শেল ফাংশনটি ব্যবহার করতে পারেন:
# 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
}
বছরের পর বছর ধরে এটি ডেবিয়ান ব্যবহার করে আসছে। দ্রষ্টব্য, ডাব্লিউএসএল বা ভার্চুয়ালবক্সে চলমান ডিবিয়ানদের জন্যও এটি কাজ করে।
সম্পাদনা করুন: আরও কেসগুলি ধরার জন্য এই থ্রেডের অন্যান্য উত্তর থেকে সাধারণীকরণ।