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].d
katalogami - które odpowiadają 7 poziomom działania. Chcesz albo użyć takiego, który nie uruchamia graficznego logowania ( lightdm
), albo usunąć lightdm
z 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ż fvwm
nadal jest świetny, szczególnie w przypadku tego rodzaju pomysłów, więc pamiętaj o tym, jeśli tak robisz), ponieważ .xinitrc
podobne:
#!/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.local
zamiast 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/kiosk
z tej sekcji . Zauważ, że to tylko jedna linia, która odwołuje się do .xinitrc
skryptu 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 startx
zamiast /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, shutdown
nie 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 shutdown
xinitrc 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 .xinitrc
są 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).
/etc/inittab
ale większość innych już go nie używa, to czego używają?