나는 이것을 시도한 적이 없지만, 당신이 여전히 찾고 있고 거의 한 달 안에 대답을 얻지 못한 것 같아서, 내가 어디에서 시작할 것인지 말할 것입니다.
이 방법 은 고대이지만 일반적인 개요는 건전 해 보입니다. 모든 것을 똑같이 할 필요는 없습니다. 웹 브라우저를 중심으로 사용하는 데 중점을 두지 만 여기서는 대부분 관련이 없습니다 (즉, 다른 "웹 키오스크"가 아닙니다).
그것은 /etc/inittab
대부분의 리눅스 배포판이 더 이상 사용하지 않는을 참조하지만 데비안 wheezy (raspbian)가 그렇게합니다. 아이디어는 런레벨 4를 키오스크로 사용하고 기본값으로 설정한다는 것입니다. 그렇게하거나 현재 기본값 (2 또는 3, 생각합니다)을 사용하십시오. 내가 지금 실행하고있는 라즈 비안은 나에 의해 수정되었으므로 /etc/rc[N].d
디렉토리 사이의 원래 차이점이 무엇인지 확실하지 않습니다 . 그래픽 로그인을 시작하지 않는 것을 사용 lightdm
하거나 ( ) lightdm
해당 런레벨에서 제거하려고합니다 . 그런 종류의 일을 바르게 할 수도 있습니다 (참조 man update-rc.d
).
그런 다음 사용법 의이 부분 에 따라 로그인없이 X 및 앱을 시작하기위한 고유 한 부트 서비스 (일명 init) 스크립트를 작성하려고합니다. 그러나 그렇게하지 마십시오. 데비안을 따라야합니다 /etc/init.d/README
. 또한 다음 과 같은 fvwm
이유로 창 관리자를 전혀 사용할 필요가 없습니다 ( 아직 훌륭 하지만 여전히 이런 종류의 일을하기 때문에 염두에 두십시오) .xinitrc
.
#!/bin/sh
myApp
메뉴, 제목 표시 줄, 도구 모음 없음 등 사용자가 다른 응용 프로그램을 시작하거나 셸을 얻는 방법 등 매우 평범한 응용 프로그램을 일반 X로 실행합니다. 커서 만 제공합니다.
이 문제는 부팅에서 데스크탑으로 바로 이동하면 수퍼 유저 데스크탑이됩니다. 실제로 X 인스턴스는 항상 0의 uid를 갖지만 xinitrc에서 실행되는 응용 프로그램은 X를 시작한 사용자로 실행됩니다.이 경우 X는 init에 의해 시작되었으므로 사용자는 root가됩니다 (기술적으로 root는 로그인하지 않았 음) ). 따라서 위의 xinitrc가 다음과 같이 더 좋습니다.
su -c myApp pi
대신 기술적으로 로그인하지 않은 pi 사용자로 앱을 실행합니다.
기술적으로 아무도 로그인하지 않았기 때문에 키오스크 사용자가 X를 죽이더라도 (예 :을 통해 ctrl-alt-delete
) 로그인 프롬프트가 표시됩니다. 이 방법은 서비스 초기화 스크립트가 포 그라운드에서 X (아래 참고 참조)를 시작 하여 종료 될 때 서비스 스크립트가 계속 실행되도록하는 방법을 넘어서고 shutdown -r now
있습니다.
(일반) 컴퓨터에 물리적으로 접근 할 수있는 사람은 항상 구현 한 보안을 우회 할 수 있으므로 여기서 실제로 시도하려는 모든 것은 너무 쉽게 만들지 않고 심한 사고를 방지하는 것입니다.
또한 부트 서비스가 포 그라운드에서이 작업을 수행하므로 다른 서비스는 그 이후에 실행되지 않으므로 절대 마지막 서비스 인지 확인하십시오. 매우 중요! 실제로 /etc/rc.local
는 마지막으로 보장되기 때문에 대신 대신 사용할 수 있습니다.) 시간을 절약 할 수 있습니다.
참고 : 실제로 방법 /root/kiosk
은 이 섹션 의 다른 스크립트 입니다. .xinitrc
위의 섹션 (3.4)에 표시된 스크립트 를 참조하는 한 줄입니다 . 부팅 스크립트에 이와 같은 줄을 직접 넣으십시오. 이미 설명한 바와 같이 (예비) xinitrc가 훨씬 간단합니다.
초기화로 포지셔닝 된 대안 ...
X 호출을 포 그라운드로 두는 목적은 X가 종료 될 때까지 init 스크립트의 실행을 차단하여 스크립트의 다음 행 ( shutdown
)이 실행되도록하는 것입니다.
startx
shutdown -r now
여기서는 사용 startx
방법 대신에 사용 했습니다 /usr/X11R6/bin/xinit /root/kiosk.xinitrc ....
. 이 사용 $HOME/.xinitrc
하고 $ HOME은입니다 /root
. startx도 차단 호출이므로 X가 종료 될 때까지 shutdown
실행되지 않습니다. 대신에 당신이 이것을했다 :
startx &
shutdown -r now
X는 실행되지만 종료도 즉시 실행됩니다 (분명히 무의미합니다).
셧다운에 신경 쓰지 않는다면 그 트릭을 사용할 필요가 없습니다. 언급했듯이 사용자는 로그인 프롬프트로 끝납니다. 그러나 유용한 아이디어처럼 보입니다. 이후로을 사용 중지 할 수 있습니다 ctrl-alt-backspace
. 또 다른 아이디어는 앱이 접근 가능하다면 startx &
init 스크립트에서 백그라운드를 사용하고 init가 정상적으로 계속되도록 허용하는 것입니다. 혼란스러운 용어). init 스크립트 shutdown
대신 xinitrc를 넣으십시오 .
#!/bin/sh
#/root/.xinitrc
su -c myApp pi
shutdown -r now
같은 속임수, 다른 장소. 이제 누군가가 닫으면 myApp
종료가 발생하지만 X를 죽이면 종료되지 않습니다. 두 가지 방법 모두 사용할 수 있지만 실제로 X 를 종료하고 로그인을 얻을 수 있다는 의미이기 때문에이 방법이 더 좋습니다. 때로는 유용 할 수 있으며 GUI에서 시스템을 쉽게 끌 수도 있습니다.
&
.xinitrc가 완료되면 X가 종료되기 때문에 셧다운이없는 경우에도 .xinitrc에 myApp를 백그라운드로 보내지 마십시오 ( ). 매니저).
초기화 스크립트 .xinitrc
는 비슷한 개념입니다. 하나는 init
리눅스에서 프로세스 1 인에 의해 실행됩니다 (커널이 시작한 유일한 프로세스입니다). 다른 하나는 X 서버에 의해 실행됩니다. .xinitrc 파일과 xinitrc 명령이 있습니다 (관련되어 있지만 동일하지는 않음).
/etc/inittab
하지만 다른 대부분은 더 이상 사용 하지 않으면 대신 무엇을 사용합니까?