자신의 파이썬 스크립트 (GUI)로만 부팅하는 방법?


12

다음과 같은 문제가 있습니다. Raspbian Jessie (버전 4.4.26-v7 +)를 실행하는 RaspPi 3B를 사용하여 시작시 자체 작성 Python 스크립트의 GUI를 실행하고 싶습니다.

이 질문은이 웹 사이트와 다른 웹 사이트에서 요청되었지만 Raspbian은 계속 변경되고 이전에 제안 된 솔루션 중 아무것도 제안하지 않았으므로 (아래 참조) 다시 질문하고 싶습니다.

이해 한 후에 XServer를로드하고 나중에 스크립트를 실행해야합니다. 전체 데스크톱을로드하는 대신이 문제가 발생합니다.

이를 달성하는 한 가지 방법은 LXDE 자동 시작 파일을 통하는 것입니다 ( 이 답변에 요약 되어 있음 ). 나는 파일 편집 /etc/xdg/lxsession/LXDE-pi/autostart뿐만 아니라 파일 /etc/xdg/lxsession/LXDE/autostart(참조 게시물에 제안 전자는 원래 네 줄 대신 세 포함) - 라인 추가를 @sudo python /full/path/to/file.py하고 @openbox,하지만 내 파이가 바탕 화면에 여전히 부팅되고 자동으로 모든에서 스크립트를 실행하지 않습니다. 주석 : 파일 중 하나와 두 파일 모두에 대해 스크립트 라인과 스크립트 라인을 openbox 라인과 함께 시도했습니다.

또 다른 전략은 공식 문서에서 제안한대로 rc.local 파일과 관련이 있습니다. 그러나 추가 python /full/path/to/file.py &는 작동하지 않았으며 (GUI가 여전히 누락되어 있기 때문에) startxstartx를 파이썬 스크립트와 연결할 수 없으므로 전자가 시작된 직후 닫혔으므로 추가 가 도움이되지 않았습니다.

어떤 사람들 (추가적으로) .xinitrc를 사용해야한다고 제안 합니다. 그러나 이것은 작동하지 않았습니다.

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

그리고 마지막으로, 어떤 식 으로든 init.d를 사용하여 수행 할 수 있어야합니다. 그러나 아직 이것에 대한 세부 사항을 찾지 못했습니다.

나는 올바른 방향으로 향하는 힌트를 정말로 고맙게 생각합니다. 내 실수는 어디입니까? rc.local 또는 .xinitrc의 줄은 어떻게 생겼습니까? 또는 픽셀 전환과 관련하여 주요 변경 사항이 있었으며 다른 것을 시도해야합니까?


몇 가지 추가 정보 : 스크립트에는 sudo 권한이 필요합니다. 파이썬 2.7로 작성되었으며 GUI는 Tkinter를 사용합니다. GUI는 화면을 완전히 채우므로 배경은 관련이 없습니다. 이 스크립트는 영구적으로 (또는 GUI를 통한 사용자 입력으로 중지 될 때까지) 실행되어야하며 wifi 및 이더넷과 같은 시스템 서비스를 사용합니다.


추가 정보 : 모두 로컬에서 발생합니다.


설명 : 지금까지 8 시간 이상 인터넷 검색, 다른 시작 지점에서 자습서를 시험해 보거나 서로 섞어 보았습니다. 데스크탑이 아닌 환경에서 실행되는 경우 (픽셀로 시작할 때 완벽하게 작동하는) 스크립트가 작동하지 않거나 2016 년 10 월 Raspbian으로 변경되기 때문에 새로운 자습서가 필요하다는 결론에 도달했습니다. 이전 튜토리얼은 더 이상 사용되지 않습니다. 또한, 스크립트를 시작하거나 Xserver (또는 이와 유사한 것)를 서로 독립적으로 시작하는 것이 아니라 스크립트가 Xserver에 의해 생성 된 디스플레이를 사용하도록 링크 된 두 가지를 수행하는 것이 과제입니다.


나는 그것이별로 도움이되지 않는다는 것을 인정하지만 XBMC (또는 다른 HTPC dicrtibution)가 어떻게 부팅되는지 볼 가치가 있습니까? 아니면, 이것은 당신의 질문에 대답 할 것입니다 raspberrypi.stackexchange.com/questions/11866/…
Petr

답변:


12

지난 한 달 동안 나는 기본적으로 똑같은 일을 해왔 으므로이 작업을 많이 수행하는 방법을 연구했으며 최신 버전의 Raspbian (PIXEL)으로 수행하는 방법을 알고 있습니다.

nodmLXDE 로딩을 우회하는 최소 디스플레이 관리자이며, openbox이미 Pi에 설치되어 있는 최소 디스플레이 관리자 는 X 세션에서 작동합니다.

Raspbian이 환경을 설정하려면, 설치 nodmapt-get파일 편집 /etc/default/nodm. 옵션 NODM_ENABLEDtrueand NODM_USERpi(또는 사용자 이름이 무엇이든) 설정해야합니다 .

그런 다음 홈 폴더 ( /home/pi/.xsession)에 다음 내용 으로 사용자 정의 Xsession 파일을 작성하십시오 ( while루프는 필요하지 않으며 충돌이 발생하면 Python 스크립트가 자동으로 다시 시작됩니다).

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

그리고 이것이 내가 생각하는 모든 것이어야합니다. 이것을 자동으로 설정하는 Bash 스크립트를 작성했습니다.

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

노트:

  • 나는이 링크가 도움이되었다고하지만, 일부 정보는 이제 구식이되어 https://blog.qruizelabs.com/2014/04/29/raspberrypi-kiosk-matchbox-uzbl/을 그들은 성냥갑 창 관리자를 사용하여 작업하지 않았다 여러 개의 창 지원이 필요했기 때문에 나에게 적합하지만 그렇지 않은 경우 좋은 옵션 일 수 있습니다.
  • 위의 솔루션은 효과가 있었지만 가능한 한 가벼운 환경을 원했기 때문에 GUI가없는 Raspbian Lite로 전환하고 처음부터 꼭 필요한 패키지 만 설치하기 시작했습니다. 과정은 매우 유사하지만,에 추가로 nodm설치해야하는 xserver-xorg, xinit, openbox, 그리고 스크립트가 다른 종속. 그런 다음 Xsession 파일에서 Python 스크립트를 실행하는 대신 Openbox를 사용하는 경우이를 실행하는 코드 부분을 별도의 스크립트 ( /home/pi/.config/openbox/autostart) 로 이동해야합니다 . 원하는 경우이 작업을 수행하는 방법에 대해 더 자세히 설명 할 수 있습니다.

안녕하세요 tjohnson, 위에서 설명한 방법을 Raspbian에서 사용하여 작동 시켰습니다. 감사합니다! 마지막 노트에서 언급 한 Raspbian Lite에서 작업을 시도하고 싶었습니다. 나열된 추가 종속성을 설치했지만 앱이 시작되지 않았습니다. 나는 그것을 별도의 스크립트로 옮기는 것에 대한 마지막 의견과 관련이 있다고 가정합니다. home / pi / .config / openbox 폴더가 없으므로 폴더와 자동 시작 파일을 만들었지 만 작동하지 않는 것 같습니다. 좀 더 자세히 설명해 주시겠습니까? 감사합니다
AngeloQ

@AngeloQ Raspbian Lite에서 작동하도록 했습니까?

1

자동 시작 파일은 여러 다른 위치에 있습니다. 올바른 경로에서 올바른 자동 시작 파일을 편집하기 만하면됩니다. 나는 편집을 시도했다 /home/pi/.config/lxsession/LXDE-pi/autostart. 그것은 마침내 나를 위해 속임수를 썼다.

/etc/xdg/lxsession/LXDE-pi/autostart 잘못된 길인 것 같습니다.


0

더러운 트릭 내가 과거에 RPI에 사용했습니다 내에서 명령을 넣어이었다 /etc/rc.local바로 전에 파일 exit 0라인. 귀하의 경우 다음 줄을 시도하고 재부팅합니다.

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

sudo 레벨 권한이 필요하다고 언급했듯이 su, pi사용자 가 실행하려고하는 것처럼 보이기 때문에 이전에 시도한 명령 을 대신 조정해야 할 수도 있습니다 .

rc.local 파일 사용에 대한 나의 제안에 대한 경고 중 하나는 스크립트가 0이 아닌 상태로 종료되면 부팅 중에 더 이상 안전하지 않도록 부팅을 완료하지 않으므로 다음을 시도하여 종료를 계속 0으로 유지할 수 있습니다

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

편집 및 업데이트

일부 검색 데이터를 살펴보면 파이썬 스크립트로드를 용이하게하기 위해 cron 탭에서 참조 된 시작 관리자 스크립트를 사용 하는 방법 을 보여주는 지시 가능 항목 을 찾았습니다 . 파이썬을로드하기 위해 sh / bash 스크립트를로드하기 위해 cron을로드하는 것처럼 보일지 모르지만 ... 비틀어 이해하기에 충분히 복잡합니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Ghanima

0

따라서 코드에 필요한 입력에 따라이 솔루션이 작동 할 수 있습니다.

내가 한 첫 번째 일은 내 디렉토리에 다음과 같은 스크립트를 만드는 것입니다.

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

로 실행할 수 있도록해야 chmod -x scriptName.sh합니다.

그런 다음 crontab -e터미널에서 수행 하고 추가하십시오.@reboot sudo bash /scriptName.sh

부팅 옵션을 CLI로 설정하십시오. 이것은 Raspbian을 실행하는 3B에서 작동했습니다.

한 가지주의 사항, 키오스크 / 스크린에 터치 스크린을 사용하는 경우 아직 파악하지 못했습니다. 마우스 입력에서는 잘 작동하지만 터치 입력은 적어도 사용하려고하는 화면에서는 사용할 수 없게됩니다.

참고 : 코드가 내 파일과 같은 파일 IO를 수행하는 경우 런처 스크립트에서 코드의 위치를 ​​탐색 하는 데 사용해야합니다 . 그렇지 않으면 cdPython은 해당 위치가 스크립트의 위치라고 가정하고 그에 따라 파일 IO를 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.