GOOGLE ADS

воскресенье, 8 мая 2022 г.

Выполнение интерактивного скрипта в initramfs на основе systemd

Я хочу запустить интерактивный скрипт в 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немного облегчит отладку.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...