Запуск программ с графическим интерфейсом из фонового сервиса в Linux

Я написал Java-программу для запуска различных программ в Linux с подключенным API. Я хочу, чтобы эта Java-программа запускалась в фоновом режиме как мой пользователь и запускалась автоматически при загрузке системы. Я попытался запустить файл JAR из службы systemd, но при попытке запуска приложений с графическим интерфейсом не удается.

Я понимаю, что для запуска приложения с графическим интерфейсом необходимо установить две переменные среды: DISPLAY и XAUTHORITY

Я попытался установить их в служебном файле systemd, но процесс Java по-прежнему не может запустить любую программу с графическим интерфейсом. Нет проблем при запуске приложений с графическим интерфейсом при запуске файла JAR из терминала.

Можно ли решить эту проблему с помощью systemd или любого другого фонового демона?

Вот как выглядит мой сервисный файл:

[Unit]
Description=Application API
After=network.target

[Service]
User=me
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/me/.Xauthority
ExecStart=/usr/bin/java -jar /usr/local/bin/windows-application-launcher.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Обновление: запуск только после входа в среду рабочего стола.

1 ответ

Решение

Начните свой процесс как часть потока входа в систему.

  • Чтобы добавить его для всех пользователей: добавьте для него файл.desktop в /etc/xdg/autostart (полная спецификация здесь).
  • Чтобы добавить его только для себя, добавьте.desktop в ~/.config/autostart/, В вашем менеджере рабочего стола, вероятно, есть диалоговое окно настроек, чтобы сделать это для вас в KDE5 (Настройки системы) Settings>Workspace>Startup and shutdown>Autostart
Другие вопросы по тегам