Как я могу сделать свое меню GRUB скрытым, и чтобы клавиши shift или esc отображали скрытое меню GRUB во время загрузки

10

Я использую Ubuntu 16.10 и пытаюсь скрыть свое меню GRUB при включении питания / времени загрузки и хочу, чтобы меню появлялось только при нажатии клавиш Shiftили Esc.

Я изменяю соответствующие параметры в, /etc/default/grubи это все еще не будет скрывать меню.

Исследуя это, я обнаружил, что этот пост из скрытого меню GRUB 2013 года не работает, что указывает на то, что проблема уже давно существует, и предлагает изменение, /etc/grub.d/30_os-proberкоторое я бы предпочел не делать. Этот код предполагает, что, поскольку он обнаружил несколько ОС, он GRUB_TIMEOUT=10все равно будет установлен .

Вот фрагмент того, что у меня сейчас есть /etc/default/grub... в меню с 10-секундным обратным отсчетом ...

GRUB_DEFAULT = спасенный
GRUB_SAVEDEFAULT = TRUE
GRUB_HIDDEN_TIMEOUT_QUIET = TRUE
# GRUB_HIDDEN_TIMEOUT = 0
GRUB_TIMEOUT = 10
GRUB_DISTRIBUTOR = `lsb_release -i -s 2> / dev / null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT = "тихий всплеск"

Если я раскомментировать #GRUB_HIDDEN_TIMEOUT=0, то sudo update-grubнастаивает на том, что я также установить GRUB_TIMEOUT=10в GRUB_TIMEOUT=0. Я делаю это, и я все еще вижу меню GRUB.

В terminalнаборе info -f grub -n 'Simple configuration'описываются различные опции, и в самом конце информации он показывает, что некоторые из текущих команд устарели, и предполагает, что более новые замены лучше.

Кто-нибудь знает, как я могу скрыть свое меню GRUB в 16.10 и распознать его Shiftили Escклавиши во время загрузки?

heynnema
источник
Я рад, что ты спросил это. Я тоже не смог заставить свою работу работать, и это подтверждает, что это из-за того, что коробка была двойной загрузкой.
Органический мрамор
1
@OrganicMarble Проблема действительно связана с несколькими ОС. Чтобы проверить, я изменил эту часть кода в /etc/grub.d/30_os-prober, и хотя у меня не было меню, я не смог вызвать меню с помощью shift или esc во время загрузки. Все еще работаю над этим.
Хейннема
В своем ответе я добавил дополнительную информацию об ошибках, связанных с вашей, они могут помочь вам лучше понять суть проблемы. Я также смотрю на код Grub2 - пытаюсь помочь :)
xtrchessreal
Попробуйте использовать Grub Customizer, если у вас нет, вкладка General Setting в следующем порядке: 1 Снимите флажок «искать другие операционные системы» и 2 Снимите флажок «Показать меню», затем сохраните. Проверьте это и посмотрите, вызовет ли «Shift» меню, а также то, что произойдет, если ничего не нажимать.
xtrchessreal
Я могу понять, что вы не хотите изменять, /etc/grub.d/30_os-proberно я действительно не вижу вреда. Вы можете сохранить резервную копию или # Комментировать ваши изменения, чтобы вы могли отменить их при необходимости. Обходной путь вы нашли , кажется , наиболее разумное решение на данный момент.
Старейшина Гик

Ответы:

7

Хорошо, ребята, вот ответ ... чтобы получить скрытое меню GRUB в конфигурации с двойной загрузкой ... два редактирования ... и sudo update-grub...

Редактировать # 1

Чтобы получить скрытое меню GRUB в мультизагрузочной конфигурации, нам сначала нужно отредактировать /etc/default/grub. Откройте этот файл с помощью следующей команды:

sudo editor /etc/default/grub

Как только файл открыт, замените эти строки

GRUB_HIDDEN_TIMEOUT_QUIET=true
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=10

с этими:

GRUB_HIDDEN_TIMEOUT_QUIET=false
GRUB_TIMEOUT_STYLE=countdown
#GRUB_HIDDEN_TIMEOUT=0
GRUB_TIMEOUT=3

Это заставит GRUB отобразить 3-секундный таймер обратного отсчета на экране. Делая это, пользователь может нажать Escклавишу, чтобы вызвать меню по умолчанию. В противном случае ОС по умолчанию загрузится.

Если вы хотите, чтобы в качестве операционной системы по умолчанию была установлена ​​последняя загруженная ОС, добавьте две строки ниже под "GRUB_TIMEOUT = 3", показанной выше:

GRUB_DEFAULT=saved    # change an existing line to this
GRUB_SAVEDEFAULT=true # add this line

Редактировать № 2

Затем необходимо обновить пробник ОС, чтобы отключить функцию quick_boot. Для этого откройте /etc/grub.d/30_os-proberв вашем любимом редакторе и измените следующую строку (строка 23 в 17.04), заменив 1с 0:

quick_boot="1"

Когда вы закончите, строка должна выглядеть так:

quick_boot="0"

Сохраните файлы и затем выполните следующую команду, чтобы перенастроить загрузчик и применить ваши изменения:

sudo update-grub
heynnema
источник
Это сделал это! +1.
Органический мрамор
Похоже, хорошее решение :) Теперь у меня есть простой вопрос по этому поводу. Если вы измените GRUB_TIMEOUT с «3» на «1», вы загрузитесь быстрее. И можете ли вы предоставить ссылки, если таковые имеются, где можно прочитать, как работает этот код. Я хочу понять, что делает этот код и последовательность вызовов функций и т. Д. Очень ценю. Приятно, когда ты можешь решить свои собственные вопросы - хорошая работа в этом.
xtrchessreal
@xtrchessreal да, изменение 3 на 1 делает его на 2 секунды короче. Я подумал, что 3 секунды было достаточно для того, чтобы я мог передать свою руку клавише Esc, если бы захотел. Вы можете посмотреть info -f grub -n 'Simple configuration'для получения дополнительной информации.
Хейннема
+1 для Q и +1 для A. Последние две ночи я гуглил это со всеми видами модификаций волос с мозгом в 30_os-Proper, создавая 31_blah_blah и создавая 40_custom все безрезультатно. Это в AU, ArchLinux, Fedora и многих других местах. Если вы хотите получить больше голосов, я бы посоветовал отследить все неправильные ответы здесь, в AU (их много), и проголосовать за то, чтобы закрыть их как дубликаты этого, а затем пинговать меня ( @ me) в общем чате AU со ссылкой на дубликат, и я тоже буду голосовать. Спасибо за это отличное исследование и рабочее решение! :)
WinEunuuchs2Unix
@ WinEunuuchs2Unix спасибо за хороший комментарий и голоса! Я сам провел много исследований, прежде чем обнаружил, что ни у кого нет элегантного решения или какого-либо решения вообще ... но я был полон решимости :-)
Хейннема
3

Я полагаю, что эта проблема может быть связана с несколькими ОС в соответствии с этой выдержкой из Grub2 wiki :

Если другая операционная система не обнаружена, GRUB 2 загрузится прямо в операционную систему по умолчанию, и меню не отобразится. Если обнаружена другая операционная система , отобразится меню GRUB 2 .

А ТАКЖЕ

Сохранение ОС можно выполнить, запустив sudo grub-set-default, если GRUB_DEFAULT = сохранено установлено в / etc / default / grub. Это также может быть сохранено, если GRUB_SAVEDEFAULT = true также установлен в / etc / default / grub. В этом случае ОС по умолчанию сохраняется до тех пор, пока новая ОС не будет выбрана вручную из меню GRUB 2 или пока не будет выполнена команда grub-set-default.

В вики Grub2 также говорится: Примечание: в GRUB 1.97 до GRUB 1.99 существует давняя подтвержденная ошибка в функции скрытого меню. Меню может не скрываться, как указано в описании на этой странице. Хотя редактирование скрипта 30_os-prober может решить эту проблему, оно выходит за рамки этой страницы.

В качестве обходного пути вы можете установить, GRUB_TIMEOUT="1"и вы увидите меню только на 1 секунду. Если мне нужно переключиться на другую ОС, я просто нажимаю клавишу со стрелкой вниз в течение этой секунды, и меню появится, пока я не сделаю выбор.

Может быть потенциальная проблема синтаксиса, связанная с ошибкой. Я не эксперт по Grub2, но в моем файле grub каждая командная строка заканчивается символом = "некоторые параметры в кавычках". Я помню по моим дням кодирования, что "кавычки" должны были передавать строку, где не кавычки передавали переменным простые числовые значения. Я не UP в новых методах кода. Например, вот некоторые из моих выводов grub:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT="Ubuntu"
#GRUB_HIDDEN_TIMEOUT="0"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="1"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

Я просматриваю этот Grubbug :) для получения дополнительной информации, а также для этой ошибки. Оба они имеют отношение к Grub2 2-летней давности. Некоторые из них могут быть связаны с кодом MBR до передачи обслуживания в Grub2.

xtrchessreal
источник
Спасибо за ваш ответ. Я уже использую метод SAVEDEFAULT. TIMEOUT = 1, безусловно, сокращает время появления меню. Проблема действительно связана с несколькими ОС. Чтобы проверить, я изменил эту часть кода /etc/grub.d/30_os-prober, и, хотя у меня не было меню, я не смог вызвать меню с помощью shift или esc во время загрузки.
Хейннема
Те ошибки, которые вы связали, не кажутся актуальными, или я что-то упустил?
Старейшина Гик
@ElderGeek в отношении ошибки # 1401318 человек, которому эта ошибка назначена для TJ, объясняет поведение MBR для Grub, когда он говорит «sleep --interruptable $ timeout» и т. Д. Если вы прочитаете все его утверждения в комментариях к ошибке, я думаю, вы увидите, в чем хотя бы часть проблемы. Он также назначен для ошибки # 425979, которая похожа в проблемах. Обе ошибки касаются удержания клавиши Shift, чтобы заставить меню Grub НЕ работать, если оно скрыто. Это то, что ОП пытается выяснить. Я надеюсь, что это проясняет, почему ссылки в моем опубликованном ответе.
xtrchessreal
Простите за мое замешательство. Я прочитал вопрос как «как я могу скрыть свое меню GRUB» Спасибо за разъяснения. Должно быть, я пропустил этот комментарий.
Старейшина Компьютерщик
@ElderGeek на самом деле, вопрос в том, «как я могу получить мое меню GRUB быть скрыто, и имею сдвиг или ЭК ключи показывают скрытое меню GRUB во время загрузки». Я получил это, чтобы скрыть. Я не получил ключи Shift или Esc на работу. По-видимому, эта проблема восходит к 2013 году или раньше, и затрагивает только мультизагрузочные конфигурации.
Хейннема
3
  1. Я думаю, вы хотите попробовать «все» через /etc/default/grub. Вы читали эту ссылку,

    help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2

  2. Я предлагаю вам попробовать удалить следующие строки /boot/grub/grub.cfg,

    ...
    set timeout_style=menu
    if [ "${timeout}" = 0 ]; then
      set timeout=10
    fi
    ### END /etc/grub.d/30_os-prober ###
    

    Да, я знаю, вам придется делать это каждый раз, update-grubкогда запускается, но вы можете сделать сценарий для этого.

sudodus
источник
Спасибо за ваш ответ. Я посмотрю на эту ссылку. Я также нашел способ изменить /etc/grub.d/30_os-prober, чтобы мне не приходилось каждый раз редактировать grub.cfg.
Хейннема
Это имеет смысл для меня, так как в мультизагрузочной системе похоже, что этот код изменяет время ожидания обратно до 10 с 0, что, по-видимому, побеждает HIDDEN_TIMEOUT ....
Elder Geek
@heynnema не могли бы вы опубликовать свои изменения в os-prober? Когда я посмотрел на ссылку в вашем вопросе и сравнил ее с кодом в моем os-prober, номера строк не имели смысла, поэтому я предполагаю, что os-prober с тех пор изменился, и я боялся возиться с этим.
Органический мрамор
1
@ OrganicMarble смотрите обновление моего вопроса. Может быть, вы можете попробовать некоторые / все мои моды и посмотреть, что вы придумали.
Хейннема
@sudodus, пожалуйста, смотрите мой ответ
Хейннема