使用启动参数在启动后执行某些操作

使用启动参数在启动后执行某些操作

我问自己是否可以使用 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

相关内容