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

649
Jimmy

Я написал 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 

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

0
Есть ли у вас обычный графический рабочий стол в этой системе? Использует ли он автоматический вход? grawity 6 лет назад 0
Это обычная графическая настольная система, но я не использую автоматический вход. Тем не менее, ему никогда не придется запускать приложение, если мой пользователь не вошел в систему и запущена среда рабочего стола. Jimmy 6 лет назад 0
Так почему бы не запустить его как часть какого-либо процесса входа? Просто добавьте файл .desktop для него в / etc / xdg / autostart (полная спецификация [здесь] (https://specifications.freedesktop.org/autostart-spec/autostart-spec-latest.html#startup)). xenoid 6 лет назад 0
@xenoid Это отлично сработало, спасибо! Я не знаю, почему я не думал об этом сам. Рассмотрите возможность размещения его в качестве ответа, чтобы другим было легче его найти. Jimmy 6 лет назад 0
@Jimmy Добавлено (немного подробнее) xenoid 6 лет назад 0

1 ответ на вопрос

1
xenoid

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

  • Чтобы добавить его для всех пользователей: добавьте для него файл .desktop /etc/xdg/autostart(полная спецификация здесь ).
  • Чтобы добавить его только для себя, добавьте .desktop в ~/.config/autostart/. В вашем менеджере рабочего стола, вероятно, есть диалоговое окно настроек, чтобы сделать это для вас - в KDE5 (Настройки системы):Settings>Workspace>Startup and shutdown>Autostart
Я пробовал то, что вы сказали выше, но я получаю statemnt как "Протокол не указан". Я также застрял с тем же сценарием Джимми user744875 6 лет назад 0
Пожалуйста, будьте более точны, я предложил три вещи: 1) глобальный, 2) персональный через файл и 3) персональный через приложение настроек. 3) явно проще. Вы также можете использовать любой редактор меню приложения для создания (и тестирования) некоторых .desktop (они просто «ярлыки»), и, как только он заработает, вы просто перемещаете его в соответствующий каталог. В противном случае пост .desktop используется. xenoid 6 лет назад 0

Похожие вопросы