Как получить доступ к tty1 эмуляции QEMU после загрузки?
У меня есть необработанный образ TinyCore 14, который я хочу запустить с QEMU в нескольких параллельных экземплярах в качестве эмуляции, но не виртуализации (поскольку в целевых системах может отсутствовать процессор с возможностью виртуализации).
Если я не буду делать ничего более сложного, чем указывать им загрузочный образ, я смогу получить к ним доступ с помощью vnc и наблюдать за всем, что там происходит, независимо от того, будет ли у меня x-Server TinyCore показывать свой минималистичный графический интерфейс или я буду придерживаться консоли. . Все идет нормально.
Но мне нужен только доступ к консоли, которая появляется после загрузки и автоматического входа в систему.
Вызов для запуска в настоящее время выглядит так:
qemu-system-i386 -drive format=raw,if=virtio,media=disk,readonly=on,file=TinyCore-14.0.img -nographic -serial pty
Это позволяет мне подключиться к экрану после его запуска:
screen /dev/pts/0
Вывод выглядит немного странно, но его можно использовать.
Если я введу параметры загрузки и поставлю «console=ttyS0» в параметры загрузки, я смогу наблюдать загрузочные сообщения на этом экране:
Booting Core 14.0
unning Linux Kernel 6.1.2-tinycore.
Checking boot options... Done.
Starting udev daemon for hotplug support... Done.
Scanning hard disk partitions to create /etc/fstab
Setting Language to C Done.
Possible swap partition(s) enabled.
Loading extensions... Done.
Setting keymap to us Done.
Setting hostname to box Done.
login[416]: root login on 'tty1'
Вот и все. По неизвестным мне причинам я никак не могу получить доступ к этому tty1. Это также происходит, если я заменяю pty на stdio, поэтому он отображается в терминале, который я использовал для ввода команды запуска. Но и здесь он не пройдет мимо сообщения «root login on 'tty1'».
Я пытался подключиться к другим портам pts (нет), использовал для подключения другие средства, кроме экрана (minicom и picocom, нет), добавил tty1 вместо ttyS0 в параметрах загрузки (нет), пытался подключиться к tty1 с помощью консоли qemu ( нет) и взаимодействуйте с ним, используя именованный канал (с параметром «-serial Pipe:/path/pipe» после его создания с помощью mkfifo, нет).
Этот tty1 по какой-то причине очень неуловим, если я не использую vnc для просмотра этой эмуляции QEMU.
Итак, как я могу получить доступ к этому tty1 после этого события входа в систему root? И если это работает для одной эмуляции QEMU, можно ли ее масштабировать, чтобы можно было использовать до 20 одновременно?
Кстати, в долгосрочной перспективе я стремлюсь получить доступ к этому tty1 из приложения Java, которое может использовать эту библиотеку: jLine3. Он использует входящие и выходные потоки для эмуляции терминала, поэтому, если у вас есть решение, которое будет соответствовать этому, это будет еще лучше! Но на данный момент это необязательно.
1 ответ
tty1 в Linux (т.е. внутри вашего гостя) — это виртуальная консоль на графическом дисплее. Если вы хотите посмотреть на это, вам нужно настроить QEMU так, чтобы у него был какой-то графический интерфейс, чтобы вы могли видеть, что гость выводит на свой графический вывод. В качестве альтернативы, если вы не хотите использовать графический дисплей, вам необходимо настроить гостевую ОС так, чтобы приглашение на вход в систему размещалось на каком-либо терминале, отличном от терминала виртуальной консоли (например, на терминале последовательного порта ttyS0).