Приложению нужны две вещи, чтобы открыть окно на дисплее X. Это должно знать местоположение показа X; это передается DISPLAY
переменной окружения. Также необходимо пройти аутентификацию на X-сервере. Это передается через cookie-файл, который является секретным значением, генерируемым X-сервером, когда он запускается, и сохраняется в файле, к которому имеет доступ только пользователь, запустивший X-сервер. Файл cookie по умолчанию ~/.Xauthority
.
Если ваш X-сервер использует местоположение файла cookie по умолчанию, тогда добавление Environment=XAUTHORITY=/home/dogs/.Xauthority
будет работать (при условии, что /home/dogs
это домашний каталог пользователя, вошедшего в систему под X). Если вам нужно найти местоположение, см. Можно ли запустить графическую программу на рабочем столе другого пользователя с правами root? и открыть окно на удаленном дисплее X (почему «Не удается открыть дисплей»)?
В качестве альтернативы, запуск программы от имени пользователя, который запускает X-сервер, будет работать при условии, что файл cookie находится в расположении по умолчанию (если нет, вам придется найти файл cookie, как в корневом случае). Добавьте User
директиву (например User=dogs
).
Конечно, служба не будет работать, если не отображается X с тем номером, который принадлежит указанному вами пользователю.
Довольно странно запускать программу с графическим интерфейсом из Systemd. Это не было предназначено для этого. Программы с графическим интерфейсом живут в сеансе X, запущенном пользователем. Systemd для системных процессов. Вместо этого вы должны поэкспериментировать с демонами.
systemctl --user
. ТакжеDISPLAY
переменная не имеет значения тогда. Посмотрите здесь .