web-dev-qa-db-ja.com

grub.cfgを美的に編集する

編集:(わかりやすくするために)構成ファイル(おそらくgrub.cfg)を編集して、grubブートメニューの外観を変更したいと考えています。

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

たとえば、グラブメニューが次のようになっている場合:

A
B
C
D

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

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

ありがとう

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

A
B

-その他-
C
D

10
Malabarba

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

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

したがって、カーネルを更新するたびにgrub.cfgを編集したくない場合は、/ etc /grub.dのスクリプトを微調整する必要があります。 update-grubが実行されるたびに変更が適用されるようにします。


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

代わりに、メニューのフォントの色を背景色と同じに設定することで、allメニューエントリを(強調表示されるまで)非表示にすることができます。に /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に、このような新しいエントリを挿入します。私が思い出したように、それを有効なメニューエントリにするためにroot宣言が必要でした。そうでない場合、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_linux09_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に

ここでupdate-grubを実行し、/ boot/grub/grub.cfgを調べます-そこにセパレータが表示されているはずです。そうした場合は、再起動して '日をチェックしてください。

..。

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


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


リソース:

UbuntuForumsには、私が知り、愛するようになった2つの大きなGrub2ガイドがあります。

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

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

8
quack quixote

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

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

または、黙って戻るには「真」です。

menuentry " -----------------------------------------------------------" {
  true
}
5
MarSoft

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

0
ajackbot