тайна фараонов, блин!
сделал grub.cfg с hidden mode, а потом без него. файлы идентичны абсолютно, байт в байт. все остальное в /boot имеет старую дату, т.е. кроме grub.cfg ничего не менялось. grubenv как был создан при загрузке, так таким же и остался. т.е. можно смело заявлять, что включение-выключение hidden mode не меняет ровным счетом ни-че-го. (и не надо говорить про /, все, что касается загрузки, просто обязано находиться в пределах /boot, ибо рут может быть вообще шифрованным).
поковырявшись, нашел! отвечает за это 30-й скрипт. вот интересный кусок из него:
adjust_timeout () {
if [ "x${found_other_os}" = "x" ] ; then
if [ "x${GRUB_HIDDEN_TIMEOUT}" != "x" ] ; then
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
verbose=
else
verbose=" --verbose"
fi
if [ "x${GRUB_HIDDEN_TIMEOUT}" = "x0" ] ; then
cat <<EOF
if [ \${timeout} != -1 ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
fi
EOF
else
cat << EOF
if [ \${timeout} != -1 ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=0
fi
fi
что именно не срабатывает - что-то отсюда, или еще раньше там хз что - я не знаю, да и не хочу знать. однако же, вот нам и ключ к разгадке: для вожделенного скрытого меню нужно вместо манипуляций с секудами прописать следующее
set timeout=0
sleep --verbose --interruptible сколько_ждать_секунд
вот. чем чинить 30-ку, мне кажется, проще (и безопаснее) добавить сие в 00-й вместо фрагмента с заданием таймаута. сейчас буду пробовать грузить с модифицированным конфигом...
UPD: и ведь работает! ну наконец-то я поглазел на этот самый hidden mode в действии!
значится, решение: идем в /etc/grub.d/00_header
в конце находим такие строки:
if [ \${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=${GRUB_TIMEOUT}
fi
заменяем на такие:
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
если хотим ловить меню по шифту (можно поменять на контрол или альт)
или такие
set timeout=0
sleep --verbose --interruptible 3
чтобы увидеть счетчик обратного отсчета на 3 секунды. или без "--verbose" - без счетчика, просто молча прождет три секунды.
ЗЫ. можно всяко разно извратиться, например так: сразу грузится дефолтная ос, а при зажатом шифте - альтернативная. ну или как еще фантазия позволяет... в общем, фича)))