Yalnızca kendi python betiğine (GUI) nasıl önyükleme yapılır?


12

Aşağıdaki sorun var: Raspbian Jessie (sürüm 4.4.26-v7 +) çalıştıran bir RaspPi 3B kullanarak Başlangıçta kendi kendine yazılan bir python komut dosyası GUI istiyorum.

Bu sorunun bu web sitesinde ve başkalarında da sorulduğunu biliyorum, ancak Raspbian değişmeye devam ettiğinden ve daha önce önerilen çözümlerin hiçbiri benim için çalışmadı (aşağıya bakın), tekrar sormak istiyorum.

Anladığım kadarıyla, XServer'ı yüklemem ve daha sonra komut dosyamı yürütmem gerekiyor. Bu, masaüstünün tamamını yüklemek yerine gerçekleşmelidir.

Bunu başarmanın bir yolunun LXDE otomatik başlatma dosyası ( bu cevapta belirtildiği gibi ) olması gerekir. Ben dosya /etc/xdg/lxsession/LXDE-pi/autostartyanı sıra düzenledi /etc/xdg/lxsession/LXDE/autostart(eski başlangıçta referansta önerilen üç yerine dört satır içeriyordu) - satırları ekleyerek @sudo python /full/path/to/file.pyve @openbox, ama benim Pi hala masaüstüne önyükleme yapar ve hiç komut otomatik olarak yürütmez. Ek açıklama: Dosyalardan biri ve her iki dosya için birlikte sadece komut satırı ve komut satırı ile birlikte openbox satırı denedim.

Başka bir strateji rc.local dosyasını içerir ( resmi belgelerde önerildiği gibi ). Ancak, sadece ekleme python /full/path/to/file.py &işe yaramadı (hala benim GUI eksik olduğu gibi) ve startxgörünüşe göre startx'i python betiği ile bağlayamadığından ve bu nedenle başladıktan hemen sonra kapatıldığı için daha fazla ekleme yardımcı olmadı.

Bazıları (ek olarak) .xinitrc'nin kullanılmasını önermektedir . Ancak bu da işe yaramadı:

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

Ve son olarak, en azından, bir şekilde, init.d kullanılarak yapılabilir olmalıdır - ancak bununla ilgili henüz bir ayrıntı bulamadım.

Doğru yönde herhangi bir ipucu gerçekten takdir ediyorum. Benim hatam nerede? Rc.local veya .xinitrc'deki satırım nasıl olmalı? Ya da piksele geçişle ilgili büyük değişiklikler oldu ve başka bir şey denemeliyim?


Bazı ek bilgiler: Komut dosyasının sudo hakları gerekir. Python 2.7'de yazılmıştır, GUI Tkinter kullanmaktadır. GUI ekranı tamamen doldurur, böylece arka planlar önemsizdir. Komut dosyasının sonsuza kadar çalışması (veya GUI aracılığıyla kullanıcı girişi tarafından durdurulana kadar) ve wifi ve ethernet gibi sistem hizmetlerini kullanması gerekir.


Daha fazla bilgi: Her şey yerel olarak oluyor.


Açıklama: Şimdiye kadar internette arama yapmak, farklı başlangıç ​​noktalarından öğreticiler denemek veya bunları karıştırmak için 8 saatten fazla zaman harcadım. Ekim 2016 Raspbian olarak değiştiğinden, senaryomun (pikselde başlatıldığında mükemmel çalışan), masaüstü olmayan bir ortamda (şüphelendiğim) çalıştırıldığında veya yeni bir öğreticinin gerekli olduğu sonucuna vardım. eski dersleri geçersiz kıldı. Dahası, sorun betiğin başlatılmasında ya da Xserver'ın (ya da benzer bir şeyin) birbirinden bağımsız olarak başlatılmasında değil, betiğin Xserver tarafından oluşturulan görüntüyü kullanması için her ikisini de bağlı yapmasıdır.


Ben çok yardımcı olmadığını itiraf, ama belki nasıl XBMC (veya diğer HTPC dicrtibution) çizme nasıl bakmaya değer? Alternatif olarak, belki bu sorunuza cevap verecektir raspberrypi.stackexchange.com/questions/11866/…
Petr Gladkikh

Yanıtlar:


12

Geçtiğimiz ay boyunca temelde aynı şey üzerinde çalıştım, bu yüzden bunu nasıl yapacağımı araştırdım ve Raspbian'ın (PIXEL) en son sürümü ile nasıl yapacağımı biliyorum.

nodmLXDE yüklemesini atlayan minimal bir görüntüleme yöneticisidir ve openbox(zaten Pi'ye yüklenmiş olan) minimal bir oturum yöneticisi sağlar ve X sunucusuyla çalışır.

Raspbian bu ortamı kurmak için, yüklemek nodmile apt-getdosya ve düzenlemek /etc/default/nodm. Sen seçeneği ayarlamak gerekir NODM_ENABLEDetmek trueve NODM_USERkarşı pi(veya kullanıcı adınızın ne olursa olsun).

Ardından, ana klasörünüzde ( /home/pi/.xsession) aşağıdaki içeriklerle özel bir Xsession dosyası oluşturun ( whiledöngü gerekli değildir, çökerse otomatik olarak Python komut dosyasını yeniden başlatır):

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

ve bence gerekli olan her şey bu olmalı. Bunu otomatik olarak ayarlamak için bir Bash betiği yazdım:

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

Notlar:

  • Bu bağlantıyı yararlı buldum, ancak bazı bilgiler şimdi eski: https://blog.qruizelabs.com/2014/04/29/raspberrypi-kiosk-matchbox-uzbl/ Çalışmadıkları Matchbox pencere yöneticisini kullanıyorlar benim için birden fazla pencere desteğine ihtiyacım vardı, ancak istemiyorsanız iyi bir seçenek olabilir.
  • Yukarıdaki çözüm işe yaradı, ancak olabildiğince hafif bir ortam istedim, bu yüzden GUI'si olmayan Raspbian Lite'a geçtim ve sadece kesinlikle gerekli olan paketleri yükleyerek sıfırdan başladım. Süreç oldukça benzer, ancak ek olarak nodmyüklemeniz gerekir xserver-xorg, xinit, openbox, ve komut bulunduğu diğer bağımlılıklar. Sonra Openbox kullanıyorsanız, Xsession dosyasında Python komut dosyasını çalıştırmak yerine, kodu çalıştıran bölümün ayrı bir komut dosyasına ( /home/pi/.config/openbox/autostart) taşınması gerekir . İsterseniz bunun nasıl yapılacağı hakkında daha fazla ayrıntı verebilirim.

Merhaba tjohnson, yukarıda Raspbian'da tarif ettiğin yöntemi kullandım ve işe koyuldum, teşekkürler! Son notunuzda da bahsettiğiniz Raspbian Lite üzerinde çalışmayı denemek istedim. Listelediğiniz ekstra bağımlılıkları yükledim ancak uygulama başlamadı. Bunun ayrı bir senaryoya taşınmasıyla ilgili son yorumunuzla ilgili olduğunu düşünüyorum. Bir home / pi / .config / openbox klasörü yok, bu yüzden onu ve autostart dosyasını oluşturdum ama çalışmıyor gibi görünüyor. Bunu biraz açıklayabilir misiniz? Teşekkürler
AngeloQ

@AngeloQ Raspbian Lite üzerinde çalışmaya başladınız mı?
Paul

1

Otomatik başlatma dosyası birkaç farklı yerde bulunur. Bu sadece doğru otomatik başlatma dosyasını doğru yolda düzenleme meselesidir. Düzenlemeyi denedim /home/pi/.config/lxsession/LXDE-pi/autostart. Sonunda benim için hile yaptı.

/etc/xdg/lxsession/LXDE-pi/autostart yanlış yol gibi görünüyor.


0

Kirli hüner geçmişte RPI'nin kullandım benim komutları koymak oldu /etc/rc.localhemen önce dosyanın exit 0hattı. Senin durumunda ben aşağıdaki satırı denemek ve yeniden.

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

Sudo seviyesi izinlerinin gerekli olduğunu belirttiğiniz gibi, bunun yerine sudaha önce denediğiniz komutu değiştirmeniz gerekebilir, çünkü şu anda pikullanıcı altında çalışmaya çalıştığınız anlaşılıyor .

RC.local dosya kullanımı önerim hakkında bir uyarı, komut dosyanız sıfırdan farklı bir durumla çıkarsa, önyüklemeyi tamamlamazsınız, bu nedenle testler sırasında daha güvenli olması için çıkış hala eşittir 0

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

Düzenlemeler ve güncellemeler

Bazı arama verilerine bakıldığında, python komut dosyalarının yüklenmesini kolaylaştırmak için cron sekmesinde başvurulan bir başlatıcı komut dosyası kullandığını gösteren bir talimat bulundu . Python yüklemek için bir sh / bash betiği yüklemek için cron yüklemek üzere gibi görünebilir, ancak ... biraz bükülmüş mantıklı olacak kadar kıvrıktır.


Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
Ghanima

0

Kodunuzun hangi girdiye ihtiyacı olduğuna bağlı olarak bu çözüm işe yarayabilir.

Yaptığım ilk şey, / dizinimdeki gibi bir betik yapmaktı:

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

Bunu çalıştırılabilir yapmalısın chmod -x scriptName.sh.

Sonra crontab -eterminalde yapın ve ekleyin@reboot sudo bash /scriptName.sh

Önyükleme seçeneğinizi CLI olarak ayarlayın ve gitmek için iyi olmalısınız! Bu Raspbian çalışan benim 3B üzerinde çalıştı.

Bir uyarı, kioskunuz / ekranınız için bir dokunmatik ekran kullanıyorsanız, henüz anlayamadım. Fare girişi ile iyi çalışır, ancak dokunmatik girişe gelince, en azından kullanmaya çalıştığım ekran için, kullanılamaz hale getirecek şekilde kapalı olacaktır.

Not : Kodunuz benimki gibi dosya IO yapıyorsa , kodunuzun başlatıcı komut dosyanızdaki konumuna gitmek için kullanmanız gerekircd veya python, konumunun komut dosyanızın olduğunu varsayar ve buna göre dosya GÇ gerçekleştirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.