Raspbian Buster Lite가 설치된 Raspberry Pi가 있는데 자동 로그인을 사용하여 KIOSK 모드로 부팅합니다. 목적은 연결된 7인치 터치스크린(Chromium 포함)에 단일 웹 페이지를 표시하는 것입니다. 시스템이 유휴 상태이면 Python 스크립트가 이를 감지하고 자동으로 화면을 어둡게 해야 합니다. 사용자가 화면과 다시 상호 작용하면 조명이 켜집니다. 위로.
이것은 내 스크립트( dim_screen.py
)입니다.
#!/usr/bin/env python3 하위 프로세스 가져오기 수입시기 수입 시스템 rpi_backlight에서 백라이트 가져오기 백라이트 = 백라이트() # 실행 명령에서 매개변수를 읽습니다. # 어두워지기 전의 유휴 시간(초) 유휴TimeBeforeDimMS = int( sys.argv[1] )*1000 # 어두워졌을 때의 밝기(0에서 100 사이) 밝기 희미함 = int( sys.argv[2] ) 밝기 전체 = 100 데프 가져오기(cmd): # 그냥 도우미 함수 subprocess.check_output(cmd).decode("utf-8").strip() 반환 유휴0 = 거짓 상태변경=거짓 변화 시간 간격 S = 100 / 1000 관찰 그리고 사실: time.sleep( timeIntervalToWatchChangesS ) currentIdleTimeMS = int( get("xprintidle") ) isIdle = currentIdleTimeMS >idleTimeBeforeDimMS stateChanged = isIdle0 != isIdle isIdle 및 stateChanged인 경우: # 공회전 백라이트.밝기 = 밝기가 어두워짐 elif는 isIdle 및 stateChanged가 아닙니다. # 긍정적인 백라이트.밝기 = 밝기전체 # 현재 상태를 다음 루프의 초기 상태로 설정합니다. 유휴 0 = 유휴
내 스크립트는 SSH에서 부팅할 때 예상대로 작동합니다. (Windows 10 시스템의 Putty에서 Pi에 연결하여 테스트할 수 있습니다.)
pi@raspberrypi:~$ /usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25
systemctl start dim_screen.service
안타깝게도 systemd에서(또는 이를 통해) 시작할 때 스크립트를 서비스로 실행하려고 하면 그렇지 않습니다. 나는 그것을 작동시킬 수 없습니다.
이것은 내 희미한 화면.서비스 파일입니다:
[단위] Description=7인치 Raspberry Pi 화면이 사용자 상호 작용 없이 25분 후에 자동으로 10% 밝기로 어두워지도록 합니다. 이후=다중 사용자.대상 [제공하다] ExecStart=/usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25 [설치하다] WantedBy=다중 사용자.대상
재부팅하고 실행하면 sudo systemctl status dim_screen.service
다음과 같은 결과가 나타납니다.
나는 가장 중요한 디버깅 정보가 다음 줄이라고 생각합니다.Command 'xprintidle' returned non-zero exit status 1.
내 생각엔 이게 이상한 것 같은데? xprintidle
터미널에서 실행 하면 다음과 같은 일이 발생합니다.
pi@raspberrypi:~$ xprintidle 11399922
즉, 유효한 응답을 받았습니다 xprintidle
. 내가 이해하지 못하는 다른 것이 있다고 생각합니까?
dim_screen.py
Python script()를 서비스로 시작하는 올바른 방법은 무엇입니까?
답변1
이 기사는 원래 질문에 대한 답변이 아닙니다. 이것은 해결 방법입니다
xprintidle-returned-non-zero-exit-status-1의 이유를 이해할 수 없었기 때문에 해결 방법을 시도해야 했습니다.
키오스크 모드에서 크롬을 실행하도록 Pi를 설정할 때 이를 수행하는 방법에 대한 이 튜토리얼을 따랐습니다.RASPBERRY PI 터치 스크린 키오스크 설정 10단계. 이 튜토리얼에서는 Openbox 창 관리자를 구성하라는 지시를 받았습니다. Chromium 브라우저가 시작되기 전에 pythonscript를 분기 프로세스로 호출할 수 있습니다. 이 "솔루션"은 아마도 모범 사례의 모든 가능한 규칙을 위반하지만 내 문제는 해결되었습니다. 적어도 더 나은 방법을 찾을 때까지는요.
이 내 꺼야 /etc/xdg/openbox/autostart
:
# # 이러한 작업은 Openbox X 세션이 시작될 때 실행됩니다. # $HOME/.config/openbox/autostart에 유사한 스크립트를 배치할 수 있습니다. # 사용자별 작업을 실행합니다. # # GNOME 구성 도구를 사용하려면... # #if test -x /usr/lib/arm-linux-gnueabihf/gnome-settings-daemon >/dev/null; # /usr/lib/arm-linux-gnueabihf/gnome-settings-daemon & #elif which gnome-settings-daemon >/dev/null 2>&1;Then #gnome 세트 데몬& #fi # XFCE 구성 도구를 사용하려면... # #xfce-mcs-관리자& # 먼저 전원 관리, 화면 비우기, 화면 저장을 끄는 명령을 추가합니다. 우리는 키오스크에 이러한 기능이 포함되는 것을 원하지 않습니다. xset -dpms #디스플레이 전원 관리 시스템 끄기 xset s noblank # 화면 공백 끄기 xset s off #화면 보호기 끄기 # 다음으로 Chromium이 충돌하면 다음에 시작할 때 오류 메시지가 나타날 수 있습니다. 이것은 우리가 키오스크에서 원하지 않는 또 다른 기능입니다. # 경고를 유발할 수 있는 구성 파일에서 종료 오류를 제거합니다. sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'local status' sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"normal"/' ~/.config/chromium/ 기본값/기본 설정 # 사용자가 유휴 상태일 때 (유일한) 화면을 어둡게 하는 스크립트를 호출합니다. /usr/bin/python3 /home/pi/startup_scripts/dim_screen.py 10 25 & # 마지막으로 업데이트가 자동으로 시작되어 Chromium 브라우저를 키오스크 모드로 실행합니다. 실행할 웹 애플리케이션의 URL이 포함된 환경 변수($KIOSK_URL)를 전달합니다. # 키오스크 모드에서 Chromium을 실행합니다. chromium-browser --noerrdialogs --disable-infobars --kiosk --check-for-update-interval=31536000 $KIOSK_URL