組み込み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構造を持っているため、1つの初期化ファイルのみが読み取られ、thenが優先され$HOME/.Xclientsます/etc/X11/xinit/Xclients。これは、表示される端末のソースであることがほぼ確実です(デスクトップ環境などがインストールされていないと仮定します)。

とにかく単一のGUIアプリケーションを実行するには、次のようにXclientsファイルを作成(または変更)します。

#!/bin/sh

myGUIapp

これは実行可能でなければなりません。私はこれがほぼ一般的なシェルスクリプトだと思うので、ここにはるかに多くを含めることができます。もちろん、この時点で実行をブロックするバックグラウンドGUIアプリケーションはありません。

[後で追加]

あなたのインストールにはまさにこれらのファイルはありませんが、1つはあります。/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どの順序で互いにリンクされているかを調べます。そのうちの1つは、Xclients次の方法でファイルを確認することもできます。

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

$HOMEとを使用することもできます.xinitrc。そのため、これらのバリエーションの1つ以上を作成することはうまくいくはずです(最初にうまくいかない場合は、ファイルに書き込んで移動/名前を変更する)。要約すると:名前の主な候補は、.xinitrxand .Xclients、in、または$HOME後者/etc/X11/の場合は前に点を削除します。

答え2

まず、「必ずしも明らかではない」。私のQtアプリケーションでは、何でも実行するためにXサーバーを実行する必要があります。「 -linuxfbのバックエンドを使用してQt5アプリケーションを正常に実行しましたupstart。ではありません。

nodmこれで、アプリケーションにXサーバーが必要だとし、ディスプレイマネージャを見てください。これは組み込みアプリケーション用に設計されています。私はMythTVのフロントエンドに使用します。これはInterventionのスクリプトよりはるかにきれいで/etc/X11/、ユーザーごとに異なる設定を指定できる機能を提供するため、開発中に便利です。

使いやすいです。 Debian インストールでは、/etc/default/nodmnodm を有効にして必要なユーザー名を指定するだけです。他のデフォルト値は大丈夫かもしれません。

次に、そのユーザーに適したものを提供してください~/.xinitrc。最も簡単な場合は、アプリケーションへのシンボリックリンクにすることができます。ただし、/bin/shバックグラウンド設定、キーマップのインストール、スクリーンセーバーの起動、以前に気に入ったその他の詳細を含む短いスクリプトである可能性が高くなりますexec myapplication

exec xtermヒント - 作業中に最後の行をに置き換えます。これは仕事を試してみるのに便利です。

答え3

$HOME/.xinitrcXサーバーを起動しているユーザーのディレクトリにコマンドを追加できます。

実行可能なシェルスクリプトでなければなりません$HOME/.xinitrc(最初の行#!/bin/shchmod +x $HOME/.xinitrc)。

関連情報