美しく編集するgrub.cfg


10

編集:(明確にするため)構成ファイル(おそらくgrub.cfgですが、必ずしもそうとは限りません)を編集して、grubブートメニューの外観を変更しようとしています。

したがって、すべてのubuntuユーザーは、いくつかのカーネルアップグレード後にブートメニューがいっぱいになることを知っています。menu.lstの時代に戻ると、メニューを微調整して不要なオプションを非表示にしながら、引き続き使用できるようにすることができます。

たとえば、grubメニューが次のようになっているとします。

A
B
C
D

BとCの間に空のオプションを挿入することで、オプションCとDを非表示にすることができます。これにより、オプションCとDは起動時に表示されなくなりますが、起動メニューでスクロールダウンすると表示されます。

これと同じトリックをgrub.cfgで試しても、結果はまったく得られませんでした。そこで、grub.cfgファイルを編集して、新しいgrubメニューでこれと同じ結果を得る方法を探しています。他の審美的な微調整も大歓迎です。

ありがとう

EDIT2:メニューエントリを非表示にできない場合、それらの間にセパレーターを挿入する方法が欲しいので、メニューは次のようになります。

A
B

-その他
-C
D


grub.cfgにすべての変更を加えますか?自動生成するためにupdate-grubを実行している場合は、おそらく/etc/grub.dの下のスクリプトを編集する必要があります。簡単な概要については、superuser.com / questions / 102692 /…を参照してください。
いんちきキホーテ

@〜quack:これは少し役立ち、かなり有益です。メニューエントリを非表示にする方法、または少なくともそれらの間にセパレータを配置する方法を私はまだ望んでいます。
Malabarba

それで、古いカーネルをアンインストールするだけでは選択肢がないと思いますか?
ボビー

回答:


8

まず、UbuntuがGrub2を構成する方法を理解します。

  • /boot/grub/grub.cfgはGrub2メニューです
  • 更新-grubのコマンド、そのファイルを自動生成します
  • ... / etc / defaults / grubからデフォルト設定を読み取る
  • ...そして/etc/grub.dでシェルスクリプトを実行する

あなたが編集したくないのであれば、grub.cfg各カーネルアップデート後、あなたはでスクリプトを微調整したい/etc/grub.d変更が適用されいつでも取得して更新-GRUBが実行されます。


次に、最初の質問に直接回答するために、特定のブートオプションを非表示にしてGrubメニューからアクセスできるようにする方法についてはよく知りません。Grub2で再実装されなかったGrub1に関する多くの小さなことがあり、これがそれらの1つであったとしても私は驚きません。

代わりに、メニューのフォントの色を背景色と同じに設定することで、すべてのメニューエントリを(強調表示されるまで)非表示にすることができます。で/etc/grub.d/05_debian_theme、変更menu_color_normal最初の色(フォント)が第2の色(背景)に一致するように。カーソルの下のエントリが表示されるように、menu_color_highlightを別のままにします。

# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white

# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white

Grubメニューにセパレータを取得します。

Grub1では、このような新しいエントリを挿入します。私が覚えているように、あなたはそれを有効なメニューエントリにするためにルート宣言が必要でした、そうでなければGrub1はそれを無視しました。

# separator
title  --------------------
root

Grub2も似ているのではないかと思います。非常に基本的なメニューエントリは、grub.cfgでは次のようになります。

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}

二重引用符で囲まれた「何でも」がタイトルとして表示されるので、セパレーターを偽造することができます。Grub1と同様に、Grub2はlinuxキーワードで実際のメニューエントリとして扱うことを望んでいるため、誤って選択しないように注意してください。

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}

残念ながら、「何でも」は何も意味しません。これをテストしている間に、長いダッシュ( "----------------")を試しましたが、うまくいきませんでした。しかし、上記の短いドットの文字列が好きなので、それを使用できます。

.....

さて、それが1つのセパレータを作る方法です。束を作り、それらを自動的に必要な場所に配置するには、それらを/etc/grub.d内のスクリプトに追加する必要があります。

この例では、grub.cfgのさまざまなセクションの間に単純なセパレータを配置しましょう。/etc/grub.dを見ると、次のスクリプトが表示されます。

  • 00_header
  • 05_debian_theme
  • 10_linux-Ubuntuカーネルとリカバリのエントリ
  • 20_memtest86 +-Memtest86 +のエントリ
  • 30_os-prober-Windowsおよびその他のLinuxディストリビューションのエントリ
  • 40_custom-デフォルトでは何もありません。特別なユーザーエントリはここに移動できます

新しいスクリプトであるseparatorを作成し、その中に以下を配置します。

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF

次に、そのスクリプトを最初のセパレーターの場所に移動し、それを他のセパレーターの場所にリンクします。スクリプトは順番に実行されるため、最初のスクリプトを10_linuxの前に配置したい場合は、09_separatorなどの名前を付けます。

cd /etc/grub.d

# start the editor, paste in the script above, save, and exit
sudo nano separator

# set executable
sudo chmod +x separator

# rename into the first position
mv separator 09_separator

# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator

/ etc / default / grubで特定のエントリをデフォルトとして設定している場合は、それを更新する必要があるかもしれません-Grub2は0からメニューエントリのカウントを開始し、これらの各「セパレーター」は有効なエントリなので、それらもカウントされます。以前のデフォルトエントリが0で、その前にセパレータを1つ追加している場合は、GRUB_DEFAULTを1 に変更してください。

今すぐ実行して更新-GRUBを、そして調べる/boot/grub/grub.cfg -あなたがそこにセパレータが表示されるはずです。もしそうなら、再起動してチェックアウトしてください。

....

異なるカーネルバージョン間など、セパレータを別の場所に配置する場合は、10_linux(または別のスクリプト)を直接編集し、セパレータを追加する適切な場所を見つける必要があります。上記のスクリプトの行を使用できます。最初の#!/ bin / sh行を除くすべてを含めます。


もっときれいにしたい場合は、Grubのスプラッシュ画像やテーマを使用してください。これらのトピックについてレインチェックを提供する必要がありますが、以下のリソースを確認してください。


リソース:

UbuntuForumには、私が知って気に入っている2つの大きなGrub2ガイドがあります。

GNU Grub 2は、もう1つの優れたリソースです。彼はKarmicのGrub2を微調整するためのスクリプトのセットを持っています(完全な開示:私はそれらを試していません)。

Grub WikiのTheme Formatページは、Grub2テーマをハッキングするための必需品です。


うわー、答えてくれてありがとう。一部の機能がこのバージョンに到達していないのは残念です。私はすでにセパレーターを挿入しようとしましたが、括弧の間を空白のままにしたので機能しませんでした。上記のすべてが機能しているようです。再度、感謝します。
マラバルバ2010

@Dコナーズ-ええ、Grub1に関していくつか見逃していることがいくつかありますが、全体として、Grub2は改善されていると思います。独自の学習曲線があります。開発者はテキストメニューを犠牲にしてGrub2のグラフィック機能にもっと力を入れていると思いますが、プロジェクトが発展するにつれて、おそらくそれは変わるでしょう。
quack quixote、

5

区切り文字は、最初の文字がスペースの場合、ダッシュで構成されます。また、区切りセクションにlinuxコマンドを使用する必要はありません。次のようなコマンドを使用できます。

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

または、「true」で静かに戻ることもできます。

menuentry " -----------------------------------------------------------" {
  true
}

0

他のカーネルを使用しない場合は、適切なパッケージマネージャーインターフェイスを使用して削除できます。これにより、grub.cfgから自動的に削除されます


現在のインストールを失敗した場合、トラブルシューティングにそれらを使用することはほとんどありません。さらに、カーネルはほんの一例であり、他にも隠しておきたいブート可能パーティションが3つありますが、それらは引き続き使用可能です。
マラバルバ2010

(混乱を避けるために。「非表示」と言ったとき、「パーティションを非表示にする」という意味ではなく、「ブートメニューから問題のあるOSエントリを非表示にする」という意味でした)
Malabarba
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.