LINUX.ORG.RU
ФорумAdmin

Boot GRUB2 in console mode for OpenSuse 15.6

 , , ,


0

1

OpenSuse 15.6 , нужно сразу загрузиться в консоль. Раньше это решалось добавлением цифры 3 после default

linux /vmlinuz-6.4.0-150600.23.25-default 3

но сейчас этот трюк перестал работать.

Код секции загрузчика:

menuentry 'TEXT MODE'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-77c45e54-b1ad-4587-82c6-b6c4d700d467' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a48bec57-ead8-4a99-b87d-39b0e57a98e6
	else
	  search --no-floppy --fs-uuid --set=root a48bec57-ead8-4a99-b87d-39b0e57a98e6
	fi
	echo	'Loading Linux 6.4.0-150600.23.25-default ...'
	linux	/vmlinuz-6.4.0-150600.23.25-default root=UUID=77c45e54-b1ad-4587-82c6-b6c4d700d467 splash=silent preempt=full mitigations=auto quiet security=apparmor
	echo	'Loading initial ramdisk ...'
	initrd	/initrd-6.4.0-150600.23.25-default
}
  1. убери quiet из списка параметров ядра - может быть удастся заметить, почему игнорируется тройка (прям сразу глазами/визуально, либо чуть позже в протоколе загрузки с помощью journalctl)

  2. попробуй передать ядру параметр textmode=1

самое главное - после загрузки в рабочую систему открой терминал и дай команду cat /proc/cmdline чтобы убедиться, что твои параметры применяются

ps. есть ещё такая штука, как systemctl set-default multi-user.target
но я ей не пользовался, поэтому советовать не буду

d00fy ★★★
()
Последнее исправление: d00fy (всего исправлений: 1)
Ответ на: комментарий от d00fy

Сделал вот так:

menuentry 'TEXT MODE'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-77c45e54-b1ad-4587-82c6-b6c4d700d467' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod ext2
	GRUB_GFXMODE=text
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a48bec57-ead8-4a99-b87d-39b0e57a98e6
	else
	  search --no-floppy --fs-uuid --set=root a48bec57-ead8-4a99-b87d-39b0e57a98e6
	fi
	echo	'Loading Linux 6.4.0-150600.23.25-default ...'
	linux	/vmlinuz-6.4.0-150600.23.25-default root=UUID=77c45e54-b1ad-4587-82c6-b6c4d700d467 splash=silent preempt=full mitigations=auto textmode=1 security=apparmor
	echo	'Loading initial ramdisk ...'
	initrd	/initrd-6.4.0-150600.23.25-default
}

Грузится в графический режим. Если добавить 3 в параметры, то монитор выключается в процессе загрузки.

serg156
() автор топика
Ответ на: комментарий от serg156

давай попробуем выкинуть load_video set gfxpayload=keep GRUB_GFXMODE=text quiet и добавить тройку в нужное место

возможно, параметры стали вдруг конфликтовать между собой - проверим это дело

d00fy ★★★
()
Ответ на: комментарий от d00fy

Закоментировал

#	load_video
#	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod ext2
#	GRUB_GFXMODE=text
	set root='hd0,msdos1'

Вопрос - в какое место ставить тройку? В разных источниках в разное место её ставят, где то сразу после версии ядра, где то в конце строки параметров.

linux	/vmlinuz-6.4.0-150600.23.25-default 3 root=UUID=77c45e54-b1ad-4587-82c6-b6c4d700d467 splash=silent preempt=full mitigations=auto textmode=1 security=apparmor
serg156
() автор топика
Ответ на: комментарий от serg156

В документированных параметрах для передачи ядру вообще никакой тройки я не нашёл: https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
А потому не очень понятно - кем эта тройка должна обрабатываться, ядром или init-ом или, может, ещё кем-то дальше по цепочке. Или никем.
А вот вариант с #systemctl set-default multi-user.target точно должен сработать, если systemd используется. Но только этот режим будет сохраняться после перезагрузки и к GRUB не имеет отношения.

PeleWin
()
Ответ на: комментарий от PeleWin

Понял, это всё элементарно. Так как «3» не относится к допустимым параметрам ядра, она передавалсь дальше, init-у, что приводило, по сути, к #init 3 , что переводило на 3 runlevel (т.е. консоль + сеть).
Отсюда вывода - этот вариант сработает только с sysv init, а с systemd и upstart-ом, скорее всего, не сработает.

PeleWin
()
Ответ на: комментарий от PeleWin

Только что на OpenSuse 15.5 проверил

linux /vmlinuz-5.14.21-150500.55.65-default 3

загрузился в текстовый режим, в консоль. Как писали на форуме, где я нашёл этот способ, это передаёт ядру уровень загрузки системы init 3 , это загрузка в консоль.

Возможно в новом ядре этот параметр убрали?

serg156
() автор топика
Ответ на: комментарий от serg156

Я предполагаю, что если Вы выполните #init 3 в Вашей OpenSuse 15.5 (после загрузки), то успешно переключитесь на 3 runlevel.
А если то же самое сделаете в OpenSuse 15.6 - то ничего не произойдёт.
Если я прав - это это может быть следствием внедрения systemd в 15.6

PeleWin
()
Ответ на: комментарий от PeleWin

Сейчас проверил. Вот эта секция грузится в текстовый режим.

menuentry 'TEXT 2'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.14.21-150500.55.83-default-advanced-77c45e54-b1ad-4587-82c6-b6c4d700d467' {
		load_video
		set gfxpayload=keep
		insmod gzio
		insmod part_msdos
		insmod ext2
		set root='hd0,msdos1'
		if [ x$feature_platform_search_hint = xy ]; then
		  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a48bec57-ead8-4a99-b87d-39b0e57a98e6
		else
		  search --no-floppy --fs-uuid --set=root a48bec57-ead8-4a99-b87d-39b0e57a98e6
		fi
		echo	'Loading Linux 5.14.21-150500.55.83-default ...'
		linux	/vmlinuz-5.14.21-150500.55.83-default 3 root=UUID=77c45e54-b1ad-4587-82c6-b6c4d700d467  splash=silent preempt=full mitigations=auto quiet security=apparmor
		echo	'Loading initial ramdisk ...'
		initrd	/initrd-5.14.21-150500.55.83-default
	}

А вот это не работает, монитор выключается.

menuentry 'TEXT MODE'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-77c45e54-b1ad-4587-82c6-b6c4d700d467' {
#	load_video
#	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod ext2
#	GRUB_GFXMODE=text
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  a48bec57-ead8-4a99-b87d-39b0e57a98e6
	else
	  search --no-floppy --fs-uuid --set=root a48bec57-ead8-4a99-b87d-39b0e57a98e6
	fi
	echo	'Loading Linux 6.4.0-150600.23.25-default ...'
	linux	/vmlinuz-6.4.0-150600.23.25-default root=UUID=77c45e54-b1ad-4587-82c6-b6c4d700d467 splash=silent preempt=full mitigations=auto  security=apparmor 3
	echo	'Loading initial ramdisk ...'
	initrd	/initrd-6.4.0-150600.23.25-default
}

Разница в версии ядра, с ядром vmlinuz-5.14.21-150500.55.83-default трюк с тройкой работает, а с ядром vmlinuz-6.4.0-150600.23.25-default тройка уже не работает, монитор выключается, система одна и та же, OpenSuse 15.6 , это разные секции загрузчика.

serg156
() автор топика
Ответ на: комментарий от serg156

что значит выключается?

  1. просто гаснет и не мигает лампочка
  2. просто гаснет и мигает лампочка
  3. просто гаснет и по экрану какое-то текстовое окошко из псевдографики прыгает и тд и тп

включится ли монитор, если подождать пару минут и нажать ctrl+alt+fN ? (N - по вкусу, от двух и более, можно даже семёрку попробовать)

d00fy ★★★
()
Последнее исправление: d00fy (всего исправлений: 1)
Ответ на: комментарий от PeleWin

Система OpenSuse 15.6 , для версии ядра vmlinuz-5.14.21-150500.55.83-default команда init 3 переводит систему в консоль, а для версии ядра vmlinuz-6.4.0-150600.23.25-default команда init 3 гасит монитор.

serg156
() автор топика
Ответ на: комментарий от d00fy

"что значит выключается?

просто гаснет и не мигает лампочка
просто гаснет и мигает лампочка
просто гаснет и по экрану какое-то текстовое окошко из псевдографики прыгает и тд и тп"

К системе подключены два монитора. На обоих индикатор включения светодиод, переключается с зелёного цвета на жёлтый, что означает, что монитор отключен компьютером. Экран на обоих мониторах чёрный, как при выключенном компьютере, ничего не показывает.

serg156
() автор топика
Ответ на: комментарий от serg156

Я вот увидел в init --help такую штуку:

Options:
  -h --help                      Show this help
     --version                   Show version
...
     --unit=UNIT                 Set default unit

Так что можно попробовать для нового ядра заменить 3 на --unit=multi-user.target
Правда, не очень верю, что сработает.

PeleWin
()
Ответ на: комментарий от d00fy

«совет на миллион - отключи временно один из мониторов» - ничего не изменилось,попробовал по очереди оставить по одному подключенному монитору, мониторы пишут , что нет сигнала.

serg156
() автор топика
Ответ на: комментарий от PeleWin

«Так что можно попробовать для нового ядра заменить 3 на –unit=multi-user.target» - проверю завтра.

Из полученных результатов можно предположить, что в механизме загрузки нового ядра что то поменялось, и включение режима init 3 не происходит, предположительно, на уровне загрузки видео драйвера, так как выключаются мониторы по причине отсутствия видео сигнала от видео карты.

serg156
() автор топика
Ответ на: комментарий от serg156

Ядру можно передавать документированный параметр init= для запуска другого приложения вместо init.
Для загрузки в консоль можно передать ядру параметр init=/bin/bash (вместо тройки).
Проверил на своей системе - работает.

PeleWin
()
Ответ на: комментарий от PeleWin

Удивительно, но вариант --unit=multi-user.target тоже сработал у меня!
Но с двумя оговорками.

  1. Я невнимательно прочитал документацию. Рабочий способ передать аргументы в init - это записать их после --. Иначе аргументы, содержащие знак равенства, преобразуются в переменные окружения.
    Т.о., правильный вариант у меня следующий:
    было
    linux /boot/vmlinuz-6.6-rt-x86_64 root=UUID=7377d8b7-59e1-4da3-bcbf-824cae198621 rw quiet
    стало
    linux /boot/vmlinuz-6.6-rt-x86_64 root=UUID=7377d8b7-59e1-4da3-bcbf-824cae198621 rw quiet -- --unit=multi-user.target

  2. У меня точно установлен systemd. Этот вариант нацелен именно на systemd. Если systemd не установлен (а я так понял, что OpenSuse его всеми силами избегает) - то, скорее всего, этот вариант не сработает.

PeleWin
()
Последнее исправление: PeleWin (всего исправлений: 1)