Jak ustawić tryb „kiosku” w Raspbian?

10

Chcę skonfigurować mój Raspberry Pi w trybie „kiosku”, w którym uruchamia się w jednej aplikacji na pełnym ekranie. Wiem, jak obchodzić się z linią poleceń, ale jestem nowicjuszem, jeśli chodzi o dostosowywanie rozruchu systemu Linux. Tworzę aplikację i planuję dodać możliwość bezpiecznego wyłączenia Raspberry Pi. Co muszę zrobić, aby skonfigurować Raspberry Pi do uruchamiania tylko tej jednej aplikacji?

Aktualizacja: Żeby było jasne, nie chcę otwierać strony internetowej . Nie chcę też zmieniać systemów operacyjnych. Chcę się dowiedzieć, jak skonfigurować system operacyjny (Raspbian), aby uruchamiał własną aplikację zamiast X (chociaż moja aplikacja może zależeć od renderowania X w tle).

Andrzej
źródło

Odpowiedzi:

7

Nigdy tego nie próbowałem, ale ponieważ wydaje się, że wciąż szukasz i nie otrzymałeś odpowiedzi od prawie miesiąca, powiem ci, od czego zacząć.

To instrukcje są starożytne, ale ogólny zarys wydaje się zdrowy. Nie musisz robić wszystkiego dokładnie tak samo. Koncentruje się na używaniu przeglądarki internetowej jako centralnego elementu, ale tutaj jest to w większości nieistotne (tj. Zrelaksuj się, to nie jest kolejny „kiosk internetowy”).

Odnosi się do /etc/inittab, z którego większość dystrybucji Linuksa już nie korzysta, ale tak się dzieje, że robi to debian wheezy (raspbian). Chodzi o to, że zamierzasz używać poziomu pracy 4 jako kiosku i ustawić go jako domyślny. Możesz to zrobić lub po prostu użyć dowolnego domyślnego ustawienia (2 lub 3, jak sądzę). Raspbian, który teraz uruchomiłem, został przeze mnie zmodyfikowany, więc nie jestem pewien, jakie były pierwotne różnice między /etc/rc[N].dkatalogami - które odpowiadają 7 poziomom działania. Chcesz albo użyć takiego, który nie uruchamia graficznego logowania ( lightdm), albo usunąć lightdmz tego poziomu pracy. Równie dobrze możesz to zrobić we właściwy sposób (patrz man update-rc.d).

Następnie, postępując zgodnie z tą częścią poradnika, chcesz utworzyć własny skrypt usługi rozruchowej (alias. Init) do uruchamiania X i aplikacji bez logowania. Nie rób tego jednak w ten sposób; musisz dostosować się do Debiana, więc zobacz /etc/init.d/README. Nie musisz też w ogóle używać menedżera okien (chociaż fvwmnadal jest świetny, szczególnie w przypadku tego rodzaju pomysłów, więc pamiętaj o tym, jeśli tak robisz), ponieważ .xinitrcpodobne:

#!/bin/sh

myApp

Uruchamia tylko twoją aplikację w zwykłym X - co jest bardzo bardzo proste: bez menu, bez pasków tytułowych, bez pasków narzędzi itp., Lub sposób na uruchomienie innej aplikacji lub uzyskanie powłoki. Po prostu zapewnia kursor.

Problem polega na tym, że jeśli przejdziesz od razu do pulpitu, będzie to pulpit superużytkownika. W rzeczywistości instancje X zawsze mają identyfikator UID równy 0, ale aplikacje działają z Xinitrc jako użytkownik, który uruchomił X - w tym przypadku X został uruchomiony przez init, więc użytkownik będzie rootem (chociaż technicznie root nie jest zalogowany ). Dlatego powyższy xinitrc byłby lepszy z:

su -c myApp pi

Które zamiast tego uruchomi Twoją aplikację jako użytkownik pi (który również nie jest zalogowany technicznie).

Ponieważ technicznie nikt nie jest zalogowany, nawet jeśli użytkownik kiosku zabije X (np. Via ctrl-alt-delete), pozostanie po wyświetleniu monitu o zalogowanie. Poradnik wykracza poza to, że skrypt inicjujący usługę rozpoczyna X na pierwszym planie (patrz UWAGA poniżej), więc po wyjściu skrypt usługi kontynuuje działanie shutdown -r now.

Pamiętaj, że ktoś, kto ma fizyczny dostęp do (normalnej) maszyny, zawsze może obejść wszelkie wprowadzone zabezpieczenia, więc wszystko, co naprawdę próbujesz tutaj zrobić, to nie uczynić tego zbyt łatwym i zapobiec nieprzyjemnym wypadkom.

Pamiętaj również, że ponieważ usługa rozruchowa będzie to robić na pierwszym planie, żadne inne usługi nie będą działać po niej , więc upewnij się, że jest to absolutna ostatnia. Bardzo ważne! Możesz użyć /etc/rc.localzamiast tego, ponieważ zwykle gwarantuje to, że będzie ostatni;) To pozwoli ci zaoszczędzić trochę czasu.

UWAGA: Właściwie w poradniku jest to kolejny skrypt /root/kioskz tej sekcji . Zauważ, że to tylko jedna linia, która odwołuje się do .xinitrcskryptu pokazanego w powyższej sekcji (3.4). Wystarczy wpisać taką linię bezpośrednio w skrypcie rozruchowym. Twój (wstępny) xinitrc, jak już opisano, będzie znacznie prostszy.


Alternatywa dla pozostawania na pierwszym planie z init ...

Celem pozostawienia wywołania X na pierwszym planie jest po prostu zablokowanie wykonywania skryptu init, dopóki X nie zakończy działania, aby następna linia w skrypcie ( shutdown) działała:

startx
shutdown -r now

Tutaj użyłem startxzamiast /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....wiersza poradnika. To wykorzysta $HOME/.xinitrc, a $ HOME będzie /root. Dość pewne, że startx jest również wywołaniem blokującym, więc dopóki X nie wyjdzie, shutdownnie uruchomi się. Jeśli zamiast tego zrobiłeś:

startx &
shutdown -r now

X działałby, ale wtedy również wyłączałby się natychmiast (oczywiście bez sensu).

Nie musisz używać tej sztuczki, jeśli nie przejmujesz się zamknięciem - jak wspomniano, użytkownik po prostu wyświetli monit o zalogowanie. Ale wydaje się to przydatnym pomysłem, ponieważ możesz go po prostu wyłączyć ctrl-alt-backspace. Innym pomysłem, jeśli twoją aplikację można zamknąć, byłoby użycie jej startx &w skrypcie inicjującym, który tworzy tło i pozwala inicjować normalne kontynuowanie (to dobrze; X nadal będzie działał i kontrolował wyświetlanie - „w tle” to może mylące określenie). Zamiast w skrypcie init wstaw shutdownxinitrc zamiast:

#!/bin/sh
#/root/.xinitrc

su -c myApp pi
shutdown -r now

Ta sama sztuczka, inne miejsce. Teraz, gdy ktoś się zamknie myApp, nastąpi zamknięcie (ale jeśli zabije X, nie nastąpi). Możesz to zrobić na dwa sposoby, ale tak naprawdę podoba mi się ten, ponieważ oznacza to, że możesz wyjść z X i uzyskać login, co może być czasem przydatne, a także możesz łatwo wyłączyć system z GUI.

Nie &włączaj myApp background ( ) w .xinitrc, nawet jeśli po tym nie nastąpi zamknięcie, ponieważ po zakończeniu .xinitrc X wychodzi;) Ostatnie wywołanie musi pozostać na pierwszym planie (zwykle jest to DE lub okno menedżer).

Skrypty inicjujące i .xinitrcsą podobnymi pojęciami. Jeden jest uruchamiany przez init, czyli proces 1 na Linuksie (jest to jedyny proces uruchamiany przez jądro). Drugi jest obsługiwany przez serwer X. Zauważ, że istnieją pliki .xinitrc i polecenie xinitrc (są powiązane, ale nie takie same).

Złotowłosa
źródło
Jeśli Raspbian używa, /etc/inittabale większość innych już go nie używa, to czego używają?
Andrew
Więc jeśli chcę zezwolić na dostęp ssh, gdy moja aplikacja jest uruchomiona na pierwszym planie, muszę upewnić się, że .xinitrcskrypt działa później, prawda?
Andrew
Debian używa systemu inicjującego „sysV” i inittabjest częścią tego wszystkiego. Bardziej powszechnymi demonami init są teraz systemdi upstart.
złotowłosy
WRT twoją aplikację działającą na pierwszym planie, po prostu dlatego, że (sysV) initczeka na powrót tych sciptów, zanim zacznie następną. Zwykle w skrypcie inicjującym, jeśli uruchamiasz usługę trwałą, uruchamiasz ją w tle (czyli rozwidleniu) &. Następnie sam skrypt kończy działanie, ale proces „w tle” trwa. „Tło” odnosi się tylko do łańcucha wykonawczego, a nie czegoś o tym, co pojawia się na ekranie - możesz w tle lightdmwywołać X ( musisz być w tle) ... Zmienię coś w tym temacie.
złotowłosy
WRT ssh, sshusługa (połączona /etc/rc[N].d) powinna uruchomić się przed twoją, aby działała („w tle”), aby odbierać połączenia. Wciąż jest to system wielozadaniowy;)
złotowłosy
2

Spójrz na ten projekt „Digital Signage”. Uruchamia się do GUI, a następnie otwiera przeglądarkę z obsługą HTML5. Jeszcze nie próbowałem, ale chcę. Może zamiast przeglądarki możesz uruchomić aplikację, aby uruchomić pełny ekran.

http://www.binaryemotions.com/raspberry-digital-signage/

gurcanozturk
źródło
Dziękuję za odpowiedź, ale wygląda to na zamiennik Raspbian skonfigurowanego do wyświetlania przeglądarki. Chciałbym nauczyć się, jak skonfigurować Raspbian tak, jak chcę.
Andrew
W twoim pytaniu nie ma wzmianki o Raspbian. Spróbuj tego. pikiosk.tumblr.com/post/38721623944/…
gurcanozturk
0

Wspomniany Raspberry Digital Signage to system operacyjny, który wyświetla widok pełnoekranowy ograniczony do strony internetowej lub określonej listy odtwarzania / pokazu slajdów / wideo bez możliwości ucieczki poza ponownym uruchomieniem komputera.

W rzeczywistości może wyświetlać zarówno widok internetowy (wyświetlanie stron HTML / HTML5), jak i widok multimedialny (pokaz slajdów i odtwarzacz wideo). Widok sieci ma trzy różne możliwe widoki cząstkowe: Firefox, Chromium i Midori (z obsługą Gnash).

Chrome i Midori są dostępne w wersji 2.0.

Emocje binarne
źródło