Thẩm mỹ chỉnh sửa grub.cfg


10

EDIT: (cho rõ ràng) Tôi đang tìm cách thay đổi giao diện của menu khởi động grub, bằng cách chỉnh sửa các tệp cấu hình (có thể nhưng không nhất thiết là grub.cfg).

Vì vậy, bất kỳ người dùng Ubuntu nào cũng biết trình đơn khởi động được lấp đầy như thế nào sau một vài nâng cấp kernel. Quay trở lại thời của menu.lst, bạn có thể điều chỉnh menu để ẩn các tùy chọn không mong muốn nhưng vẫn giữ chúng có sẵn.

Chẳng hạn, nếu menu grub của bạn trông như thế này:

A
B
C
D

Bạn có thể ẩn các tùy chọn C và D bằng cách chèn tùy chọn trống giữa B và C. Bằng cách này, các tùy chọn C và D sẽ không hiển thị trong khi khởi động, nhưng sẽ hiển thị nếu bạn cuộn xuống chúng trong menu khởi động.

Thử thủ thuật tương tự trong grub.cfg dẫn đến không có kết quả gì. Vì vậy, tôi đang tìm cách để đạt được kết quả tương tự với menu grub mới, bằng cách chỉnh sửa tệp grub.cfg. Các chỉnh sửa thẩm mỹ khác cũng được chào đón.

Cảm ơn

EDIT2: Nếu không thể ẩn các mục menu, tôi muốn có một cách để phân cách giữa chúng, vì vậy menu sẽ như thế này:

A
B

-Những người khác--
C
D


Bạn có muốn thực hiện tất cả các thay đổi cho grub.cfg ? nếu bạn đang chạy update-grub để tự động tạo nó, có lẽ bạn muốn chỉnh sửa các tập lệnh trong /etc/grub.d ; xem superuser.com/questions/102692/ đá để biết tổng quan ngắn gọn.
quack quixote

@ ~ quack: điều đó giúp một chút, và khá nhiều thông tin. Tôi vẫn hy vọng có một cách để ẩn các mục menu, hoặc ít nhất là đặt một dấu phân cách giữa chúng.
Malabarba

Vì vậy, tôi đoán chỉ cần gỡ cài đặt các hạt nhân cũ không phải là một lựa chọn?
Bobby

Câu trả lời:


8

Trước tiên, hãy hiểu cách Ubuntu cấu hình Grub2.

  • /boot/grub/grub.cfg là menu Grub2
  • lệnh update-grub tự động tạo tập tin đó
  • ... bằng cách đọc cài đặt mặc định từ / etc / defaults / grub
  • ... và đang chạy shellscripts trong /etc/grub.d

Vì vậy, nếu bạn không muốn chỉnh sửa grub.cfg sau mỗi lần cập nhật kernel, bạn muốn điều chỉnh các tập lệnh trong /etc/grub.d để thay đổi của bạn được áp dụng bất cứ khi nào update-grub được chạy.


Thứ hai, để trả lời trực tiếp câu hỏi đầu tiên của bạn, tôi không quen với bất kỳ phương tiện nào làm cho các tùy chọn khởi động cụ thể trở nên vô hình nhưng vẫn có thể truy cập được thông qua menu Grub. Có rất nhiều điều nhỏ về Grub1 đã không được thực hiện lại trong Grub2, và nó sẽ không làm tôi ngạc nhiên nếu đây là một trong số chúng.

Thay vào đó, bạn có thể làm cho tất cả các mục menu trở nên vô hình (cho đến khi được tô sáng) bằng cách đặt màu phông chữ menu giống với màu nền. Trong /etc/grub.d/05_debian_theme , thay đổi menu_color_n normal để màu đầu tiên (phông chữ) khớp với màu thứ hai (nền). Để lại menu_color_highlight khác nhau, vì vậy mục dưới con trỏ hiển thị.

# 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

Bắt một dấu phân cách vào menu Grub.

Trong Grub1, bạn sẽ chèn một mục mới như thế này. Như tôi nhớ lại, bạn cần khai báo gốc để biến nó thành một mục menu hợp lệ, nếu không thì Grub1 đã bỏ qua nó.

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

Tôi nghi ngờ Grub2 có thể tương tự. Một mục menu rất cơ bản trông như thế này trong grub.cfg :

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

Vì "bất cứ điều gì" trong dấu ngoặc kép được hiển thị dưới dạng tiêu đề, bạn có thể giả mạo một dấu phân cách với điều đó. Giống như Grub1, Grub2 muốn từ khóa linux coi nó như một mục thực đơn, vì vậy hãy cẩn thận, bạn không vô tình chọn nó.

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

Thật không may, "bất cứ điều gì" không có nghĩa gì cả ; Trong khi tôi đang thử nghiệm điều này, tôi đã thử một chuỗi dấu gạch ngang dài ("----------------") và nó không bao giờ hoạt động. Nhưng nó thích chuỗi chấm ngắn được hiển thị ở trên, vì vậy bạn có thể sử dụng nó.

.....

Bây giờ, đó là cách tạo một dải phân cách. Để tạo một bó và đặt chúng ở nơi bạn muốn chúng tự động, bạn cần thêm chúng vào tập lệnh trong /etc/grub.d .

Trong ví dụ này, hãy đặt một dấu phân cách đơn giản giữa các phần khác nhau của grub.cfg . Nếu bạn nhìn vào /etc/grub.d , bạn sẽ thấy các tập lệnh sau:

  • 00_ tiêu đề
  • 05_debian_theme
  • 10_linux - mục nhập cho hạt nhân & phục hồi Ubuntu
  • 20_memtest86 + - mục nhập cho Memtest86 +
  • 30_os-prober - các mục cho Windows và các bản phân phối Linux khác
  • 40_custom - không có gì theo mặc định; mục người dùng đặc biệt có thể vào đây

Chúng tôi sẽ tạo một tập lệnh mới, dấu phân cách và đặt đoạn mã sau vào nó:

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

Bây giờ, di chuyển tập lệnh đó vào vị trí cho dấu phân cách đầu tiên và liên kết nó vào vị trí cho các tập lệnh khác. Các tập lệnh được thực hiện theo thứ tự, vì vậy nếu bạn muốn tập lệnh đầu tiên xuất hiện trước 10_linux , hãy đặt tên là 09_separator hoặc một cái gì đó.

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

Nếu bạn có một mục nhập cụ thể được đặt làm mặc định trong / etc / default / grub , bạn có thể cần cập nhật nó - Grub2 bắt đầu đếm các mục menu ở 0 và mỗi "dấu phân cách" này là một mục hợp lệ, vì vậy chúng cũng được tính. Nếu mục nhập mặc định trước đó của bạn là 0 và bạn đã thêm một dấu phân cách trước nó, hãy nhớ thay đổi GRUB_DEFAULT thành 1

Bây giờ hãy chạy update-grub và kiểm tra /boot/grub/grub.cfg - bạn sẽ thấy các dấu phân cách trong đó. Nếu bạn làm như vậy, khởi động lại và kiểm tra chúng.

....

Nếu bạn muốn đặt dấu phân cách ở nơi khác, giả sử, giữa các phiên bản kernel khác nhau, bạn sẽ cần chỉnh sửa trực tiếp 10_linux (hoặc tập lệnh khác) và tìm vị trí thích hợp để thêm dấu phân cách. Bạn có thể sử dụng các dòng từ kịch bản trên; bao gồm mọi thứ trừ dòng #! / bin / sh đầu tiên .


Nếu bạn muốn một cái gì đó đẹp hơn, hãy sử dụng hình ảnh hoặc chủ đề giật gân Grub. Tôi cần cung cấp cho bạn một cơn mưa về các chủ đề đó, nhưng kiểm tra các tài nguyên dưới đây.


Tài nguyên:

Có hai hướng dẫn Grub2 lớn trên UbuntuForums mà tôi đã biết và yêu thích:

GNU Grub 2 là một tài nguyên tuyệt vời khác. Anh ta có một tập các kịch bản để điều chỉnh Grarm2 của Karmic ( tiết lộ đầy đủ: Tôi chưa thử chúng ).

Trang định dạng chủ đề của Grub Wiki là bắt buộc để hack các chủ đề Grub2.


Wow, cảm ơn vì câu trả lời. Thật xấu hổ khi thấy một số tính năng chưa được đưa vào phiên bản này. Tôi đã thử chèn một dấu phân cách, nó không hoạt động vì tôi để trống giữa các dấu ngoặc. Tất cả mọi thứ ở trên dường như đang làm việc. Cảm ơn một lần nữa.
Malabarba

@D Connors - vâng, có một vài điều tôi nhớ về Grub1, nhưng nói chung tôi nghĩ Grub2 là một sự cải tiến. nó có đường cong học tập riêng của nó. Tôi hy vọng các nhà phát triển đã nỗ lực nhiều hơn vào khả năng đồ họa của Grub2 với chi phí của menu văn bản, nhưng có lẽ điều đó sẽ thay đổi khi dự án phát triển.
quack quixote

5

Dấu phân cách có thể được tạo thành dấu gạch ngang nếu ký tự đầu tiên của nó là khoảng trắng. Ngoài ra, không cần thiết phải sử dụng lệnh linux cho phần phân cách, bạn có thể sử dụng bất kỳ lệnh nào như thế này:

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

Hoặc thậm chí "đúng" để âm thầm trở lại:

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

0

Nếu bạn không sử dụng các hạt nhân khác, bạn có thể loại bỏ chúng bằng giao diện quản lý gói nào phù hợp với bạn. Điều này tự động loại bỏ chúng khỏi grub.cfg


Tôi hiếm khi sử dụng chúng để khắc phục sự cố, khi tôi tình cờ cài đặt hiện tại. Thêm vào đó, các kernel chỉ là một ví dụ, tôi cũng có 3 phân vùng khởi động khác mà tôi muốn ẩn nhưng vẫn có sẵn chúng.
Malabarba

(để tránh nhầm lẫn. Khi tôi nói "ẩn" Tôi không có nghĩa là "ẩn phân vùng", tôi chỉ có nghĩa là "ẩn mục nhập hệ điều hành tương ứng khỏi menu khởi động")
Malabarba
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.