В systemd локальные виртуальные консоли управляются getty@.service а последовательные линии - serial-getty@.service . Оба запускают программу agetty, которая инициализирует несколько параметров tty, отображает баннер и приглашение «login:».
Для вашей программы лучше всего использовать существующий модуль в качестве базы и изменить его для запуска пользовательской программы.
Скопируйте /usr/lib/systemd/system/getty@.service в /etc/systemd/system/myapp@.service . Отредактируйте новый файл, чтобы в ExecStart = была указана правильная программа, и дополнительно добавьте строку Conflicts=getty@%i.service в разделе [Unit] .
Протестируйте с помощью systemctl start myapp@tty1 . Если это работает, отключите оригинальный getty@tty1.service через systemctl и включите свой собственный.