a
25 сентября 2018 г. 14:51

Автозапуск и авторестарт Qt Gui Application в Linux

Qt, Linux, autorun

Здравствуйте, дорогие форумчане! Сделал специальную тему для такого вопрос.


У меня Debian 9.5.

Моё приложение не получилось запустить с помощью утилиты systemd.

Писал, что

  1. QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
  2. qt.qpa.screen: QXcbConnection: Could not connect to display
  3. Could not connect to any X display


По мере изучения вопроса я понял, что systemd может стартовать и рестортовать в случае падения программы без GUI.

Посмотрел в сторону обычной автозагрузке - Desktop Entry Files. Статья есть на этом сайте.

Автозагрузка прошла успешно. Но мне нужен еще и рестарт программы при её закрытие, крушение.


Посмотрел в сторону supervisor . Думал, что она меня спасет. Но нет. После переделывания тестового примера и попытки запуска получил тоже:

  1. QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
  2. qt.qpa.screen: QXcbConnection: Could not connect to display
  3. Could not connect to any X display.


Вот мой скрипт:


  1. Файл: /usr/local/bin/long.sh
  2.  
  3. #!/bin/bash
  4. /opt/control_block/b/bin/control_block
  5.  

Вот кофиг:

  1. Файл: /etc/supervisor/conf.d/long_script.conf
  2.  
  3. [program:long_script]
  4. command=/usr/local/bin/long.sh
  5. autostart=true
  6. autorestart=true
  7. stderr_logfile=/var/log/long.err.log
  8. stdout_logfile=/var/log/long.out.log

Не могли бы помочь, почему не хочет подключиться к X-Server?

Вручную запустить могу. Переменная DISPLAY установлена.


Здесь говорится о такой проблеме. Приводится код для устранения. Но и упоминается, что это:

  1. QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
    qt.qpa.screen: QXcbConnection: Could not connect to display

всего-лишь warning.

2
Вопрос задан по статьеQt Linux - Урок 001. Автозапуск Qt приложения под Linux

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 25 сентября 2018 г. 16:30

Добрый день!

Я перенёс ваш вопрос в раздел Linux, он здесь будет более к месту.

Что касается самого вопроса, то возможно, что нужно запускать от имени определённого пользователя.

Например так подправить

  1. [program:long_script]
  2. command=/usr/local/bin/long.sh
  3. user=nobody
  4. autostart=true
  5. autorestart=true
  6. stderr_logfile=/var/log/long.err.log
  7. stdout_logfile=/var/log/long.out.log

Либо с каким-то иным пользователем, но не от имени рута стартовать вашу программу


    a
    • 25 сентября 2018 г. 18:22

    Не получается... Решил пробовать скрипт, выполняемый при загрузке. В скрипте вечный цикл по старту программы.

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь