Boot

使用引導參數在引導後執行某些操作

  • December 26, 2013

我問自己是否可以使用 Grub 2 告訴作業系統在啟動後執行哪些操作。

背景:

我有一台安裝了 Debian Wheezy 的 HTPC。有時我想將系統用作正常桌面,但有時我只想啟動XBMC

我嘗試了使用OpenElec的雙啟動,這不是很方便,因為我無法在 OpenElec 中安裝我的 RAID-1。

我的下一個嘗試是在 XBMC 中使用第二個最小的 Debian 安裝。有了這個解決方案,我仍然可以在 Grub 中的正常桌面和 HTPC 用途之間進行選擇。

但現在我認為這可能會浪費時間和磁碟空間,因為我已經安裝了 Debian。如果有某種引導參數可以用來告訴我的正常 Debian 安裝,那就更容易了

  • “啟動到桌面”或
  • “引導至 XBMC”

然後我只需要 Grub 中的第二個條目來處理這個引導參數。

這有可能嗎?

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

引用自:https://unix.stackexchange.com/questions/70620