लिनक्स लॉगिन प्रॉम्प्ट की आंतरिक कार्यप्रणाली

परिचय एवं पृष्ठभूमि

जब भी कोई लिनक्स सिस्टम बूट होता है, तो स्क्रीन पर सबसे पहले दिखाई देने वाला ’login:’ इंटरफ़ेस वस्तुतः बैकग्राउंड में चल रहे agetty डेमन का परिणाम होता है। जटिल मैन्युअल दस्तावेज़ों में उलझने के बजाय, इस गाइड में हम agetty की बुनियादी वास्तुकला, systemd के साथ इसका तालमेल, /etc/issue के उपयोग से कस्टमाइज़्ड लॉगिन बैनर तैयार करने और स्वतः लॉगिन (auto-login) जैसी उपयोगी व्यवस्थाओं को व्यावहारिक स्तर पर लागू करना सीखेंगे।

agetty की बुनियादी वास्तुकला और systemd सर्विस की जांच

सबसे पहले यह पुष्टि करते हैं कि हमारे ऑपरेटिंग सिस्टम में agetty बाइनरी किस डायरेक्टरी में स्थापित है। इसके लिए which agetty कमांड निष्पादित करेंगे।

agetty बाइनरी की डायरेक्टरी पाथ

सिस्टम आर्किटेक्चर के दृष्टिकोण से, agetty वर्चुअल टर्मिनल या सीरियल इंटरफ़ेस को सक्रिय करता है, टर्मिनल पैरामीटर्स सेट करता है और यूज़र ऑथेंटिकेशन के लिए लॉगिन प्रॉम्प्ट प्रस्तुत करता है। इसके संस्करण और समर्थित फीचर्स की समीक्षा करने के लिए सहायता विकल्प देखा जा सकता है।
⚙️ [महत्वपूर्ण कमांड-लाइन ऑप्शन्स]

-a, --autologin : क्रेडेंशियल दर्ज किए बिना सीधे निर्धारित यूज़र अकाउंट में सेशन शुरू करने की सुविधा देता है।
-J, --noclear : लॉगिन स्क्रीन आने पर टर्मिनल स्क्रीन को वाइप किए बिना पुराने बूट लॉग्स को स्क्रीन पर बनाए रखता है।
-f, --issue-file : लॉगिन प्रॉम्प्ट से ठीक पहले स्क्रीन पर प्रदर्शित होने वाली सूचना फ़ाइल (issue) का वैकल्पिक पाथ सेट करता है।
-o, --login-options : ऑथेंटिकेशन हैंडल करने वाले निचले स्तर के login यूटिलिटी को अतिरिक्त आर्गुमेंट्स भेजने के लिए काम आता है।
-n, --skip-login : यूज़रनेम इनपुट की प्रतीक्षा किए बिना सीधे प्रमाणीकरण के अगले चरण को ट्रिगर करता है।
-8, --8bits : टर्मिनल को 8-बिट कैरेक्टर डेटा प्रोसेस करने के अनुकूल बनाता है।

agetty संस्करण और सहायता विकल्प

पहले वर्चुअल कंसोल (tty1) के लिए जिम्मेदार systemd इंस्टेंस की वर्तमान स्थिति जांचने के उद्देश्य से systemctl status getty@tty1.service --no-pager रन किया जाता है।
इस आउटपुट से स्पष्ट होता है कि बैकग्राउंड में agetty एक्टिव स्टेट में सक्रिय है और यूज़र इनपुट की प्रतीक्षा कर रहा है।

systemctl status getty@tty1.service स्थिति

/etc/issue के जरिए कंसोल के लिए कस्टम वेलकम बैनर तैयार करना

डिफ़ॉल्ट रूप से कंसोल पर दिखने वाले वेलकम मैसेज को देखने के लिए हम cat /etc/issue चलाकर मौजूदा फ़ाइल का विश्लेषण करते हैं।
इस फ़ाइल में प्रयुक्त \n टोकन सिस्टम के होस्टनेम का प्रतिनिधित्व करता है, जबकि \l एक्टिव टर्मिनल लाइन (tty) संख्या को डायनेमिकली प्रिंट करने वाला agetty एस्केप कोड है।

मूल /etc/issue फ़ाइल सामग्री

कॉन्फ़िगरेशन में कोई भी नया बदलाव करने से पहले मूल फ़ाइल को सुरक्षित रखना आवश्यक है। इसलिए sudo cp /etc/issue /etc/issue.bak चलाकर बैकअप कॉपी बना लेते हैं।

/etc/issue का बैकअप तैयार करना

अब टर्मिनल नंबर और ओएस डिटेल्स को आकर्षक ढंग से प्रस्तुत करने हेतु एक नया टेम्पलेट तैयार करते हैं: echo -e '\n=== Welcome to Ubuntu Server (tty: \l) ===\nOS: \s \r (\m) | Time: \t\n' | sudo tee /tmp/custom_issue।
इस स्ट्रिंग में कंसोल पहचानकर्ता (\l), ऑपरेटिंग सिस्टम का नाम (\s), कर्नेल रिलीज (\r), आर्किटेक्चर टाइप (\m) तथा मौजूदा टाइमस्टैम्प (\t) जैसे विशेष मैक्रोज़ शामिल हैं।

कस्टम इशू बैनर का निर्माण

तैयार किए गए टेम्पलेट की सिंटैक्स सटीकता जांचने के लिए cat /tmp/custom_issue के जरिए फ़ाइल की सामग्री को कंसोल पर दोबारा प्रिंट करके देखते हैं।

कस्टम बैनर फ़ाइल का सत्यापन

agetty के प्रमुख पैरामीटर्स और systemd ड्रॉप-इन ओवरराइड का व्यावहारिक उपयोग

tty1 के लिए काम करने वाली मूल सर्विस परिभाषा को समझने के लिए systemctl cat getty@tty1.service कमांड निष्पादित की जाती है।
इससे हमें /usr/lib/systemd/system/getty@.service टेम्पलेट के अंदर कॉन्फ़िगर किए गए मानक निष्पादन पर्यावरण और ExecStart लाइन की संरचना दिखाई देती है।

getty@tty1 सर्विस की मूल यूनिट फ़ाइल

पैकेज द्वारा दी गई कोर फ़ाइलों को सीधे संशोधित करने के जोखिम से बचने के लिए, ड्रॉप-इन डायरेक्टरी पद्धति अपनाना सबसे सुरक्षित है। इसके लिए sudo mkdir -p /etc/systemd/system/getty@tty1.service.d डायरेक्टरी बनाते हैं।

ड्रॉप-इन डायरेक्टरी तैयार करना

बूट स्क्रीन को साफ होने से रोकने के लिए --noclear फ्लैग और नई बॉड रेट सेटिंग्स जोड़ने हेतु echo -e '[Service]\nExecStart=\nExecStart=-/sbin/agetty -o "-p -- \\u" --noclear -s %I 115200,38400,9600 vt220' | sudo tee /etc/systemd/system/getty@tty1.service.d/noclear.conf रन करते हैं।
यहाँ पहले खाली ExecStart= देकर मूल कमांड को रीसेट किया जाता है और उसके तुरंत बाद हमारे कस्टमाइज़्ड ऑप्शन्स के साथ नई agetty कमांड परिभाषित की जाती है।

noclear.conf ओवरराइड कॉन्फ़िगरेशन लिखना

नए ड्रॉप-इन कॉन्फ़िगरेशन को systemd इंजन में लोड करने के लिए systemctl daemon-reload चलाना अनिवार्य है।

systemd डेमन पुनः लोड

हमारे ओवरराइड नियम यूनिट में सफलतापूर्वक मर्ज हुए हैं या नहीं, यह सत्यापित करने के लिए पुनः systemctl cat getty@tty1.service चलाते हैं।
परिणाम के निचले हिस्से में noclear.conf का जुड़ना यह सिद्ध करता है कि कॉन्फ़िगरेशन सही ढंग से प्रभावी हो चुका है।

लागू किए गए ओवरराइड का सत्यापन

सीरियल कंसोल और एक्टिव TTY सेशन्स की निगरानी करना

वर्तमान परिवेश में कौन-कौन से कंसोल इंस्टेंसेस सक्रिय रूप से कार्य कर रहे हैं, इसकी पड़ताल systemctl list-units --type=service 'getty@*' --no-pager के माध्यम से की जा सकती है।
इससे यह स्पष्ट होता है कि tty1 इंटरफ़ेस को संभालने वाला getty@tty1.service पूरी तरह सुचारू अवस्था में चल रहा है।

सक्रिय getty सर्विस यूनिट्स की सूची

क्लाउड एनवायरनमेंट, वीएम या एम्बेडेड हार्डवेयर में इस्तेमाल होने वाले सीरियल इंटरफ़ेस से जुड़े यूनिट फाइलों का स्टेटस देखने के लिए systemctl list-unit-files 'serial-getty*' --no-pager का उपयोग किया जाता है।
यहाँ हम देख सकते हैं कि serial-getty@.service टेम्प्लेट सिस्टम पर मौजूद तो है, किंतु वर्तमान में निष्क्रिय (disabled) अवस्था में है।

serial-getty यूनिट फ़ाइल स्थिति

सिस्टम में इस वक्त लॉगिन किए हुए यूज़र्स और उनके संबंधित टर्मिनल्स (TTY) की पूरी जानकारी प्राप्त करने के लिए w कमांड अत्यंत उपयोगी है।
इसके आउटपुट से न केवल लॉगिन सत्र और उनके TTY असाइनमेंट का पता चलता है, बल्कि अपटाइम और सिस्टम लोड एवरेज की तत्काल स्थिति भी सामने आ जाती है।

w कमांड द्वारा सक्रिय सत्र विवरण

इस प्रकार हमने लिनक्स वर्चुअल कंसोल के आधारभूत घटक agetty के कार्यप्रणाली तंत्र से लेकर systemd ओवरराइड्स और लॉगिन कस्टमाइज़ेशन तक के प्रमुख चरणों का व्यावहारिक अभ्यास पूरा किया। कंसोल स्तर के इन कॉन्फ़िगरेशन्स पर पकड़ लिनक्स बूट प्रोसेस और टर्मिनल मैनेजमेंट को गहराई से समझने में बेहद मददगार साबित होती है।