Мне нужно запустить приложение Qt при запуске с правами root, ниже приведен скрипт, который я создал с помощью systemctl с именем QtApp.service

[Unit]
Description=QtApp

[Service]
ExecStart= exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'
Restart=always

[Install]
WantedBy=multi-user.target

Но когда я запускаю команду для запуска службы sudo systemctl start QtApp.service я получаю следующую ошибку

Failed to start QtApp.service: Unit QtApp.service is not loaded properly: Invalid argument.

Вот подробности ошибки

systemctl status QtApp.service
● QtApp.service - QtApp
   Loaded: error (Reason: Invalid argument)
   Active: inactive (dead)

Jul 06 15:23:54 user-pc systemd[1]: [/etc/systemd/system/QtApp.service:5] Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'
Jul 06 15:23:54 user-pc systemd[1]: QtApp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.
Jul 06 15:26:08 user-pc systemd[1]: [/etc/systemd/system/QtApp.service:5] Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'
Jul 06 15:26:08 user-pc systemd[1]: QtApp.service: Service lacks both ExecStart= and ExecStop= setting. Refusing.

3 ответа3

0

Обычно "Неверный аргумент" - это сам файл определения модуля. Для отладки вы можете использовать:

sudo systemd-analyze verify QtApp.service

или в случае локального обслуживания пользователя:

sudo systemd-analyze --user verify QtApp.service
0

Ошибка говорит

Executable path is not absolute, ignoring: exec su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'

Попробуйте использовать абсолютный путь (например, /usr/local/QtInst/QtApp) вместо /QtInst/QtApp.

Это может быть актуально.

0

Executable path is not absolute - это означает, что exec .

Вообще exec здесь не имеет смысла. Это встроенная оболочка, которая заменяет оболочку данной командой. Абсолютного пути к исполняемому файлу exec существует, поскольку исполняемого файла нет.

su - исполняемый файл Линия может быть

ExecStart=/bin/su -l user -c 'export DISPLAY=:0; /QtInst/QtApp'

Но использование su не может быть хорошей идеей в сервисе systemd. Смотрите: Как мне заставить мою службу systemd запускаться от определенного пользователя и запускаться при загрузке?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .