起動直後にQtアプリケーションを起動しようとしています。起動すると、LinuxイメージはXサーバーとターミナルを起動するだけです。また、バックグラウンドでcronデーモンが実行されています。明らかに、私のQtアプリケーションでは、Xサーバーを実行して何かを実行する必要があります。
Red HatとSUSE Linuxの 同様の質問 を見てきました。
しかし、私はこれが私の画像に対して機能するとは思わない。
Xサーバーの直後にGUIアプリケーションを起動する標準的な方法がLinux/UNIXにあるかどうか疑問に思っています。
[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
/etc/X11/xinit/xinitrc
(これはシステムによって場所が異なる場合があります)を調べて、どのファイルをソースにするかを確認してください。通常、これはif..Elif..else構造を持つため、$HOME/.Xclients
が優先され、/etc/X11/xinit/Xclients
が指定された初期化ファイルが1つだけ読み取られます。表示される端末の出所はほぼ確実です(デスクトップ環境がインストールされていないなどと思います)。
とにかく、単一のGUIアプリを実行するだけの場合は、次のようにXclientsファイルを作成(または変更)します。
#!/bin/sh
myGUIapp
これは実行可能でなければなりません。 GUIアプリをバックグラウンド化しないとその時点で実行がブロックされることは明らかですが、これは通常のシェルスクリプトだと思います。
[後で追加]
インストールにはこれらのファイルは正確にはありませんが、/etc/X11/Xinit.d
はあります。見れば、これらは短いシェルスクリプトであり、どこかからソースされていると思います。おそらく/etc/X11
-Xsession
、Xserver
、またはxserver-common
。環境で$XINITRC
が定義されているかどうかを確認する必要がある場合があります。それが手掛かりになります。
おそらく、$HOME/.Xclients
ファイルを作成する(または、jofelが言及しているように、$HOME/.xinitrc
のほうが一般的です)と試してみてください-まさにそのスペルと大文字小文字を区別します。先頭にドットを付け、chmod 755
を設定する必要があります(グループと他の権限mayは問題ではありません)。ほとんど間違いなく、これはどこかから適切に供給されます。
自分でファイルを/etc/X11/Xinit.d
に配置することはできますが、この目的のためにファイルを最後に実行し、それ以上の実行をブロックする必要があるため、これを行うことはお勧めできません。そのため、/etc/X11
のスクリプトを確認し(ここでもXsession
など、.sh
サフィックスがありません)、すべてがどの順序でチェーンされているかを調べてみてください。また、それらのどこかがXclients
ファイルをチェックしている可能性もあります。
if [ -x /some/path/Xclients ]; then
$HOME
と.xinitrc
も使用できます。これが、これらのバリエーションの少なくとも1つを作成することが機能する理由です(最初に成功しなかった場合は、ファイルを作成して移動/名前を変更してください)。要約すると、名前の主要候補:.xinitrx
または.Xclients
の$HOME
および/etc/X11/
ですが、後者の場合は、先頭のドットを破棄します。
Xサーバーを起動するユーザーの$HOME/.xinitrc
にコマンドを追加できます。
実行可能ファイル$HOME/.xinitrc
シェルスクリプトである必要があります(最初の行#!/bin/sh
およびchmod +x $HOME/.xinitrc
)。
第一に、「私のQtアプリケーションは何かを実行するためにXサーバーが実行されている必要があります "-linuxfb
バックエンドをupstart
。そうすることができれば、Xを経由するよりも起動が速くなり、メモリ使用量が少なくなります。一方、X11クライアントプログラムを起動したり、ウィンドウマネージャーが必要になったりして、誰もが使えるわけではありません。
今のところアプリケーションにXサーバーが必要であると仮定して、nodm
ディスプレイマネージャーを確認します。これは組み込みアプリケーション用に設計されています。 MythTVフロントエンドに使用します。 /etc/X11/
のスクリプトをいじるよりもはるかにクリーンで、ユーザーごとに異なる設定を行うことができます。これは、開発中に便利な場合があります。
使い方はとても簡単です。 Debianインストールでは、/etc/default/nodm
を編集してnodmを有効にし、必要なユーザー名を指定します。他のデフォルトはおそらく大丈夫です。
次に、そのユーザーに適切な~/.xinitrc
を指定します。最も単純なケースでは、アプリケーションへのシンボリックリンクにすることができます。ただし、背景を設定したり、キーマップをインストールしたり、スクリーンセーバーを起動したり、/bin/sh
の前に気に入るその他の便利な機能を備えた短いexec myapplication
スクリプトである可能性が高くなります。
ヒント-作業中に最後の行をexec xterm
に置き換えてください。これは、物事を試すのに非常に役立ちます。