केवल पायथन लिपि (GUI) में बूट कैसे करें?


12

मुझे निम्नलिखित समस्या है: रास्पियन जेसी (संस्करण 4.4.26-v7 +) पर चलने वाले रास्पपी 3 बी का उपयोग करके मैं स्टार्टअप पर निष्पादित होने वाली एक स्व-लिखित अजगर स्क्रिप्ट के जीयूआई को पसंद करूंगा।

मुझे पता है कि यह सवाल इस वेबसाइट के साथ-साथ दूसरों पर भी पूछा गया है, लेकिन जैसा कि रास्पियन बदलता रहता है और मेरे लिए काम करने से पहले सुझाए गए समाधानों में से कोई भी (नीचे देखें), मैं फिर से पूछना चाहूंगा।

मेरी समझ से, मुझे XServer लोड करने और बाद में अपनी स्क्रिप्ट निष्पादित करने की आवश्यकता है। पूरे डेस्कटॉप को लोड करने के बजाय ऐसा होना चाहिए।

इसे प्राप्त करने का एक तरीका LXDE ऑटोस्टार्ट फ़ाइल ( इस उत्तर में उल्लिखित ) के माध्यम से माना जाता है । मैंने फ़ाइल के /etc/xdg/lxsession/LXDE-pi/autostartसाथ-साथ फ़ाइल को भी संपादित किया /etc/xdg/lxsession/LXDE/autostart(पूर्व में मूल रूप से तीन पंक्तियों के बजाय चार पंक्तियाँ थीं जैसा कि पोस्ट में सुझाया गया है) - पंक्तियों को जोड़ते हुए @sudo python /full/path/to/file.pyऔर @openbox, लेकिन मेरा पाई अभी भी डेस्कटॉप में बूट होता है और स्क्रिप्ट को स्वचालित रूप से निष्पादित नहीं करता है। नोट: मैंने केवल स्क्रिप्ट लाइन और स्क्रिप्ट लाइन को एक साथ या तो एक फाइल के लिए और दोनों फाइलों के लिए एक साथ खोलने की कोशिश की।

एक अन्य रणनीति में rc.local फ़ाइल शामिल है (जैसा कि आधिकारिक प्रलेखन में सुझाव दिया गया है )। हालाँकि, केवल जोड़ने से python /full/path/to/file.py &काम नहीं चला (क्योंकि अभी भी मेरा GUI गायब था) और आगे जोड़ने में startxमदद नहीं मिली क्योंकि मैं स्पष्ट रूप से अजगर स्क्रिप्ट के साथ startx को लिंक नहीं कर सका और पूर्व ने इसे शुरू होने के तुरंत बाद बंद कर दिया।

कुछ का सुझाव है , कि (इसके अतिरिक्त) .xinitrc का उपयोग किया जाना चाहिए। हालांकि, यह काम नहीं किया:

su -c python /full/path/to/file.py pi

और, अंतिम लेकिन कम से कम, किसी भी तरह से, यह init.d का उपयोग करने योग्य होना चाहिए - लेकिन मुझे इस पर अभी तक विवरण नहीं मिला है।

मैं वास्तव में सही दिशा की ओर किसी भी संकेत की सराहना करूंगा। मेरी गलती कहाँ है? Rc.local या .xinitrc में मेरी लाइन कैसी दिखनी चाहिए? या पिक्सेल में स्विच से संबंधित बड़े बदलाव हुए हैं और मुझे कुछ और करने की कोशिश करनी चाहिए?


कुछ अतिरिक्त जानकारी: स्क्रिप्ट को sudo अधिकारों की आवश्यकता है। यह पायथन 2.7 में लिखा गया है, जीयूआई टिंकर का उपयोग कर रहा है। जीयूआई स्क्रीन को पूरी तरह से भरता है, इसलिए पृष्ठभूमि अप्रासंगिक हैं। स्क्रिप्ट को हमेशा के लिए चलाने के लिए माना जाता है (या जब तक यह GUI के माध्यम से उपयोगकर्ता इनपुट द्वारा रोका नहीं जाता है) और वाईफाई और ईथरनेट जैसी सिस्टम सेवाओं का उपयोग करता है।


अधिक जानकारी: सभी स्थानीय रूप से हो रही है।


स्पष्टता: अब तक मैंने नेट की खोज में 8 घंटे से अधिक समय बिताए, विभिन्न प्रारंभिक बिंदुओं से ट्यूटोरियल आज़माया या उन्हें एक साथ मिलाया। मैं इस नतीजे पर पहुंचा, कि या तो मेरी स्क्रिप्ट (जो पिक्सेल में शुरू होने पर पूरी तरह से काम करती है) काम नहीं करती है, अगर वह नॉन-डेस्कटॉप वातावरण में चलती है (जिसमें मुझे संदेह है) या कि एक नए ट्यूटोरियल की जरूरत है, क्योंकि अक्टूबर 2016 में रास्पियन में बदलाव हुआ किसी भी पुराने ट्यूटोरियल को अप्रचलित कर दिया। इसके अलावा, चुनौती स्क्रिप्ट को शुरू करने या एक दूसरे से स्वतंत्र रूप से (या कुछ इसी तरह की) शुरू करने में नहीं है, लेकिन दोनों लिंक किए गए हैं ताकि स्क्रिप्ट एक्ससरवर द्वारा बनाए गए प्रदर्शन का उपयोग करेगी।


मैं मानता हूं कि यह ज्यादा मदद का नहीं है, लेकिन शायद यह देखने लायक है कि कैसे XBMC (या अन्य HTPC डाइक्रिब्यूशन) जूते? वैकल्पिक रूप से, शायद यह आपके प्रश्न का उत्तर देता है raspberrypi.stackexchange.com/questions/11866/…
पेट्र ग्लैडिक्ख

जवाबों:


12

पिछले एक महीने से या तो मैं मूल रूप से ठीक उसी चीज़ पर काम कर रहा हूं, इसलिए मैंने शोध किया है कि यह कैसे करना है और यह जान लें कि इसे कैसे करें।

nodmएक न्यूनतम प्रदर्शन प्रबंधक है जो LXDE लोडिंग को बायपास करता है, और openbox(जो पहले से ही पाई पर स्थापित है) एक न्यूनतम सत्र प्रबंधक प्रदान करता है और एक्स सर्वर के साथ काम करता है।

रास्पियन में इस वातावरण को स्थापित करने nodmके apt-getलिए, फ़ाइल को स्थापित और संपादित करें /etc/default/nodm। आप विकल्प को निर्धारित करने की आवश्यकता NODM_ENABLEDकरने के लिए trueऔर NODM_USERकरने के लिए pi(या जो भी अपने उपयोगकर्ता नाम है)।

फिर अपने होम फोल्डर में कस्टम Xsession फाइल बनाएं ( /home/pi/.xsession) निम्न सामग्री के साथ ( whileलूप आवश्यक नहीं है, यह स्वतः ही पायथन स्क्रिप्ट को पुनरारंभ करता है यदि यह क्रैश हो जाता है):

#!/usr/bin/env bash
exec openbox-session &
while true; do
  python3 /home/pi/Documents/script.py
done

और यह वह सब होना चाहिए जो मुझे लगता है कि आवश्यक है। मैंने इसे स्वचालित रूप से सेट करने के लिए एक बैश स्क्रिप्ट लिखी है:

sudo apt-get -y install nodm

# Edit nodm config file
sudo sed -i -e "s/NODM_ENABLED=false/NODM_ENABLED=true/" -e "s/NODM_USER=root/NODM_USER=pi/" \
  /etc/default/nodm

# Create custom Xsession file
printf "%s\n" \
  "#!/usr/bin/env bash" \
  "exec openbox-session &" \
  "while true; do" \
  "  python3 $PWD/main.py" \
  "done" \
  > /home/pi/.xsession

टिप्पणियाँ:

  • मुझे यह लिंक मददगार लगा, लेकिन अभी कुछ जानकारी पुरानी है: https://blog.qruizelabs.com/2014/04/29/raspberrypi-kiosk-matchbox-uzbl/ वे माचिस विंडो प्रबंधक का उपयोग करते हैं, जो काम नहीं करता था मेरे लिए क्योंकि मुझे कई विंडो सपोर्ट की आवश्यकता थी, लेकिन यदि आप नहीं करते हैं तो यह एक अच्छा विकल्प हो सकता है।
  • ऊपर दिए गए समाधान ने काम किया, लेकिन मैं जितना संभव हो उतना हल्का वातावरण चाहता था, इसलिए मैंने रास्पियन लाइट पर स्विच किया, जिसमें कोई जीयूआई नहीं है और केवल पैकेज स्थापित करने से खरोंच शुरू हुई जो बिल्कुल आवश्यक हैं। प्रक्रिया बहुत समान है, लेकिन करने के अलावा nodmआप स्थापित करने की आवश्यकता xserver-xorg, xinit, openbox, और किसी भी अन्य निर्भरता अपनी स्क्रिप्ट है। फिर यदि आप Xsession फ़ाइल में पायथन स्क्रिप्ट चलाने के बजाय, Openbox का उपयोग कर रहे हैं, तो कोड का भाग जो इसे चलाता है उसे एक अलग स्क्रिप्ट ( /home/pi/.config/openbox/autostart) में ले जाने की आवश्यकता है । मैं यह कैसे करना है पर अधिक विस्तार से बता सकता हूँ।

हाय tjohnson, मैंने आपके द्वारा रस्पियन पर ऊपर वर्णित विधि का उपयोग किया और इसे काम कर गया, धन्यवाद! मैं रास्पियन लाइट पर करने की कोशिश करना चाहता था, जिसका आपने अपने अंतिम नोट में भी उल्लेख किया है। मैंने आपके द्वारा सूचीबद्ध अतिरिक्त निर्भरताएं स्थापित कीं, लेकिन ऐप शुरू नहीं हुआ। मुझे लगता है कि यह आपकी पिछली टिप्पणी से संबंधित है कि इसे एक अलग स्क्रिप्ट में ले जाया जाए। मेरे पास घर / पीआई / .config / ओपनबॉक्स फ़ोल्डर नहीं है इसलिए मैंने इसे और ऑटोस्टार्ट फ़ाइल बनाई लेकिन यह काम नहीं करता है। क्या आप कृपया उस पर विस्तार कर सकते हैं? धन्यवाद
AngeloQ

@AngeloQ क्या आपको यह रास्पियन लाइट पर काम करने के लिए मिला?
पॉल

1

ऑटोस्टार्ट फ़ाइल कई अलग-अलग जगहों पर मौजूद है। यह सही रास्ते पर सही ऑटोस्टार्ट फ़ाइल को संपादित करने का मामला है। मैंने संपादन की कोशिश की /home/pi/.config/lxsession/LXDE-pi/autostart। आखिरकार मेरे लिए वह चाल चली गई।

/etc/xdg/lxsession/LXDE-pi/autostart गलत रास्ता लगता है।


0

पिछले दिनों आरपीआई पर मैंने जो गंदी चाल चली है, /etc/rc.localवह exit 0लाइन के ठीक पहले मेरी फाइल में कमांड डालने की थी। आपके मामले में मैं निम्नलिखित पंक्ति और रिबूट की कोशिश करूँगा।

python /full/path/to/file.py &

जैसा कि आपने कहा है कि sudo स्तर की अनुमतियों की आवश्यकता है, इसके बजाय suआपको पहले से कोशिश की गई कमांड को समायोजित करना पड़ सकता है क्योंकि अभी ऐसा लगता है कि आप piउपयोगकर्ता के नीचे चलने की कोशिश कर रहे हैं ।

यदि आप की स्क्रिप्ट गैर शून्य स्थिति के साथ बाहर निकलती है, तो आप अपने बूट को पूरा करने के सुझाव के बारे में एक चेतावनी देते हैं कि आप बूट को पूरा नहीं करेंगे ताकि परीक्षण के दौरान सुरक्षित रहें आप निम्न से बाहर निकलने की कोशिश कर सकते हैं।

python /full/path/to/file.py & || exit 0

संपादन और अद्यतन

हालांकि कुछ खोज आंकड़ों को देखते हुए, एक अनुदेशात्मक पाया गया जो एक अजगर स्क्रिप्ट का उपयोग करके प्रदर्शित करने वाली लिपि का उपयोग करता है जो कि पाइथन लिपियों को लोड करने की सुविधा प्रदान करता है। अजगर को लोड करने के लिए एक श / बश स्क्रिप्ट को लोड करने के लिए क्रोन को लोड करने के बारे में गोल लग सकता है लेकिन ... यह कुछ समझदार बनाने के लिए पर्याप्त रूप से जटिल है।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
Ghanima

0

तो आपके कोड को किस इनपुट के आधार पर समाधान की आवश्यकता हो सकती है।

मैंने जो पहली चीज़ की वह मेरी / डायरेक्टरी में एक स्क्रिप्ट बना रही थी जो इस प्रकार है:

#!/bin/bash
echo "Starting program..."
cd /home/pi/myFolder
sudo python3 myPython.py $@ #$@ takes all arguments and passes them to python.
exit 0

आपको इसके साथ चलना होगा chmod -x scriptName.sh

फिर crontab -eटर्मिनल में करें और जोड़ें@reboot sudo bash /scriptName.sh

अपने बूट विकल्प को CLI पर सेट करें और आपको जाने के लिए अच्छा होना चाहिए! इसने मेरे 3B रनिंग रास्पियन पर काम किया।

एक चेतावनी, यदि आप अपने कियोस्क / स्क्रीन के लिए एक टच स्क्रीन का उपयोग कर रहे हैं, तो मुझे अभी तक यह पता लगाना है। यह माउस इनपुट के साथ ठीक काम करेगा लेकिन टच इनपुट के लिए, कम से कम उस स्क्रीन के लिए जिसका मैं उपयोग करने की कोशिश कर रहा हूं, यह एक तरह से बंद हो जाएगा जो इसे अनुपयोगी बनाता है।

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

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