Mam następujący problem: Używając RaspPi 3B z systemem Raspbian Jessie (wersja 4.4.26-v7 +) Chciałbym, aby GUI napisanego przez siebie skryptu pythonowego było uruchamiane podczas uruchamiania.
Wiem, że to pytanie zostało zadane na tej stronie, a także na innych, ale ponieważ Raspbian ciągle się zmienia i żadne z zaproponowanych wcześniej rozwiązań nie działało dla mnie (patrz poniżej), chciałbym je zadać ponownie.
Z mojego rozumienia muszę załadować XServer i wykonać skrypt później. Powinno to się zdarzyć zamiast ładowania całego pulpitu.
Jednym ze sposobów osiągnięcia tego jest użycie pliku autostartu LXDE (jak opisano w tej odpowiedzi ). Edytowałem zarówno plik, /etc/xdg/lxsession/LXDE-pi/autostart
jak i plik /etc/xdg/lxsession/LXDE/autostart
(poprzednio pierwotnie zawierały cztery wiersze zamiast trzech, jak sugerowano w cytowanym poście) - dodając wiersze @sudo python /full/path/to/file.py
i @openbox
, ale moje Pi nadal uruchamia się na pulpicie i w ogóle nie wykonuje skryptu. Adnotacja: wypróbowałem tylko wiersz skryptu i wiersz skryptu wraz z wierszem openbox dla jednego z plików i dla obu plików razem.
Inna strategia obejmuje plik rc.local (jak sugeruje oficjalna dokumentacja ). Jednak tylko dodawanie python /full/path/to/file.py &
nie działało (ponieważ nadal brakowało mojego GUI), a dalsze dodawanie startx
nie pomogło, ponieważ najwyraźniej nie mogłem połączyć startx ze skryptem Pythona, a zatem ten pierwszy został zamknięty natychmiast po uruchomieniu.
Niektórzy sugerują , że należy (dodatkowo) użyć xinitrc. To jednak nie zadziałało:
su -c python /full/path/to/file.py pi
I wreszcie, w jakiś sposób, powinno to być wykonalne przy użyciu init.d - ale jeszcze nie znalazłem szczegółów na ten temat.
Byłbym naprawdę wdzięczny za wszelkie wskazówki w dobrym kierunku. Gdzie jest mój błąd? Jak powinna wyglądać moja linia w rc.local lub .xinitrc? A może nastąpiły poważne zmiany związane z przejściem na piksel i powinienem spróbować czegoś innego?
Kilka dodatkowych informacji: skrypt wymaga uprawnień sudo. Jest napisany w Pythonie 2.7, GUI używa Tkintera. GUI wypełnia ekran całkowicie, więc tła nie mają znaczenia. Skrypt powinien działać wiecznie (lub dopóki nie zostanie zatrzymany przez użytkownika za pośrednictwem GUI) i korzysta z usług systemowych, takich jak Wi-Fi i Ethernet.
Więcej informacji: Wszystko dzieje się lokalnie.
Wyjaśnienie: Do tej pory spędziłem ponad 8 godzin na przeszukiwaniu sieci, testowaniu samouczków z różnych punktów początkowych lub mieszaniu ich razem. Doszedłem do wniosku, że albo mój skrypt (który działa idealnie po uruchomieniu w pikselach) nie działa, jeśli jest uruchamiany w środowisku innym niż stacjonarne (w co wątpię) lub że potrzebny jest nowy samouczek, ponieważ w październiku 2016 r. Zmieniono na Raspbian wszystkie starsze samouczki stały się przestarzałe. Co więcej, wyzwanie nie polega na uruchomieniu skryptu lub uruchomieniu Xserver (lub czegoś podobnego) niezależnie od siebie, ale na zrobieniu obu połączonych, aby skrypt używał ekranu stworzonego przez Xserver.