Я хочу запустить интерактивный скрипт в initramfs на основе systemd. Я использую mkinitcpio с systemd-hook для его создания. Моя проблема в том, что в сценарий, запущенный как служба, не поступают входные данные. Скрипт запускается и я вижу его вывод, пока он не ждет ввода.
мой_сервис.сервис:
[Unit]
Requires=systemd-vconsole-setup.service
# Requires=getty@tty2.service
After=systemd-vconsole-setup.service
Before=initrd-switch-root.service
Conflicts=multi-user.target
DefaultDependencies=no
[Service]
Type=oneshot
# ExecStartPre=/usr/bin/chvt 2
ExecStart=/usr/bin/sh /myscript
# ExecStartPost=/usr/bin/chvt 1
# StandardInput=tty
StandardInput=tty-force
StandardOutput=tty
TTYPath=/dev/tty1
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
[Install]
WantedBy=sysinit.target
Я добавил Requires=otpboot.service
к initrd-switch-root.service
, поэтому он ждет, пока мой скрипт не завершится (чего не происходит, поскольку ввод не предоставляется). Я также попытался переместить свой скрипт на tty2 (что было бы совершенно нормально для моего варианта использования), команды chvt преуспевают, но вывод my_service все еще находится на tty1. Поскольку я не могу перейти на tty2 Ctrl+Alt+F2
, я думаю, что tty еще не настроен. Поэтому я добавил службу getty@ и двоичный файл agetty и потребовал их, но tty2 по-прежнему не работает.
Я ценю любой намек в любом направлении.
Решение проблемы
Хорошо, мой плохой. Я думал, что sd-vconsole
крючок заменяет keyboard
крючок, но это не так. Так что мои драйверы клавиатуры отсутствовали. (Вот почему изменение на tty2 вручную не сработало - должно было дать мне подсказку).
Если у кого-то есть проблемы, удаление TTYVTDisallocate
немного облегчит отладку.
Комментариев нет:
Отправить комментарий