मैंने कभी यह कोशिश नहीं की है, लेकिन जब से ऐसा लगता है कि आप अभी भी देख रहे हैं और लगभग एक महीने में जवाब नहीं मिला है, मैं आपको बताऊंगा कि मैं कहां से शुरू करूंगा।
यह कैसे- प्राचीन है, लेकिन सामान्य रूपरेखा ध्वनि लगती है। आपको सब कुछ ठीक वैसा ही करने की जरूरत नहीं है। यह वेब ब्राउज़र को सेंटरपीस के रूप में उपयोग करने पर ध्यान केंद्रित करता है, लेकिन यह ज्यादातर यहाँ अप्रासंगिक है (यानी, आराम करो, यह एक और "वेब-कियोस्क" नहीं है)।
यह संदर्भित करता है /etc/inittab
, जो कि अधिकांश लिनक्स डिस्ट्रोस अब उपयोग नहीं करते हैं, लेकिन ऐसा होता है कि डेबियन व्हीज़ी (रास्पियन) करता है। विचार यह है कि आप रनवे 4 को कियोस्क के रूप में उपयोग करने जा रहे हैं और इसे डिफ़ॉल्ट बनाते हैं। आप ऐसा कर सकते हैं या अभी जो भी डिफॉल्ट है (2 या 3, मुझे लगता है) का उपयोग करें। मेरे द्वारा अभी चलाए जा रहे रास्पबियन को मेरे द्वारा संशोधित किया गया है, इसलिए मुझे यकीन नहीं है कि /etc/rc[N].d
निर्देशिकाओं के बीच मूल अंतर क्या थे - जो 7 रनवे के अनुरूप हैं। आप या तो एक का उपयोग करना चाहते हैं जो ग्राफ़िकल लॉगिन शुरू नहीं करता है ( lightdm
) या फिर lightdm
उस रनवे से हटाने के लिए । आप उस तरह की चीज़ को सही तरीके से कर सकते हैं (देखें man update-rc.d
)।
फिर, हाउ -टू के इस हिस्से का अनुसरण करते हुए , आप एक्स और अपने ऐप को बिना लॉगिन के शुरू करने के लिए अपनी खुद की बूट सेवा (उर्फ इनिट) स्क्रिप्ट बनाना चाहते हैं। हालांकि, इसे इस तरह से मत करो; आपको डेबियन के अनुरूप होने की आवश्यकता है, इसलिए देखें /etc/init.d/README
। इसके अलावा, आपको किसी विंडो प्रबंधक का उपयोग करने की आवश्यकता नहीं है (हालांकि fvwm
अभी भी महान है, विशेष रूप से इस तरह की चीज़ों के लिए मेथिंक करता है, इसलिए इसे ध्यान में रखें यदि आप करते हैं), क्योंकि .xinitrc
यह इस तरह है:
#!/bin/sh
myApp
प्लेन X में सिर्फ आपका ऐप चलेगा - जो बहुत सादा है: कोई मेनू नहीं, कोई टाइटलबार नहीं, कोई टूलबार, आदि, या उपयोगकर्ता के लिए दूसरा एप्लिकेशन शुरू करने या शेल प्राप्त करने का तरीका नहीं। यह सिर्फ एक कर्सर प्रदान करता है।
इसके साथ एक समस्या यह है कि यदि आप बूट से सीधे डेस्कटॉप पर जाते हैं, तो यह एक सुपरयूज़र डेस्कटॉप होगा। असल में, X इंस्टेंस में हमेशा 0 का एक यूआईडी होता है, लेकिन एक्सिनिट्स्क से चलने वाले एप्लिकेशन उपयोगकर्ता के रूप में चलते हैं, जिन्होंने X शुरू किया - इस मामले में X को init द्वारा शुरू किया गया था, इसलिए उपयोगकर्ता रूट होगा (हालांकि तकनीकी रूप से रूट लॉग इन नहीं है )। इसलिए उपरोक्त xinitrc के साथ बेहतर होगा:
su -c myApp pi
जो आपके ऐप को pi उपयोगकर्ता के बजाय चलाएगा (जो तकनीकी रूप से भी लॉग इन नहीं है)।
चूंकि तकनीकी रूप से कोई भी व्यक्ति लॉग इन नहीं है, भले ही कियोस्क उपयोगकर्ता एक्स को मारता है (उदाहरण के लिए ctrl-alt-delete
) उन्हें बस एक लॉगिन प्रॉम्प्ट पर छोड़ दिया जाएगा। इस तरह से आगे कैसे जाना है कि सर्विस इनिट स्क्रिप्ट एक्स ( नीचे नोट देखें) अग्रभूमि में शुरू होती है ताकि जब यह बाहर निकल जाए, तो सेवा स्क्रिप्ट जारी रहे और चले shutdown -r now
।
याद रखें कि जिस व्यक्ति के पास (सामान्य) मशीन की भौतिक पहुंच होती है वह हमेशा आपके द्वारा लागू की जाने वाली सुरक्षा को दरकिनार कर सकता है, इसलिए आप जो वास्तव में यहां करने की कोशिश कर रहे हैं वह बहुत आसान नहीं है और बुरा दुर्घटनाओं को रोकने के लिए।
यह भी याद रखें कि चूंकि आपकी बूट सेवा अग्रभूमि में यह कर रही है , इसलिए इसके बाद कोई अन्य सेवाएं नहीं चलेंगी , इसलिए सुनिश्चित करें कि यह पूर्ण सेवा है। बहोत महत्वपूर्ण! आप वास्तव में, /etc/rc.local
इसके बजाय उपयोग कर सकते हैं, क्योंकि यह सामान्य रूप से अंतिम होने की गारंटी है;) जो आपको कुछ समय बचाएगा।
ध्यान दें: वास्तव में इस खंड/root/kiosk
से यह एक और स्क्रिप्ट में कैसे है । ध्यान दें कि .xinitrc
ऊपर लाइन (3.4) में दिखाई गई स्क्रिप्ट को संदर्भित करने वाली सिर्फ एक पंक्ति है । सीधे अपने बूट स्क्रिप्ट में इस तरह एक लाइन डाल दिया। आपका (प्रारंभिक) xinitrc, जैसा कि पहले ही वर्णित है, बहुत सरल होगा।
एक वैकल्पिक रहने के लिए init के साथ अग्रसर ...
X आमंत्रण को अग्रभूमि छोड़ने का उद्देश्य सिर्फ init स्क्रिप्ट के निष्पादन को तब तक रोकना है, जब तक X बाहर न निकल जाए, ताकि स्क्रिप्ट में अगली पंक्ति ( shutdown
) चलेगी:
startx
shutdown -r now
यहाँ मैंने startx
कैसे-कैसे /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
लाइन के बजाय उपयोग किया है । यह उपयोग करेगा $HOME/.xinitrc
, और $ HOME होगा /root
। बहुत यकीन है कि startx भी एक अवरुद्ध कॉल है, इसलिए जब तक एक्स बाहर shutdown
नहीं निकलता, तब तक नहीं चलेगा। यदि इसके बजाय आपने ऐसा किया:
startx &
shutdown -r now
एक्स चलेगा, लेकिन फिर शटडाउन भी चलेगा, तुरंत (स्पष्ट रूप से व्यर्थ)।
अगर आपको शटडाउन आने की परवाह नहीं है तो आपको उस ट्रिक का उपयोग नहीं करना होगा - जैसा कि उल्लेख किया गया है कि उपयोगकर्ता सिर्फ एक लॉगिन प्रॉम्प्ट के साथ समाप्त होगा। लेकिन यह एक उपयोगी विचार लगता है, तब से आप इसे बंद कर सकते हैं ctrl-alt-backspace
। एक अन्य विचार, यदि आपका ऐप क्लोजेबल है, तो इनिट startx &
स्क्रिप्ट का उपयोग करना होगा , जो इसे बैकग्राउंड करता है और इनइट को सामान्य रूप से जारी रखने की अनुमति देता है (यह ठीक है; एक्स अभी भी चालू रहेगा और डिस्प्ले का नियंत्रण होगा - "बैकग्राउंड्ड" एक है शायद एक उलझन भरा शब्द)। Init स्क्रिप्ट के shutdown
बजाय xinitrc में डालें:
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
एक ही चाल, अलग जगह। अब जब कोई myApp
बंद होगा, तो शटडाउन होगा (लेकिन अगर वे एक्स को मारते हैं, तो यह नहीं होगा)। आप इसे दोनों तरीकों से भी कर सकते हैं, लेकिन मुझे वास्तव में यह एक बेहतर लगता है क्योंकि इसका मतलब है कि आप एक्स से बाहर निकल सकते हैं और एक लॉगिन प्राप्त कर सकते हैं , जो कभी-कभी उपयोगी हो सकता है, और आप सिस्टम को जीयूआई से आसानी से बंद कर सकते हैं।
&
भले ही इसके बाद कोई शटडाउन न हो, लेकिन बैकग्राउंड ( ) myApp। प्रबंधक)।
इनिट स्क्रिप्ट और .xinitrc
समान अवधारणाएं हैं। एक द्वारा चलाया जाता है init
, जो कि लिनक्स पर प्रक्रिया 1 है (यह कर्नेल द्वारा शुरू की गई एकमात्र प्रक्रिया है)। अन्य एक्स सर्वर द्वारा चलाया जाता है। ध्यान दें कि .xinitrc फाइलें और xinitrc कमांड हैं (वे संबंधित हैं लेकिन समान नहीं हैं)।
/etc/inittab
लेकिन अधिकांश अन्य अब नहीं करते हैं, तो वे इसके बजाय क्या उपयोग करते हैं?