Ранее я пытался добавить параметр nomodeset
в / etc / default / grub
для решения другой проблемы, связанной с ненормальные способы загрузки моего ноутбука. Это не сработало. Поэтому я нажал «е» в меню личинки, чтобы удалить его. После входа в систему я вернул файл grub и обновил его.
Однако теперь, когда я перезапускаю, он останавливается на пустом экране с мигающим курсором. Я перезагрузил его и нажал «е» в меню личинки.Затем я изменил
[...] тихий всплеск $ vt_handoff
к
[...] ro $ vt_handoff тихий всплеск
, затем нажал F10, и он загрузился нормально, с меньшей графикой, чем до использования nomodeset
. Проблема в том, что мне приходится делать это каждый раз при загрузке. Как сделать это последнее изменение постоянным?
PS: Мой ноутбук был и подвержен сбоям при воспроизведении видео в Ubuntu 18.04, а теперь и в 19.04 (при двойной загрузке с 18 и 19). В 18 я перезагружался, и после этого система работала нормально, однако в 19 она зависает сразу после выбора Ubuntu 19 в меню grub (после сбоя, при воспроизведении видео), и мне нужно переустановить его. Я знаю, что это, скорее всего, неправильный способ делать что-то, и предложения приветствуются.
Edit1: Как упоминалось в Как мне добавить параметр загрузки ядра? Я знаю, как добавить новые параметры, такие как nomodeset, в файл grub и, следовательно, изменить команды ядра навсегда, однако $ vt_handoff
уже присутствует в командах ядра, но не в файле grub, поэтому я не понимаю, что делать, если удалить его или изменить его порядок в списке параметров?
Файл, который обрабатывает аспект создания конфигурации GRUB, которую вы хотите изменить, это /etc/grub.d/10_linux
, а элемент $vt_handoff командной строки ядра обрабатывается дважды в его коде (начиная с версии, которую я сейчас использую установлен, v2.04).
Во-первых (что более важно для желаемого результата, поскольку именно здесь обрабатывается размещение переменной $vt_handoff
) во вложенном блоке if в строках 154-160:
...если [ "$vt_handoff" = 1 ]; тогда
для слова в $GRUB_CMDLINE_LINUX_DEFAULT; делать
если [ "$word" = всплеск ]; тогда
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \$vt_handoff"
фи
Выполнено
фи
...
Затем снова во вложенном блоке if в строках 348-358, где принимается решение о том, какое значение установить для переменной $vt_handoff
:
...
установить gfxpayload="${1}"
EOF
если [ "$vt_handoff" = 1 ]; тогда
кошка << 'ЕОФ'
если [ "${1}" = "сохранить" ]; тогда
установить vt_handoff=vt.handoff=7
еще
установить vt_handoff=
фи
EOF
фи
...
В первом примере, показанном выше, мы видим, как интерпретатор оболочки Dash объединяет значение $GRUB_CMDLINE_LINUX_DEFAULT
, полученное из файла /etc/default/grub
, с имя переменной $vt_handoff
¹. Код в том виде, в каком он написан, выбирает добавление последнего к первому, но вместо этого вы можете сделать это так же просто, как изменить положение элементов в переназначенной переменной $GRUB_CMDLINE_LINUX_DEFAULT
в строке 157. Тогда это будет выглядеть так: это:
...
if [ "$word" = splash ]; then
GRUB_CMDLINE_LINUX_DEFAULT="\$vt_handoff $GRUB_CMDLINE_LINUX_DEFAULT"
fi
...
Это, безусловно, самый прямой способ добиться желаемого результата, хотя он не соответствует моему собственному определению «постоянного» решения, потому что этот файл будет перезаписываться каждый раз, когда ваша система устанавливает обновление для GRUB. В свете этого я бы посчитал это более точным «постоянным» решением, поскольку оно действительно будет выживать от одного цикла питания к другому в течение всего срока службы любого данного выпуска пакета GRUB, но не более того.
Поскольку чаще всего рекомендуется «работать» с системами такими, какие они есть (когда это возможно), а не «работать против» них, я вижу одно потенциальное средство это делается во втором фрагменте кода из файла /etc/grub.d/10_linux
, показанного выше. В частности, мы видим, что логика скрипта оценивает позиционный параметр и активирует переменную $vt_handoff
, только если ее значение равно 'keep'. Рассматриваемый параметр (через несколько уровней запутывания логики оболочки) на самом деле является значением для GRUB_GFXPAYLOAD_LINUX
, которое указано в /etc/default/grub
, файле, который предназначен быть изменен конечными пользователями и, таким образом, переживает обновления пакетов невредимыми.
Только если для GRUB_GFXPAYLOAD_LINUX установлено значение keep
, переменная $vt_handoff
имеет установленное значение. Согласно GNU GRUB Manual, в то время как наиболее распространенными вариантами для GRUB_GFXPAYLOAD_LINUX являются сохранить
(ваша текущая настройка) и текст
(очевидно, не подходит для вашего варианта использования) , также может быть установлено любое допустимое значение для gfxmode.Это означает, что вы можете изменить его на авто
или, что еще лучше, на точное ширина✕высота
разрешение экрана по умолчанию, выбранное в BIOS/EFI вашей системы (это то, что сохраняет
означает эквивалент), который можно обнаружить с помощью команды videoinfo
в самом загрузчике (а также, в большинстве случаев, с помощью команды sudo fbset -s
в терминале после загрузки вашей системы).
Это дает то преимущество, что текущий процесс загрузки остается без изменений ЗА ИСКЛЮЧЕНИЕМ для удаления назначения значения для $vt_handoff
, и даже если вы все равно увидите его в конце командная строка ядра при нажатии e при входе в меню загрузчика,поскольку теперь он не имеет значения, он фактически не будет передан ядру. Вы можете убедиться в этом, введя cat /proc/cmdline
в терминал после изменения GRUB_GFXPAYLOAD_LINUX и перезагрузив компьютер.
Последний шаг — восстановить значение, которое GRUB заменяет $vt_handoff
в командной строке ядра, на этот раз в том месте, которое ВЫ хотите. Во втором фрагменте кода выше мы видим, что когда для GRUB_GFXPAYLOAD_LINUX установлено значение keep
, $vt_handoff
присваивается значение vt.handoff=7
, и эта часть в жирный шрифт — это то, что вам нужно добавить перед другими настройками командной строки ядра, назначенными GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub
. Еще раз, вы можете убедиться, что все в порядке с cat /proc/cmdline
после внесения изменений и перезагрузки. Вот как бы я сам подошел к вашей проблеме, если бы столкнулся с ней.
В качестве альтернативы непосредственному редактированию файла /etc/default/grub
можно установить и использовать Настройщик GRUB, который предоставляет те же самые переменные в продуманном графическом интерфейсе. макет. Установить его просто, если вы используете недавнюю версию (19.10 «Eoan Ermine» или более позднюю) Ubuntu или одну из ее разновидностей, например Kubuntu, с sudo apt install grub-customizer
в терминале.Он имеет диалоговое окно «Дополнительные настройки» (показано ниже), которое предоставляет те же значения, которые вам нужно изменить в /etc/default/grub
, и сохраняет резервные копии измененных файлов на случай, если вам понадобится отменить изменения позже. .
¹ Следует отметить, что на протяжении рассматриваемого здесь процесса настройки GRUB все ссылки на $vt_handoff
являются экземплярами самого имени переменной, а не более часто встречающимся расширением параметра/ поведение замещения, выполняемое оболочками *NIX различных и разных вкусов. Ожидаемое поведение варианта Ubuntu среды GRUB заключается в том, что ссылки на него останутся в качестве имени переменной во всех экземплярах командной строки ядра, ведущих к файлу grub.cfg
включительно. конечный результат начального grub mkconfig
процесса и каждого последующего update-grub
вызова. Значение переменной также определяется в файле конфигурации GRUB, и сам загрузчик выполняет замену во время каждого цикла загрузки. Вот почему его часто видят экранированным как \$vt_handoff
в приведенных выше фрагментах кода, поскольку это предотвращает любую преждевременную замену имени переменной на ее значение.