GRUB:2番目のタイムアウトや選択、ショートカットを使用する方法はありますか?

GRUB:2番目のタイムアウトや選択、ショートカットを使用する方法はありますか?

私は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が自分のコンピュータを所有しているとは思わず、私に尋ねずに起動順序を変更しない限り)に設定します。プログラムがロードされ、タイムアウトしました(8秒、おそらく重要ではありません)。

問題は、マルチモニタ設定があり、何らかの理由でグラフィックカードがサイドモニタをデフォルトモニタとして使用することです(BIOSはここに表示され、グラフィックドライバがロードされる前に他のすべての項目が表示されます)。その画面は電源に接続されていません(使用しないときにエネルギー吸血鬼になる必要はありません)。つまり、grubはその画面からのみロードされるため、通常どおりWindowsで起動するか(何もしない)オプションを選択できる間(キーを押して)、他のモニターを接続してオンにするか、盲目的にモニターを選択する必要があります。 (利用可能なオプションのいくつかを考えると、おそらく良い考えではありません。)他のモニタを開くことは、KDEが自動的にデフォルトのモニタに切り替えるために理想的ではありません。そのため、ディスプレイ設定(グラフィックカードに5つのデバイスが接続されているときにロードするのに少し時間がかかります)に行き、リセットする必要がありました。しかし、それは他の投稿に対する苦情です(今助けることができない場合は問題ありません)。

だから私が探しているのは...初期カウントダウンをキャンセルすると、Linuxのデフォルトで別のカウントダウンが始まるようにグラブを設定する方法はありますか?あるいは、メインディスプレイがオンになって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を模倣して私の人生を掌握したい会社のオペレーティングシステムを強制的に使用しないLinuxをロードしてください。

また、私と同じ設定があり(または少なくとも私のような)@shaolaのアイデアを試したい場合は、代わりにgrub2-mkconfigディストリビューgrub-updateションまたはバージョンタイプを実行する必要がありました。確かに私の専門分野ではありません。

関連情報