RPI 3b+, 데비안 스트레치
systemd를 통해 Qt 애플리케이션을 시작하고 싶습니다. 응용 프로그램은 X를 사용하며 디스플레이를 열어야 합니다.
MIT_MAGIC-COOKIE가 유효하지 않기 때문에 항상 실패합니다. 그러나 systemd는 (실패한 경우) 다시 시작하고 제대로 작동합니다. ("APES 디스플레이 응용 프로그램을 시작하는 것은 내 Qt 응용 프로그램입니다 - 내 grep은 "Light Display Manager"와 동일한 문제를 발견했습니다 - 처음에는 실패했지만 다시 시작한 후 성공했습니다)
pi@right-display:~ $ cat /var/log/syslog | pi@right-display:~ $ cat /var/log/syslog |
11월 16일 10:43:26 오른쪽 디스플레이 systemd[1]: 정지등 디스플레이 관리자...
11월 16일 10:43:40 오른쪽 디스플레이 systemd[1]: APES 디스플레이 애플리케이션 시작을 시작했습니다.
11월 16일 10:43:40 오른쪽 디스플레이 systemd[1]: 조명 디스플레이 관리자를 시작합니다...
11월 16일 10:43:41 오른쪽 모니터 x11vnc[653]: 16/11/2023 10:43:41 *** XOpenDisplay가 실패했습니다. 디스플레이 또는 디스플레이가 없습니다.
11월 16일 10:43:41 오른쪽 디스플레이 systemd[1]: Light Display Manager를 시작합니다.
11월 16일 10:43:42 오른쪽 표시 APES_Display[572]: QStandardPaths: XDG_RUNTIME_DIR이 설정되지 않고 기본값은 "/tmp/runtime-pi"입니다. 11월 16일 10:43:44 오른쪽 표시 APES_Display[572]: Invalid MIT -MAGIC - COOKIE-1 keyqt.qpa.screen: QXcbConnection: 디스플레이에 연결할 수 없습니다: 0 Nov 16 10:43:44 오른쪽 디스플레이 APES_Display[572]: X 디스플레이에 연결할 수 없습니다.
11월 16일 10:43:44 오른쪽 표시 systemd[1]: Display.service: 기본 프로세스가 종료되었습니다. 코드 = 종료됨, 상태 = 1/FAILURE
11월 16일 10:43:44 오른쪽 디스플레이 systemd[1]: Display.service: 장치가 실패 상태로 들어갔습니다.
11월 16일 10:43:44 오른쪽 디스플레이 systemd[1]: Display.service: "종료 코드"로 인해 실패했습니다.
Nov 16 10:43:45 오른쪽 모니터 x11vnc[653]: 16/11/2023 10:43:45 *** XOpenDisplay ":0"이 성공했습니다.
11월 16일 10:44:02 오른쪽 표시 systemd[1]: Display.service: 서비스 지연 시간이 만료되어 다시 시작될 예정입니다.
Nov 16 10:44:02 오른쪽 디스플레이 systemd[1]: APES 디스플레이 애플리케이션 시작이 중지되었습니다.
Nov 16 10:44:02 오른쪽 디스플레이 systemd[1]: APES 디스플레이 애플리케이션 시작을 시작했습니다.
11월 16일 10:44:02 오른쪽 표시 APES_Display[1307]: QStandardPaths: XDG_RUNTIME_DIR이 설정되지 않았으며 기본값은 '/tmp/runtime-pi'입니다.
그렇다면 내 앱이 디스플레이를 켜기 전에 실행해야 하는 서비스가 있나요? 또는 시작 시에만 필요한 것처럼 보이는 "마법 쿠키"를 만들어야 합니까(서비스를 수동으로 시작하면 항상 작동함)
그것이 무엇인지 어떻게 알 수 있나요?
답변1
가장 좋은 접근 방식은 작동 가능한 것으로 나타날 때까지 몇 초 동안 대기하고 서비스가 해당 타이머에 종속되도록 하는 시스템 타이머를 만드는 것입니다. OnBootSec=
사용해야 하는 타이머 옵션입니다. 우리가 볼 수 있듯이 첫 번째 실패는 LDM 시작과 LDM 시작 사이에서 발생합니다.