我问自己是否可以使用 Grub 2 告诉操作系统在启动后执行哪些操作。
背景:
我有一台安装了 Debian Wheezy 的 HTPC。有时我想将系统用作常规桌面,但有时我只想拥有西安BMC开始了。
我尝试了双启动开放电子这不是很方便,因为我无法在 OpenElec 中安装 RAID-1。
我的下一次尝试是使用带有 XBMC 的第二个最小 Debian 安装。有了这个解决方案,我仍然可以在 Grub 中选择常规桌面和 HTPC 用途。
但现在我认为这可能会浪费时间和磁盘空间,因为我已经安装了 Debian。如果有某种引导参数可以用来告诉我常规的 Debian 安装,那就更容易了
- “启动到桌面”或
- “启动至 XBMC”
然后我只需要 Grub 中的第二个条目来处理这个启动参数。
这有可能吗?
答案1
Linux 内核的任何命令行参数都将显示在/proc/cmdline
.您可以在其中放置任何您喜欢的内容(只要它不是内核或任何驱动程序或 initrd 系统识别的参数)。例如,您可以使用精美的 grub 菜单来构建它,然后在启动脚本中使用它来/etc/rc.local
决定如何处理它。
例如添加一个/etc/grub.d/09-xcmd
:
#! /usr/bin/tail -n+2
menuentry 'XMBC' {
set xcmd='xcmd=xmbc'
echo 'Now select a kernel'
sleep 1
}
然后添加到/etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \${xcmd}"
跑步update-grub
。
在 中/etc/rc.local
,您可以:
case $(cat /proc/cmdline) in
(*xcmd=*) exec sudo -Hu marcel startx;;
esac
在你的~/.xinitrc
:
cmdline=$(cat /proc/cmdline)
case $cmdline in
(*xcmd=*)
xcmd=${cmdline##*xcmd=}
xcmd=${xcmd%% *}
"$xcmd" &
esac