几个启动脚本?

几个启动脚本?

我希望 kubuntu 在启动时询问我 - 我想要使用哪个配置文件。应该有一个默认答案,它会在 3 秒内自动运行。就像 Grub 询问您想要启动哪个操作系统一样。

有多个启动选项的理由:通常我默认启动很多东西:krusader、firefox、konsole、emacs……因此完全加载大约需要 1 分钟。但有时 - 我正在奔波,只需要做某件事 - 所以我只需要 krusader。我会制作几个启动脚本……所以我想知道 - 是否可以在启动时在它们之间进行选择?

也许可以使用 Grub 来实现...

编辑

Grub 根本没有询问我启动配置文件 - 甚至不是“正常模式”或“恢复模式”。我让他用 Grub Editor(该软件包名为kcm-grub2)来做这件事:

sudo sed -i '$ a\deb http://download.opensuse.org/repositories/home:ksmanis/xUbuntu_11.10/ /' /etc/apt/sources.list
wget -q http://download.opensuse.org/repositories/home:ksmanis/xUbuntu_11.10/Release.key -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install kcm-grub2

安装并重启后,在System settings->Startup and Shutdown新项目出现了:Grub2 Bootloader。在那里我勾选了“3秒内自动选择默认启动项”。

此后,蚓状解决方案 我已将gnu-linux menuentry记录复制到 的末尾/etc/grub.d/40_custom,并在那里添加了“生产力概况”。以下是修改后的 的文本40_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Full' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=1
        initrd  /boot/initrd.img-3.0.0-16-generic
}
menuentry 'Public' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=2
        initrd  /boot/initrd.img-3.0.0-16-generic
}
menuentry 'Fastest' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=3
        initrd  /boot/initrd.img-3.0.0-16-generic
}

productivity-profile由启动 bash 脚本拾取。

就是这样。现在我有 5 个启动配置文件:清洁、恢复、完整、公共、最快。

答案1

您可以在启动时运行以下脚本:

#!/bin/bash

echo 'Press a key...'
echo '[1] Full profile (default)'
echo '[2] whatever 2'
echo '[3] another one'

read -t 3 -n 1 -p "Choose profile: " profile

echo

case $profile in
   1)
      # Run script for profile 1
      ./script-profile1.sh
      ;;
   2)
      # Run script for profile 1
      ./script-profile2.sh
      ;;
   3)
      # Run script for profile 1
      ./script-profile3.sh
      ;;
   *)
      echo Invalid choice
      ;;
esac

如果您愿意,您可以包含一个循环,以便在出现无效选择时再次询问您,或者您可以完全用您最喜欢的编程语言对其进行编程。

但我同意,在启动过程开始时选择配置文件会更好。您可以打开计算机,选择配置文件,然后在一切启动后返回。但我不知道如何使用 GRUB 中的参数。

答案2

在...的帮助下@Lekensteyn,我制作了一个可以在 GRUB 中选择配置文件的版本。自定义菜单的创建可能还有待改进。

步骤 1:创建自定义 GRUB 菜单

您需要使用附加参数创建 GRUB 菜单项。您可以按照本说明。因此,将您的默认条目从/boot/grub/grub.cfg(带有 的行menuentry ... { ... })复制到/etc/grub.d/40_custom

然后编辑(复制的条目/etc/grub.d/40_custom)其中所述的行linux /boot...,并在行末添加以空格分隔的行:

productivity-profile=1

您还可以编辑菜单项的名称,因此将该部分更改menuentry 'Ubuntu, with...为类似的内容menuentry 'Ubuntu (Profile 1), with...

为您的每个配置文件添加这样的菜单条目(每个配置文件都有一个唯一的编号)。

您可以从其他文件中删除执行权限,/etc/grub.d/以便删除这些菜单项。之后别忘了运行sudo update-grub

请注意,如果按照此说明操作,则内​​核更新后必须手动更改 grub 菜单!(您可以改进这个答案并描述如何/etc/grub.d/相应地编辑脚本。)

第 2 步:检查第 1 步是否成功

重启并选择其中一个配置文件。然后在终端中运行:

cat /proc/cmdline 

你应该得到类似这样的结果:

BOOT_IMAGE=/boot/vmlinuz-2.6.... root=...  productivity-profile=2

...行尾的数字必须是所选的配置文件。

步骤 3:根据需要采用脚本并在启动时运行

然后使用此脚本运行您的启动脚本:

#!/bin/bash    

profile=$(cat /proc/cmdline |sed 's/.*productivity-profile=\([0-9]\).*/\1/g')

echo Running profile $profile ...

case $profile in
   1)
      # Run script for profile 1
      ./script-profile1.sh
      ;;
   2)
      # Run script for profile 1
      ./script-profile2.sh
      ;;
   3)
      # Run script for profile 1
      ./script-profile3.sh
      ;;
   *)
      echo Error
      ;;
esac

相关内容