Я долгое время был поклонником того, "что используют ваши друзья". Они также смогут лучше всего помочь вам с системой, которую они используют.
Конечно, есть различия между Ubuntu и LFS или полностью самокомпилированным gentoo. Но если вы спросите, Fedora или Ubuntu или ... что лучше, вы в основном получите мнения. Я предпочитаю системы на основе Debian, такие как Ubuntu, но, опять же, кто-то из мира Red Hat, вероятно, предпочтет Fedora.
Понятия не имею, почему, но чтобы заставить это работать, я:
удалил Environment = DISPLAY =:% i
добавил Пользователь =
переменная
Убедился, что правильный файл находится в /etc/systemd/system/emacs.service
(ранее это была жесткая ссылка)
и повторно run systemctl enable emacs
Это заставило его работать.
РЕДАКТИРОВАТЬ
Настоящая проблема в том, что у меня была опечатка в строке 3:
Documentatin
Я нашел это, проверив journalctl
. Я предлагаю всем, у кого есть проблемы со сценарием systemd, сделать то же самое, поскольку на stderr не было отправлено сообщение об ошибке.
ох, это интересно.
Если выбрать случайную служебную единицу и посмотреть на нее, она зависит от конкретной цели вместо default.target
. Последнее является символическим ... настроенная ссылка на конкретную цель, семантически не имеет смысла. (См. systemctl set-default
)
Это может объяснить, почему ваша служба отображается как отключена
после ее включения. Попробуйте заменить, например, default.target
в служебном файле на multi-user.target
.
(Отсутствие сообщения об ошибке при отказе включения кажется дефектом в systemd. Мне почти интересно, есть ли теперь у вас каталог /etc/systemd/system/default.target.wants
).
У вас есть переменная окружения DISPLAY, это означает, что вы хотите, чтобы X11 был запущен. Поэтому вам нужно иметь способ заблокировать вашу службу до этого момента.
Это делается с помощью опции After=...
опцию.
Сам я этого не делал, поэтому не могу сказать, что это сработает, но, скорее всего, это как-то связано с graphical.target
.
[Unit]
After=graphical.target
Другая возможность, если X-сервер не запускается сразу (т.е. у вас есть экран входа в систему с lightdm или что-то подобное), то вам, возможно, придется использовать WantedBy=...
вместо:
[Unit]
WantedBy=graphical.target
Если вам надоест заставлять его работать с systemd, возможно, вы захотите рассмотреть обычный способ, которым менеджеры X-Windows заставляют его работать.
Существует файл ~/.xprofile
, который работает подобно файлу ~/.bashrc
.
Существует также файл ~/.config/autostart/*.desktop
. Он будет автоматически запускать любые приложения, определенные в нем.
Эти решения не являются общесистемными, однако, если у вас несколько пользователей, для каждого из них должна быть своя запись. Кроме того, приложение запускается не от имени root, а от вашего имени.
В качестве примечания, сообщение "loaded + inactive (dead)" означает, что systemd было трудно запустить процесс и в результате он был заброшен. Вы можете вручную проверить, что name.service
работает после перезагрузки, используя:
systemctl stop <service-name>
systemctl start <service-name>
Это обновит статус и запустит службу правильно, если информация верна. Затем вы можете снова проверить статус, чтобы увидеть дополнительные детали:
systemctl status <service-name>
Это ошибка в нескольких служебных файлах Debian:
# systemctl enable watchdog
Synchronizing state of watchdog.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable watchdog
# find /etc/systemd/ | grep watch
# tail -n2 /lib/systemd/system/watchdog.service
[Install]
https://www.raspberrypi.org/forums/viewtopic.php?f=82&t=218609&p=1406567#p1406567https://forum.armbian.com/topic/9115-still-dont-know-where-to-report-bugs-watchdogservice-refuses-to-start-due-to-broken-service-file/
Исправление уровня распространения:
echo "WantedBy=default.target" >> /lib/systemd/system/watchdog.service
systemctl daemon-reexec
systemctl enable watchdog
systemctl stop watchdog.service
systemctl start watchdog.service
Существует множество ручных альтернатив этому.