저는 openSUSE Tumbleweed(이 글을 입력하는 동안 20120913, 읽을 때마다 다를 가능성이 높음), 커널 5.14.1-1-기본값, grub2 버전 2.06-6.1을 실행하고 있습니다. 내 하드웨어 사양이 관련이 있는 경우(Asus Strix Z270F 마더보드에서 nvidia 드라이버 버전 470.63.01과 함께 GF1080ti를 사용하는 경우 제외) 알려주시면 게시하겠습니다.
어쨌든 저는 Windows/Linux를 이중 부팅했는데 약 60/40%입니다. Linux가 설치된 드라이브에서 부팅하고(UEFI는 있지만 보안 부팅은 꺼짐)(Microsoft가 내 컴퓨터를 소유하고 있다고 생각하지 않고 나에게 묻지 않고 부팅 순서를 변경하지 않는 한) YaST를 사용하여 Windows 부팅 로더를 기본 부팅으로 설정합니다. 프로그램이 로드되고 시간 초과되었습니다(8초, 아마도 중요하지 않음).
문제는 다중 모니터 설정이 있고 어떤 이유로 그래픽 카드가 측면 모니터를 기본 모니터로 사용한다는 것입니다(BIOS는 여기에 표시되고 그래픽 드라이버가 로드되기 전에 다른 모든 항목이 표시됨). 그 화면은 전원에 연결되어 있지도 않습니다(사용하지 않을 때 에너지 뱀파이어가 될 필요는 없습니다). 즉, grub은 해당 화면에서만 로드되므로 정상적으로 Windows로 부팅하거나(아무 작업도 하지 않음) 옵션을 선택할 수 있는 동안(키를 눌러) 다른 모니터를 연결하고 켜야 하거나, 아니면 맹목적으로 모니터를 선택해야 합니다. (사용 가능한 옵션 중 일부를 고려하면 아마도 좋은 생각이 아닐 것입니다.) 다른 모니터를 여는 것은 KDE가 자동으로 기본 모니터로 전환하기 때문에 이상적이지 않습니다. 그래서 디스플레이 설정(그래픽 카드에 5개의 장치가 연결되어 있을 때 로드하는 데 약간의 시간이 걸립니다)으로 가서 재설정해야 했습니다. 그러나 그것은 다른 게시물에 대한 불만입니다(지금 도움을 드릴 수 없다면 상관없습니다).
그래서 내가 찾고 있는 것은... 초기 카운트다운을 취소하면 Linux의 기본값으로 또 다른 카운트다운이 시작되도록 grub을 설정할 수 있는 방법이 있습니까? 아니면 메인 디스플레이가 켜지고 Linux로 부팅된다는 것을 알 수 있을 때까지 부팅할 때 키를 설정하면 됩니다. 아니면 그런 것... 기본적으로 grub에서 기본이 아닌 항목을 선택하는(바람직하게는 구체적인) 맹목적인 방법입니까?
귀하의 답변에 미리 감사드립니다!
답변1
Grub 2는 단축키를 지원하므로 이를 달성할 수 있습니다.
grub.cfg를 편집하고 --hotkey=l 매개변수를 메뉴 항목에 추가하면 원하는 것을 얻을 수 있습니다. 그러나 grub-update가 실행되면 /boot/grub.cfg 파일을 덮어쓰게 됩니다.
듀얼부팅이 없어서 제대로 테스트는 못했는데, /etc/grub.d/10_linux 편집이 제 시스템에서는 잘 되더라고요.
파일에서 다음 섹션을 찾으세요.
linux_entry ()
{
os="$1"
version="$2"
type="$3"
args="$4"
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
if [ x$type != xsimple ] ; then
case $type in
recovery)
title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "$(gettext "${GRUB_RECOVERY_TITLE}")")" ;;
init-*)
title="$(gettext_printf "%s, with Linux %s (%s)" "${os}" "${version}" "${type#init-}")" ;;
*)
title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
esac
if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title>
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`>
fi
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | >
else
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --hotkey=l \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" |>
fi
if [ "$quick_boot" = 1 ]; then
echo " recordfail" | sed "s/^/$submenu_indentation/"
fi
if [ x$type != xrecovery ] ; then
save_default_entry | grub_add_tab
fi
그리고 추가하세요--핫키=l매개변수가 있는 위치입니다. grub-update를 실행하고 l을 누르면 Linux로 직접 부팅할 수 있는지 테스트합니다.
답변2
올바른 방향을 알려준 @shaola에게 감사드립니다! 적어도 내 컴퓨터에서는 구성이 필요하지 않은 것으로 나타났습니다. Grub에는 이미 이러한 기능이 내장되어 있는 것으로 나타났습니다! 내가 발견했을 때 이 모든 것은 이미 다음과 같습니다 /etc/grub.d/10_linux
.
hotkey=1
incr_hotkey()
{
[ -z "$hotkey" ] && return
expr $hotkey + 1
}
print_hotkey()
{
keys="123456789abdfgijklmnoprtuvwyz"
if [ -z "$hotkey" ]||[ $hotkey -eq 0 ]||[ $hotkey -gt 30 ]; then
return
fi
echo "--hotkey=$(expr substr $keys $hotkey 1)"
}
linux_entry ()
{
os="$1"
version="$2"
type="$3"
args="$4"
if [ -n "${linux_root_device_thisversion}" ]; then
root_device="root=${linux_root_device_thisversion}"
else
root_device=""
fi
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
if [ x$type != xsimple ] ; then
case $type in
recovery)
title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;;
*)
title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
esac
if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
fi
echo "menuentry '$(echo "$title" | grub_quote)' $(print_hotkey) ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
hotkey=$(incr_hotkey)
else
echo "menuentry '$(echo "$os" | grub_quote)' $(print_hotkey) ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
hotkey=$(incr_hotkey)
fi
if [ x$type != xrecovery ] ; then
save_default_entry | grub_add_tab
fi
# Use ELILO's generic "efifb" when it's known to be available.
# FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
echo " load_video" | sed "s/^/$submenu_indentation/"
if grep -qx "CONFIG_FB_EFI=y" "${config}" 2> /dev/null \
&& grep -qx "CONFIG_VT_HW_CONSOLE_BINDING=y" "${config}" 2> /dev/null; then
echo " set gfxpayload=keep" | sed "s/^/$submenu_indentation/"
fi
else
if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
echo " load_video" | sed "s/^/$submenu_indentation/"
fi
echo " set gfxpayload=$GRUB_GFXPAYLOAD_LINUX" | sed "s/^/$submenu_indentation/"
fi
echo " insmod gzio" | sed "s/^/$submenu_indentation/"
나는 정확히 훌륭한 프로그래머는 아닙니다. 사실 그것이 어떤 언어인지조차 알 수 없지만(자체 언어가 아닌 이상) 목록의 각 항목에는 자동 증가 단축키가 있을 것으로 추측됩니다. 내 OpenSUSE 설치가 목록 맨 위에 있습니다. 즉, 1
부팅 시 이를 매쉬업하고 로그인을 기다려야 합니다.Apple을 모방하여 내 인생을 장악하려는 회사의 운영 체제를 강제로 사용하지 않음리눅스를 로드하세요.
또한 내 것과 같은 설정이 있고(또는 적어도 내 것과 같은) @shaola의 아이디어를 시도하고 싶다면 grub2-mkconfig
대신 grub-update
배포판이나 버전 유형을 실행해야 했습니다. 확실히 내 전문 분야는 아니다.