如何在从USB Live Session启动时绕过“试用/安装”屏幕?(无需在USB上安装)

这个问题已经被问过很多次了(我在这里找到了这里这里这里),但基本上每个人都建议将其完全安装到USB闪存驱动器上。但是出于许多原因(最重要的原因是使用Live会话,我可以通过桌面图标轻松安装Ubuntu),我确实需要它保持为一个LIVE会话,而不是“在USB上进行完全安装”。
所以,我跳过欢迎屏幕(并自动选择“尝试Ubuntu”选项)的限制是:
  • 必须是Ubuntu Live会话(或尽可能接近默认设置)。软件选择相同(例如,live会话中存在gparted,但不存在gimp),用户(名称和ID),行为(没有登录屏幕,没有sudo密码等),没有GRUB等。这排除了在USB上进行完整的Ubuntu安装。

  • 必须能够在计算机上安装Ubuntu(完整安装需要ISO文件、额外的USB存储器以及启动磁盘创建器的麻烦)

  • 如果可能,要像“基于文本的启动器”一样快(当您在内核加载后按下键时出现的那个)

  • 必须是完全自动化的,从引导到桌面都不需要人工干预。

  • 选择与默认语言不同的语言。它可以是硬编码的选择(实际上必须是这样,因为引导本身应该是完全无人值守的)。但最好容易更改(“容易”指编辑配置文件然后重新启动)

有可能吗?

到目前为止,我已经排除了以下提出的(很棒的)解决方案:

  • 在USB闪存中安装Ubuntu (出于上述所有原因)

  • 删除Ubiquity软件包 (这也会删除从该USB安装系统的能力)

  • Ubuntu定制工具包(ubk):有几个限制和注意事项,而且它甚至不在软件仓库中

  • Remastersys / LiLi:与完全直接的USB安装相同,只是定制过的。

一个理想的解决方案可能是"使用启动盘创建器创建USB闪存,然后打开它并删除/编辑/添加文件xxx、yyy、zzz"


我用建议的内容替换了我在syslinux.cfg中的USB上的代码,但是我仍然得到提示符。 (原始行:vesamenu.c32 prompt 0 timeout 50 ui gfxboot bootlogo)可能我应该对txt.cfg做些什么吗(如下所示):label persist menu label ^持久模式 kernel /casper/vmlinuz append bootkbd=us console-setup/layoutcode=en_US console-setup/variantcode=nodeadkeys locale=us_us persistent noprompt cdrom-detect/try-usb=true file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz splash -- label live menu label ^实时模式 kernel /casper/vmlinuz append - user142859
4个回答

这个指南是为Ubuntu(Gnome)制作的。对于Kubuntu(KDE),也适用,只有少数例外。
我已经成功让Live CD直接启动到一个无超时或花哨菜单的Live会话中,还可以选择安装语言包。
Live USB(16.04)
  1. 将安装有Ubuntu的USB插入
  2. 备份文件syslinux/syslinux.cfg。我们将对其进行修改,所以如果出现问题,需要将其替换回来。
  3. 打开syslinux目录下的以下文件:syslinux.cfgtxt.cfg
  4. 删除(或注释)syslinux.cfg中的所有内容。
  5. txt.cfg文件包含默认的GRUB菜单项。将其中的live项复制到syslinux.cfg中:

    default live
    label live
    menu label ^尝试Ubuntu而不进行安装
    kernel /casper/vmlinuz.efi
    append file=/cdrom/preseed/ubuntu.seed boot=casper cdrom-detect/try-usb=true persistent noprompt floppy.allowed_drive_mask=0 ignore_uuid initrd=/casper/initrd.lz quiet splash --
    
  6. 您可以在append行中添加适用于您设备的任何特定内核参数。

  7. 保存isolinux.cfg并使用USB启动系统。现在它将直接引导到桌面。

活动USB(13.10)

  1. 将带有Ubuntu安装的USB插入
  2. 备份文件isolinux/isolinux.cfg。我们将对其进行修改,所以如果出现问题,需要替换回来。
  3. 打开isolinux目录下的以下文件:isolinux.cfgtxt.cfg
  4. 删除isolinux.cfg中的所有内容。
  5. txt.cfg文件包含默认的GRUB菜单项。将live项拷贝到isolinux.cfg

    default live
    label live
    menu label ^尝试Ubuntu无需安装
    kernel /casper/vmlinuz.efi
    append file=/cdrom/preseed/ubuntu.seed boot=casper cdrom-detect/try-usb=true persistent noprompt floppy.allowed_drive_mask=0 ignore_uuid initrd=/casper/initrd.lz quiet splash --
    
  6. 您可以在append行中添加适用于您设备的任何特定内核参数。

  7. 保存isolinux.cfg并使用USB启动系统。它将直接引导到桌面。

source

活体 USB(11.04)

  1. 进入您的Live USB的根文件夹
  2. 进入syslinux目录
  3. syslinux.cfg文件设为可写
  4. 用以下内容替换syslinux.cfg文件的内容:

    default live
    label live
      say 正在启动Ubuntu Live会话...
      kernel /casper/vmlinuz
      append  file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash noprompt --
    
  5. 可选:本地化系统(见下文)

现场光盘

  1. 如果您的CD驱动器中有一个Live CD,请挂载它。否则,如果您有一个ISO文件可用,请通过在终端(根据实际文件名替换.iso)运行下一个命令将其挂载到/media/cdrom
  2. sudo mount -o loop,ro ubuntu-11.04-desktop-amd64.iso /media/cdrom
    
  3. 创建一个临时目录以存储CD内容,例如~/live-cdmkdir ~/live-cd
  4. 将CD的内容复制到文件夹~/live-cd/iso中(cp -r /media/cdrom ~/live-cd/iso
  5. 由于不再需要Live CD,可以卸载它(sudo umount /media/cdrom
  6. 打开~/live-cd/iso文件夹(cd ~/live-cd/iso
  7. 进入isolinux目录(cd isolinux
  8. 使isolinux.cfg文件可写(chmod u+w isolinux.cfg
  9. 使用以下内容替换isolinux.cfg文件的内容:
  10. default live
    label live
      say Booting an Ubuntu Live session...
      kernel /casper/vmlinuz
      append  file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.lz quiet splash --
    
  11. 可选:本地化系统(见下文)
  12. 打开终端并运行以下命令:
  13. cd ~/live-cd
    chmod u+w iso/isolinux/isolinux.bin
    mkisofs -r -V "Ubuntu Live session" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ubuntu-11.04-live-amd64.iso iso
    
  14. 新的ISO文件将位于~/live-cd/ubuntu-11.04-live-amd64.iso。为节省空间,可以删除~/live-cd/iso目录(rm -rf ~/live-cd/iso
  15. 如果需要,现在将ubuntu-11.04-live-amd64.iso文件刻录到CD上。

本地化Ubuntu(翻译)

如果您希望系统使用英语、西班牙语、葡萄牙语、科萨语或简体中文,只需在append行中添加locale=引导选项,后面跟上enesptxhzh,如下所示:

... quiet splash locale=pt --

否则,如果您不想修改包含根文件系统(filesystem.squashfs)的文件,并且不介意绕过一些限制,请继续阅读。
打开终端并导航到~/live-cd/iso目录,将http://pastebin.com/VTdt9WFZ中的代码放入一个文件中(命名为install-locale),然后运行它。
该脚本会挂载filesystem.squashfs,从中获取语言包的版本信息,下载这些软件包并将其放入locale-hack目录中。接下来,创建一个脚本,在启动时安装语言包。为了使其生效,脚本还会修改syslinux.cfg或isolinux.cfg文件以应用这些更改。
您将被要求输入区域设置,可以输入类似nl或de的内容。该脚本并不聪明,无法理解Dutch或German之类的词汇。完成后,可以删除该文件。
需要执行的终端命令如下:
cd ~/live-cd/iso
wget http://pastebin.com/raw.php?i=VTdt9WFZ -O install-locale
bash install-locale
rm install-locale

请注意,添加语言包可能会导致生成的.iso文件大于700MB,无法放入CD中。但对于虚拟机来说,这是足够的。这种方法的副作用是Plymouth不起作用(即您无法获得漂亮的启动屏幕),但至少在登录时系统已经翻译了。否则,您需要手动安装language-pack-gnome-*。
参考资料:
- Syslinux示例:Syslinux example - Ubuntu帮助文档:自定义磁盘/刻录:Ubuntu Help on custominizing a disk / burning it

+1!太棒了!(使用Live USB方法)。我还考虑在append行中添加noprompt cdrom-detect/try-usb=true,因为这是在txt.cfg中的方式。你知道这些额外的参数是做什么用的吗?另外,这个解决方案能否改进以包括语言? - MestreLion
noprompt 在不要求移除光盘的情况下关闭系统。我将它添加到了Live USB的命令行中,因为在USB设备上没有意义。我不知道 cdrom-detect/try-usb=true 是做什么用的。由于尺寸原因,所有语言包都不会默认包含在Live CD中。如果要设置不同的区域设置(例如NL),请在 append 行中传递 locale=nl_NL 选项。这将设置区域设置,但不会设置Gnome的语言,因为该软件包在Live CD上根本无法使用。 - Lekensteyn
@mestreLion:更新了一个适用于本地环境的破解方法。 - Lekensteyn
@Lekensteyn:软件包可以在Live CD上使用,因为当您选择不同的语言时,Ubuntu会以该语言启动Live会话。我会尝试您关于“locale=pt_BR”的建议。也许那就是所需的全部。 - MestreLion
@MestreLion:其实不是这样的,我已经用locale=nl和在Try/Install中的语言选择菜单进行了测试。在这两种情况下,我都得到了一个英文布局,尽管locale命令输出的是nl_NL.UTF-8 - Lekensteyn
"nl_NL = Neaderlands 菜单中的选项,对吧?也许那个选项没有关联的语言包。但是尝试一下“Portugues do Brasil”,它可以启动巴西现场会话。无论如何,我会接受你的答案,因为我猜这是我们能得到的最接近的答案了。我们有任何聊天/irc/即时通讯可以进一步交流吗?" - MestreLion
聊天 @ http://chat.stackexchange.com/rooms/201/ask-ubuntu-general-room - Lekensteyn
是否有可能,活动的USB更改会破坏持久性?我清楚地记得当我把镜像“刻录”到我的USB存储设备时,已经打开了持久性选项,但在重新启动后,它明显没有记住我的更改。 - Michael Martin-Smucker
@MichaelMS 这不应该破坏持久性,因为修改会导致CD直接在Live会话中启动。尝试在append行中添加persistence参数:append file=/cdrom/preseed/ubuntu.seed boot=casper persistence initrd=/casper/initrd.lz quiet splash noprompt --(取自ubuntu wiki - Lekensteyn
@Lekensteyn 我已经将配置文件切换回原始状态,并且持久化工作正常,所以我倾向于认为这个答案在当前形式下不适用于持久化。我会确保在今天晚些时候回家后尝试添加persistence参数,谢谢! - Michael Martin-Smucker
因为我刚刚没有成功添加持久性:参数应该叫做 persistent,而不是 persistence。其他部分仍然运行得非常好! - sirprize
Ubuntu 14.04 LTS怎么样?13.10版本的“配方”适用吗? - Olof Bjarnason
13.10食谱适用于16.04和15.10版本! - kek
我在20.4 LTS上尝试过,但无法正常工作(我可以应用Live USB 16.4和13.10)。 - Joris
寻找20.04 Focal Fossa解决方案... - Dimitry K

在14.04版本及之前,Ubiquity使用upstart进行启动。您可以通过修改/etc/init/ubiquity.conf来禁用此功能。
1)如果您没有使用实际的Live安装,请先挂载casper-rw:
# Mount the usb_drive manually if nautilus has not done it for you
# Change sdb1 to the proper location of your usb drive, find it using sudo blkid
sudo mkdir /media/$USER/usb_drive
sudo mount /dev/sdb1 /media/$USER/usb_drive
# Create a mount point for the read-write file system and mount via loopback
sudo mkdir /media/$USER/casper-rw
sudo mount -o loop /media/$USER/usb_drive/casper_rw /media/$USER/casper-rw
cd /media/$USER/casper-rw

2)在Live安装中编辑etc/init/ubiquity.conf文件,并注释掉以下行:
#start on (starting gdm
#          or starting kdm
#          or starting xdm
#          or starting lxdm
#          or starting lightdm)

如果你正在重新制作光盘,你可以直接编辑 squashfs 系统中的主文件 ubiquity.conf。重启后,Ubiquity 将完全不会干扰你。
3) 卸载驱动器
sudo umount /media/$USER/*

我已经在20.04.1 LTS实时系统中尝试过了,但是这个方法不起作用。 - Joris

以上方法对于启动磁盘创建器和UNetbootin安装都非常有效。 如果您正在使用持久的闪存驱动器,您将需要添加“persistent”这个词。
default live
label live
  say Booting an Ubuntu Live session...
  kernel /casper/vmlinuz
  append  file=/cdrom/preseed/ubuntu.seed boot=casper persistent initrd=/casper/initrd.lz quiet splash noprompt --

对于64位系统,代码有点不同。
default live
label live
  say Booting an Ubuntu Live session...
  kernel /casper/vmlinuz.efi
  append  file=/cdrom/preseed/ubuntu.seed boot=casper persistent initrd=/casper/initrd.lz quiet splash noprompt --

这与Lekensteyn在2011年6月20日8:08的回答和评论有什么不同吗? - MestreLion
不确定,在哪里可以找到他在2011年6月20日8:08的评论? - C.S.Cameron
这是他上面回答中倒数第三个评论。 - MestreLion
原始答案在我发帖后已经被编辑过了,Lekensteyn的原始答案没有提到“持久性”或64位所需的“.efi”。 - C.S.Cameron

有什么原因你不想用Remastersys吗? 你可以安装操作系统,然后使用Remastersys制作一个ISO文件, 提取squashfs文件并替换原始ISO文件中的那个(或预先制作的USB文件夹中的那个)。
我经常这样做。

1使用remastersys,我将得到完全安装而不是实时会话。请阅读我的第一个限制:它必须实际上是Ubuntu实时会话(或尽可能接近默认设置)。相同的软件选择(例如,gparted在实时会话中可用,gimp则不可用),用户(名称和ID),行为(没有登录屏幕,没有sudo密码等),没有GRUB等。这就排除了在USB上进行完全安装的选择。 - MestreLion