в dæmons есть довольно фундаментальная вещь, которую вы пропускаете: как стандарт, у них нет управляющих терминалов. У них нет открытых дескрипторов файлов для терминальных устройств. Все, что ожидает разговора с "терминалом", этого не сделает. Нет никакого "терминала".
нет, $TERM
не указывает "терминал". Он указывает терминал тип, т. е. какие escape-последовательности отправлять в качестве выходных и интерпретировать как входные. Она нужна здесь, и вы будете нужно организовать, чтобы он был установлен на соответствующее значение. Но это не основной фактор. Основным фактором является отсутствие "терминала".
да, вывод заканчивается на /var/log/messages
. Стандартный вывод сервиса идет в журнал по умолчанию под systemd
, и у вас, очевидно, есть syslogd
какой-то работает. Что ты видел это только после $TERM
был установлен просто означает, что ваш скрипт получил дальше, мимо той части, где он должен был знать тип терминала в для того, чтобы выяснить, как он будет выводить вещи.
systemd
есть возможность прикрепить деймонов к клеммам. Это должно быть. Он работает agetty
как демон, чтобы обеспечить сеансы на виртуальных терминалов.
что вы ищете StandardInput=
,StandardOutput=
и TTYPath=
настройки, чтобы добавить к этому файлу единицы в вашем вопросе. Посмотрите в /usr/lib/systemd/system/getty@.service
чтобы увидеть их в использовании.
вы не давайте достаточно информации в своем вопросе о том, является ли это правильным подходом или вместо этого вы должны добавить ExecStartPre=
на заказ /etc/systemd/system/getty@.service
. Все зависит от того, является ли это чем-то, чтобы быть выполненным однажды перед запуском GUI, или каждый раз перед каждым отдельным входом в систему (TUI). Before=graphical.target
намекает на бывшего, но это может быть не то, что вы на самом деле хотели (учитывая RequiredBy=
). ☺