我有一个 64 位双启动系统,运行 Windows 7 和 Linux Mint 17 Cinnamon。我使用 rEFInd 以图形方式选择要启动的系统。
关于 rEFInd 的一些信息:
- 它是一个 EFI 引导加载程序。
- 它使用外部基于文本的配置文件 (*.conf)
- 配置文件可以引用其他的。但是,在运行时,仅
refind.conf
尊重第一个文件 ( ) 引用的外部文件。 - 多次引用的特定属性将作为级联处理 - 也就是说,每个引用都会覆盖所有先前的引用;只有最后一个受到尊重。
...我的 efi 驱动器上存储了一些配置文件。在 (efi) 启动时,会加载这些配置文件:
refind.conf
- 默认的样板设置文件。该文件按顺序引用以下两个文件。settings.conf
- 一个单独的、干净的石板,用于我最喜欢的设置。它由 refind.conf 引用。此处的任何设置都将覆盖 refind.conf。auto_settings.conf
- 包含通过编程方式动态处理的设置。也被引用refind.conf
。此处的任何设置都将覆盖refind.conf
.
除了这些文件之外,我还有一些替代文件,它们以编程方式交换为auto_settings.conf
:
auto_default.conf
- 当此文件的内容包含在其中时,这auto_settings.conf
会导致我的系统处于默认状态。这会在启动时向我显示一个菜单,提示我在 Windows 和 Linux 之间进行选择。系统等待我的输入。auto_mint.conf
- 当该文件的内容包含在 refind.conf 中时,rEFInd 将跳过 GUI 菜单,直接启动 Linux Mint。auto_win7.conf
- 当该文件的内容包含在 refind.conf 中时,rEFInd 将跳过 GUI 和启动窗口。
这就是(我认为)你需要了解 rEFInd 才能解决这个问题的全部内容。
接下来,系统:
当我启动系统时,它会询问我要加载哪个操作系统。假设我选择窗户。
它启动 Windows。
然后,我想进入Linux。
我可以右键单击桌面,然后单击“启动到 Linux”。
使用注册表,我在桌面的上下文菜单中创建了一个条目来触发自定义批处理文件。当调用批处理文件时,此注册表项还将特定参数传递给批处理文件,以指示其在运行时的功能。
所以,此时此刻,我的批处理文件(亲切地称为bootfacilitator.bat
)正在出色地完成其工作。在 EFI 分区上,我的批处理文件将 的内容替换auto_default.conf
为auto_mint.conf
.如果该操作成功(确实如此),则会重新启动系统。
此外,根据启动windows,
bootfacilitator
也被称为透明地,当时用于将 的内容替换为 的内容的
功能 。auto_settings.conf
auto_default.conf
系统关闭并启动到 rEFInd,这会跳过 GUI 并启动 Linux。
我需要Linux将 的内容替换auto_settings.conf
为 的内容auto_default.conf
,或者我陷入仅限 linux 的引导场景。我不喜欢。我所要做的就是在启动时替换文件的内容。
bootfacilitator.sh
我有一个包含在中的脚本( ) /mnt/data/Backup/Software/Linux
。
在linux中,bootfacilitator.sh
应该将 的内容替换/mnt/efi/EFI/boot/auto_settings.conf
为 的内容/mnt/efi/EFI/boot/auto_default.conf
。
此外,我对这个项目还有一些其他目标。我还希望在 Linux 桌面上有两个上下文菜单条目,以镜像 Windows 桌面上下文菜单中的条目:“启动到 Windows”和“重新启动 Linux”。
最终结果是拥有从一个操作系统到另一个操作系统的流畅工作流程,并具有可扩展性以合并其他操作系统。
PS我的fstab:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda1 /mnt/efi vfat defaults 0 0
UUID=f9750eee-576b-46b2-a0a1-f6ad34f4d526 / ext4 errors=remount-ro 0 1
UUID=1f49ddc3-88d1-40e6-b706-7623a4fb47ac none swap sw 0 0
/dev/sda4 /mnt/osx hfsplus defaults 0 0
/dev/sda3 /mnt/win_7 ntfs defaults 0 0
/dev/sda5 /mnt/data ntfs defaults 0 0
/mnt/data/Videos /home/rich/Videos none bind 0 0
/mnt/data/Documents /home/rich/Documents none bind 0 0
/mnt/data/Music /home/rich/Music none bind 0 0
/mnt/data/Pictures /home/rich/Pictures none bind 0 0
/mnt/data/Downloads /home/rich/Downloads none bind 0 0
/mnt/data/Public /home/rich/Public none bind 0 0
bootfacilitator.sh
:
#!/bin/sh
#description: Re-Enables EFI multi-select boot menu (in case of forced selection scenario)
sudo cp /mnt/efi/EFI/Boot/auto_default.conf /mnt/efi/EFI/Boot/auto_settings.conf
答案1
有几种方法可以实现此目的:
- 在 中创建一个
.desktop
文件~/.config/autostart/
。这将在您登录时运行。我们类似于sudo cp input.txt output.txt
命令。 - 更强大的解决方案是创建一个 Upstart 作业,该作业将在系统启动时运行。