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.