Weston/Wayland 합성기에서 systemd를 사용하여 부팅 시 Linux에서 그래픽 프로그램 열기

Weston/Wayland 합성기에서 systemd를 사용하여 부팅 시 Linux에서 그래픽 프로그램 열기

원하는 것:웨스턴 컴포지터에서 부팅 시 프로그램 열기

내가 시도한 것: 우선순위가 낮은 SysV init 스크립트 생성

작동하는 것: Weston이 시작되었지만 내 프로그램이 실행되지 않습니다.

안녕하세요 임베디드 환경에서 프로그램을 개발하고 있습니다. 이 프로그램은 Qt 기반이므로 장치가 부팅될 때 실행되고 싶습니다. 이 장치는 부팅할 때 로그인/데스크톱이 아닌 Weston 컴포지터로 바로 부팅된다는 점을 제외하면 Debian과 유사한 배포판을 사용합니다.

지금까지 내가 수행한 작업은 다음을 /etc/init.d사용하여 프로그램을 시작 start-stop-daemon하고 간단한 시작-중지 토글을 포함하는 표준 스크립트(아래 표시)를 생성한 것입니다. 그러나 수동으로 호출하면 작동하며 update-rc.d appService defaults부팅 시 프로그램이 시작되지 않는 결과를 사용합니다.

수동으로 서비스를 시작하려고 하면 자동으로 생성되는( systemctl start appService) XDG_RUNTIME_DIR 오류가 발생합니다. 무엇??? X가 왜 내 앞을 가로막고 있는 걸까요?

systemd가 자동 생성하는 .service 파일(아래 참조)을 조사하면 프로그램이 multi-user.target실행 수준에 도달하기 전에 실행하려고 합니다.

스크립트

#!/bin/sh

DIR="/home/root"
DAEMON=$DIR/appname
DAEMON_OPTS=""
DAEMON_NAME="APP"
PIDFILE=/var/run/$DAEMON_NAME.pid
DAEMON_USER="root"

case "$1" in
  start)
    echo "Starting $DAEMON_NAME"
    ifconfig eth1 192.168.1.233
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --exec $DAEMON -- $DAEMON_OPTS
    ;;
  stop)
    echo "Stopping $DAEMON_NAME"
    start-stop-daemon --stop --pidfile $PIDFILE --retry 10
    ;;
  *)
    echo "Usage: /etc/init.d/appService {start|stop}"
    exit 1
    ;;
esac

exit 0

서비스 파일:

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/appService
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=shutdown.target
Before=umountnfs.service
Before=rng-tools.service
Before=thermal-zone-init.service
Before=gdbserverproxy.service
After=dropbear.service
After=tiipclad-daemon.service
After=telnetd.service
After=rc.pvr.service
After=uim-sysfs.service
After=alignment.service
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/appService start
ExecStop=/etc/init.d/appService stop

서비스( systemctl start appService)를 수동으로 시작하려고 하면 XDG_RUNTIME_DIR 오류가 발생합니다. 무엇??? X가 왜 내 앞을 가로막고 있는 걸까요?

이 스크립트를 어떻게 수정할 수 있나요? 웨스턴 컴포지터가 출시된 후에 출시하고 싶습니다.

답변1

X11에서는 앱이 X11에서 제대로 시작되려면 일부 환경 변수를 설정해야 합니다. Weston에서 앱을 실행하려면 어떤 환경 변수를 설정해야 하는지 확인하셨나요?

내 경험상 데스크탑 환경의 "시작 앱" 기능을 사용하는 자동 시작 그래픽 앱에 대한 더 나은 선택은 systemd. 해당 디자인에는 적절한 환경 변수가 이미 설정되어 있습니다.

관련 정보