Запуск программ при старте ОС

Автор Zlobny_prapor, 18 июня 2018, 17:42:50

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Zlobny_prapor

Доброго времени суток всем форумчанам! Посетила меня следующая проблема. Мне необходимо запускать приложение с графической оболочкой при старте ОС. Весь день гуглил, получил следующее. В папке /etc/init.d создал скрипт test.sh который должен запускать файл test.run. Код скрипта:
[offtopic][offtopic]
#! /bin/sh
### BEGIN INIT INFO
# Provides:          test.run
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO


#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.

# Do NOT "set -e"


PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Install Qt creator"
NAME=test.run
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="start"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/test.sh

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions



do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started #--quiet --pidfile --exec --test > /dev/null \
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON  --test > /dev/null \
      || return 1
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
      $DAEMON_ARGS \
      || return 2
   # Add code here, if necessary, that waits for the process to be ready
   # to handle requests from services started subsequently which depend
   # on this one.  As a last resort, sleep for some time.
}


#
# Function that stops the daemon/service
#
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   # Wait for children to finish too if this is a daemon that forks
   # and if the daemon is only ever run from this initscript.
   # If the above conditions are not satisfied then add some other code
   # that waits for the process to drop all resources that could be
   # needed by services started subsequently.  A last resort is to
   # sleep for some time.
   start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
   [ "$?" = 2 ] && return 2
   # Many daemons don't delete their pidfiles when they exit.
   rm -f $PIDFILE
   return "$RETVAL"
}






#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
   #
   # If the daemon can reload its configuration without
   # restarting (for example, when it is sent a SIGHUP),
   # then implement that here.
   #
   start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
   return 0
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  status)
   status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
   ;;
  #reload|force-reload)
   #
   # If do_reload() is not implemented then leave this commented out
   # and leave 'force-reload' as an alias for 'restart'.
   #
   #log_daemon_msg "Reloading $DESC" "$NAME"
   #do_reload
   #log_end_msg $?
   #;;
  restart|force-reload)
   #
   # If the "reload" option is implemented then remove the
   # 'force-reload' alias
   #
   log_daemon_msg "Restarting $DESC" "$NAME"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
      # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
   echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
   exit 3
   ;;
esac

:



[/offtopic][/offtopic]


. Ссылки в папках /etc/rc(0-6).d командой insserv test.sh  создал, наличие проверил. Если запускать данный скрнипт после старта ОС из консоли ./test.sh start то он отрабатывает корректно.Сразу говорю что графические утилиты типа rcconf не подходят.  Что посоветуете?

Modigar

Не отрабатывает видимо потому что иксы не запущены ещё.
Может эти действия стоит переложить на ДЕ?

vovan--vovan

У нас штатный экстрасенс в отпуске, а мы не можем дистанционно даже прочитать название вашей ОС. Но судя по техническим терминам, то сдается мне у вас серверная ОС. Если я ошибаюсь, то пропишите название проги в автозапуск.
Не даст поколебаться Он ноге твоей, и не воздремлет хранящий тебя...

ecc83

Цитата: Zlobny_prapor от 18 июня 2018, 17:42:50Мне необходимо запускать приложение с графической оболочкой при старте ОС.

Ерундой занимаетесь. Какая OC и какая оболочка?

ferum

В любом случае, при старте системы стартуют сервисы, со стартом графической оболочки уже можно запустить приложение. Принцип общий поместить файл.desktop в окружение/.autostart но пути для каждого окружения свои.
Русские дебианщики против цифрового слабоумия !

ogost

Запихивание гуишной проги в init.d - плохая идея, ибо гуишные проги обычно запускаются после того, как пользователь залогинился. А init, systemd и прочее - для демонов. Так что лучше воспользоваться автозапуском конкретного ДЕ, которым вы пользуетесь.

ChubaDuba

Как вариант можно запускать приложения с использованием systemd timer

Zlobny_prapor

Приложение GUI написано в Qt. Операционная система Debian 6.0

ogost

Не совсем понятна постановка задачи.
Если нужно запускать пользовательское ГУИшное приложение после входа в систему - то это делается элементарно в настройках ДЕ, которым вы пользуетесь. Кстати, так какой там у вас ДЕ?
Если нужно запускать пользовательское ГУИшное приложение ДО входа в систему - то тут нужны костыли и танцы с бубнами. Как рабочий костыль, можно сделать автологин пользователя и запуск приложения автозагрузкой ДЕ. Но не всем подходит этот вариант. Поэтому-то мы с коллегами и пытаемся вытянуть у вас полную постановку задачи.

vovan--vovan

Попробую побыть бабой-Вангой, у автора темы ОСь есть а оболочки нет, и есть попытка запустить совместно с ОСь-ю без иксов приложение с графической оболочкой. Если мелю чушь, то админ может удалить мой пост.
Не даст поколебаться Он ноге твоей, и не воздремлет хранящий тебя...

Zlobny_prapor

#10
Приложение надо запускать до ввода логина и пароля.

Cообщение объединено 19 июня 2018, 14:00:14

Цитата: vovan--vovan от 19 июня 2018, 13:50:48Попробую побыть бабой-Вангой, у автора темы ОСь есть а оболочки нет, и есть попытка запустить совместно с ОСь-ю без иксов приложение с графической оболочкой. Если мелю чушь, то админ может удалить мой пост.
Да, Вы правы.

ecc83

Zlobny_prapor, другими словами Вы хотите запустить графическое приложение в системе, которая не имеет графической поддержки?

Zlobny_prapor

Графическая поддержка в системе имеется.  Приложение должно запускаться ДО запроса логина и пароля пользователя

ecc83

Цитата: Zlobny_prapor от 19 июня 2018, 16:30:23Графическая поддержка в системе имеется.

Что то вы путаетесь в показаниях. Напишите полное название своего дистрибутива.
У вас несколько раз спрашивали, какая у вас графическая оболочка. Ещё укажите какой у вас менеджер дисплея.

Zlobny_prapor

Gnome2 графическая оболочка.
Debian 6.0.