Boot
使用引導參數在引導後執行某些操作
我問自己是否可以使用 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