임베디드 Linux에서 시작 시 Qt 애플리케이션 시작

임베디드 Linux에서 시작 시 Qt 애플리케이션 시작

부팅 후 즉시 Qt 애플리케이션을 시작하려고 합니다. 부팅되면 Linux 이미지는 X 서버와 터미널을 시작하는 것 외에는 아무 작업도 수행하지 않습니다. 또한 백그라운드에서 실행되는 cron 데몬도 있습니다. 분명히 내 Qt 애플리케이션에는 어떤 작업을 수행하려면 X 서버가 실행되어야 합니다.

나는 하나를 본 적이있다유제Red Hat 및 SUSE Linux에서 사용할 수 있습니다.

그러나 이것이 내 이미지에 도움이 될 것이라고 생각하지 않습니다.

Linux/UNIX에 X 서버 바로 다음에 GUI 응용 프로그램을 시작하는 표준 방법이 있는지 궁금합니다.


[sj755@localhost X11]$ tree /etc/X11/
/etc/X11/
|-- functions
|-- Xdefaults
|-- Xinit
|-- Xinit.d
|   |-- 01xrandr
|   |-- 11zaurus
|   |-- 12keymap
|   |-- 40xmodmap
|   |-- 50setdpi
|   |-- 55xScreenSaver
|   |-- 60xXDefaults
|   |-- 89xTs_Calibrate
|   `-- 98keymap-fixup
|-- xmodmap
|   |-- a716.xmodmap
|   |-- collie.xmodmap
|   |-- default.xmodmap
|   |-- h1910.xmodmap
|   |-- h2200.xmodmap
|   |-- h6300.xmodmap
|   |-- hx4700.xmodmap
|   |-- keyboardless.xmodmap
|   |-- omap5912osk.xmodmap
|   |-- poodle.xmodmap
|   |-- shepherd.xmodmap
|   |-- simpad.xmodmap
|   |-- slcXXXX.xmodmap
|   |-- xmodmap-invert
|   |-- xmodmap-left
|   |-- xmodmap-portrait
|   `-- xmodmap-right
|-- xorg.conf
|-- Xserver
|-- xserver-common
|-- Xsession
`-- Xsession.d
    |-- 60xXDefaults
    |-- 89xdgautostart
    `-- 90xXWindowManager

3 directories, 36 files

root@devboard:~# cat /etc/X11/Xsession.d/90xXWindowManager
if [ -x $HOME/.Xsession ]; then
    exec $HOME/.Xsession
elif [ -x /usr/bin/x-session-manager ]; then
    exec /usr/bin/x-session-manager
else
    exec /usr/bin/x-window-manager
fi

#!/bin/sh
#
# Very simple session manager for Mini X
#

# Uncomment below to enable parsing of debian menu entrys
# export MB_USE_DEB_MENUS=1 

if [ -e $HOME/.mini_x/session ]
then
exec $HOME/.mini_x/session
fi

if [ -e /etc/mini_x/session ]
then
exec /etc/mini_x/session
fi

MINI_X_SESSION_DIR=/etc/mini_x/session.d
if [ -d "$MINI_X_SESSION_DIR" ]; then
    # Execute session file on behalf of file owner
    find $MINI_X_SESSION_DIR -type f | while read SESSIONFILE; do
        set +e
        USERNAME=`stat -c %U $SESSIONFILE`
        # Using su rather than sudo as latest 1.8.1 cause failure [YOCTO #1211]
#       su -l -c '$SESSIONFILE&' $USERNAME
        sudo -b -i -u $USERNAME $SESSIONFILE&
        set -e
    done
fi

# This resolution is big enough for hob2's max window size.
xrandr -s 1024x768

# Default files to run if $HOME/.mini_x/session or /etc/mini_x/session
# don't exist. 

matchbox-terminal&
exec matchbox-window-manager

답변1

/etc/X11/xinit/xinitrc해당 파일의 출처를 확인하려면(다른 시스템의 다른 위치에 있을 수 있음) 살펴보세요 . 일반적으로 이는 if..elif..else 구조를 가지므로 하나의 초기화 파일만 읽혀지고 then이 $HOME/.Xclients우선 적용됩니다 /etc/X11/xinit/Xclients. 이것은 나타나는 터미널의 소스임이 거의 확실합니다(데스크탑 환경 등이 설치되어 있지 않다고 가정합니다).

어쨌든 단일 GUI 응용 프로그램을 실행하려면 다음과 같이 Xclients 파일을 생성(또는 수정)하십시오.

#!/bin/sh

myGUIapp

이는 실행 가능해야 합니다. 나는 이것이 거의 일반적인 쉘 스크립트라고 생각하므로 여기에 훨씬 더 많은 것을 포함할 수 있습니다. 물론 이 시점에서 실행을 차단하는 백그라운드 GUI 응용 프로그램은 없습니다.

[나중에 추가됨]

귀하의 설치에는 정확히 이러한 파일이 없지만 하나는 있습니다. /etc/X11/Xinit.d살펴보면 이것이 어딘가에서 온 짧은 쉘 스크립트일 것이라고 확신합니다. 아마도 /etc/X11-- Xsession또는 Xserver에 있는 파일 중 하나일 것입니다 xserver-common. $XINITRC그것이 단서가 될 수 있도록 환경에 정의되어 있는지 확인하고 싶을 수도 있습니다 .

가장 좋은 옵션은 아마도$HOME/.Xclients파일(또는 jofel이 언급했듯이$HOME/.xinitrc, 이것이 더 일반적일 수 있음) 시도해 보십시오. 앞에 점이 있는 철자와 대소문자가 정확히 일치하며 설정되어야 합니다 chmod 755(그룹 및 기타 권한가능한그것은 중요하지 않습니다). 이것은 거의 확실하게 올바른 곳에서 나올 것입니다.

파일을 직접 넣을 수 있지만 /etc/X11/Xinit.d파일이 마지막으로 실행되고 추가 실행을 차단해야 하기 때문에 이 목적으로 그렇게 하는 것은 좋은 생각이 아닙니다. 따라서 /etc/X11(다시 Xsession말하지만 접미사가 없습니다 ) 의 스크립트를 살펴보고 .sh어떤 순서로 서로 연결되어 있는지 알아내십시오. 그 중 하나가 Xclients다음과 같은 방법으로 파일을 확인할 수도 있습니다.

if [ -x /some/path/Xclients ]; then

$HOME및 를 사용할 수도 있습니다 .xinitrc. 그렇기 때문에 이러한 변형 중 하나 이상을 만드는 것이 작동해야 합니다(처음에 작동하지 않으면 파일에 쓰고 이동/이름 바꾸기). 요약하자면: 이름의 주요 후보는 .xinitrxand .Xclients, in 또는 이지만 $HOME후자 /etc/X11/인 경우 앞에 점을 삭제합니다.

답변2

첫째, "반드시 명백한 것은 아니다."내 Qt 애플리케이션에는 무엇이든 수행하려면 X 서버가 실행되어야 합니다." - linuxfb의 백엔드를 사용하여 Qt5 애플리케이션을 성공적으로 실행 했습니다 upstart. 이렇게 하면 X를 통해 시작하는 것보다 더 빠르게 시작하고 메모리 사용량을 줄일 수 있습니다. 반면에 X11 클라이언트 프로그램을 시작하거나 창 관리자이므로 모든 사람에게 적합하지는 않습니다.

nodm이제 애플리케이션에 X 서버가 필요하다고 가정하고 디스플레이 관리자를 살펴보세요 . 이것은 임베디드 애플리케이션용으로 설계되었습니다. 저는 MythTV 프런트엔드에 사용합니다. 이는 Intervention의 스크립트보다 훨씬 깔끔하고 /etc/X11/, 사용자마다 다른 설정을 지정할 수 있는 기능을 제공하므로 개발 중에 편리할 수 있습니다.

사용하기 매우 쉽습니다. 데비안 설치에서는 /etc/default/nodmnodm을 활성화하고 원하는 사용자 이름을 지정하기만 하면 됩니다. 다른 기본값은 괜찮을 수 있습니다.

그런 다음 해당 사용자에게 적합한 것을 제공하십시오 ~/.xinitrc. 가장 간단한 경우에는 이를 애플리케이션에 대한 심볼릭 링크로 만들 수 있습니다. 그러나 /bin/sh배경 설정, 키맵 설치, 화면 보호기 시작 및 이전에 마음에 들었던 기타 세부 정보를 포함하는 짧은 스크립트일 가능성이 더 높습니다 exec myapplication.

exec xterm팁 - 작업하는 동안 마지막 줄을 로 바꾸세요 . 이는 작업을 시도해 볼 때 유용합니다.

답변3

$HOME/.xinitrcX 서버를 시작하는 사용자의 디렉토리 에 명령을 추가할 수 있습니다 .

실행 가능한 셸 스크립트여야 합니다 $HOME/.xinitrc(첫 번째 줄 #!/bin/shchmod +x $HOME/.xinitrc).

관련 정보