Запуск приложения Qt при запуске для встроенной Linux

Я пытаюсь запустить приложение Qt сразу после загрузки. При загрузке образ Linux делает не что иное, как запуск X-сервера и терминала. Он также имеет демона cron, работающего в фоновом режиме. Очевидно, что моему приложению Qt нужен X-сервер для работы.

Я видел аналогичный вопрос для Red Hat и SUSE Linux.

Однако я не вижу, чтобы это работало для моего изображения.

Мне интересно, есть ли стандартный способ в Linux / UNIX, чтобы приложение GUI запускалось сразу после X-сервера.


[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 и #!/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 

3 Solutions collect form web for “Запуск приложения Qt при запуске для встроенной Linux”

Посмотрите /etc/X11/xinit/xinitrc (это могут быть разные места в разных системах), чтобы увидеть, какие файлы он использует. Как правило, это будет иметь структуру if..elif..else, так что будет считываться только один файл инициализации, $HOME/.Xclients приоритет $HOME/.Xclients /etc/X11/xinit/Xclients . Это почти наверняка, откуда появляется терминал (я полагаю, что у вас нет установленной рабочей среды или чего-то еще).

В любом случае, если вы просто хотите запустить одно графическое приложение, создайте (или измените) файл Xclients следующим образом:

 #!/bin/sh myGUIapp 

Это должно быть выполнено. Я считаю, что это обычный нормальный сценарий оболочки, поэтому у вас может быть больше вещей, хотя, очевидно, не с помощью графического интерфейса приложение будет блокировать выполнение в этой точке.

[позже дополнение]

У вашей установки нет именно этих файлов, но у нее есть /etc/X11/Xinit.d и если вы посмотрите, я уверен, что это короткие сценарии оболочки, и они получены откуда-то, возможно, один из файлов в /etc/X11Xsession , 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 . Вот почему нужно создать хотя бы один из этих вариантов (напишите файл и переместите его / переименуйте, если сначала вам не удастся). Подводя итог: .xinitrx кандидатами на имя: .xinitrx и .Xclients , либо в $HOME либо в /etc/X11/ , но если в дальнейшем выровняйте ведущую точку.

Вы можете добавить команду в $HOME/.xinitrc пользователя, который запускает X-сервер.

Необходимо быть исполняемым скриптом $HOME/.xinitrc (первая строка #!/bin/sh и chmod +x $HOME/.xinitrc ).

Во-первых, не обязательно очевидно, что « моему Qt-приложению нужен X-сервер для работы » – я успешно запускаю приложения linuxfb с помощью linuxfb от upstart . Если вы это сделаете, вы получите более быстрый запуск и более низкое использование памяти, чем переход через X. С другой стороны, вы можете захотеть, чтобы он запускал клиентские программы X11 или нужен оконный менеджер, поэтому это не для всех.

Предположим теперь, что вашему приложению нужен X-сервер, посмотрите на nodm отображения nodm . Это предназначено для встроенных приложений; Я использую его для внешнего интерфейса MythTV. Он намного чище, чем вмешиваться в скрипты в /etc/X11/ , и дает вам возможность иметь разные настройки для разных пользователей, что может быть полезно во время разработки.

Он довольно прост в использовании; на установке Debian, просто отредактируйте /etc/default/nodm чтобы включить nodm и указать требуемое имя пользователя. Другие значения по умолчанию, вероятно, все в порядке.

Затем дайте этому пользователю подходящий ~/.xinitrc – в простейшем случае вы можете сделать его символической ссылкой на ваше приложение. Но, скорее всего, это короткий /bin/sh сценарий, который, возможно, устанавливает фон, устанавливает exec myapplication , запускает скринсейвер и любые другие тонкости, которые вам exec myapplication прежде чем exec myapplication .

Подсказка – замените последнюю строку на exec xterm пока вы работаете над ней – это может быть очень полезно для тестирования.

  • PCLinuxOS - Не удалось запустить X-сервер
  • import: невозможно открыть X-сервер `@ ошибка / import.c / ImportImageCommand / 361
  • Как (или это возможно) Linux-сервер X-Server от терминала под именем SU otherusername
  • Как сделать screencap другим дисплеем Xorg?
  • Конфигурация для обнаружения уже запущенного xsession или только автозапуска в один раз
  • XServer: активные сеансы xserver в фоновом режиме
  • Зачем нужны драйверы как для x-сервера, так и для ядра Linux?
  • Возможность штампов времени в файле .xsession-errors?
  • Есть ли команда для отображения всех открытых дисплеев на машине?
  • pkg upgrade сломал X-сервер на FreeBSD ((II) NVIDIA (0): проверенные метамоды: «NULL»)
  • Что именно происходит, когда я набираю «startx» в командной строке?
  • Interesting Posts

    Стек TCP / IP в пользовательском контексте против ядра Linux

    Пользователь теста freeradius не работает Ошибка анализа (ответ) для теста входа: Ожидаемый конец строки или запятая

    Как вернуться к n уровням каталогов из командной строки?

    Найти файлы и каталоги, доступные для записи

    как заблокировать только определенное исходящее ip-соединение с iptables

    Сервер RAID-1 / LVM не загружается после отключения питания

    объявление переменной не работает

    Как найти все ссылки в каталоге

    Восклицательные знаки в аргументах команды bash

    Есть ли способ выполнить код в командной строке (PS1) без использования обратных ссылок?

    Есть ли способ предоставить «переопределения» для записи terminfo?

    Невозможно остановить скрипт bash с помощью Ctrl + C

    бег strace в течение определенного периода времени

    Не удается найти интерфейс беспроводной карты mwifiex_usb

    Что означает символ @ в именах файлов

    Linux и Unix - лучшая ОС в мире.