You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu下将GTK应用制作为开机自启的可引导ISO文件

GTK应用可引导ISO制作方案(Ubuntu平台验证可用)

你之前用cmake/make制作失败是正常的——这两个工具只负责编译你的应用源码,不负责构建引导程序、内核、根文件系统、运行时依赖整套可引导环境。以下方案基于Ubuntu LiveCD裁剪思路实现,开机直接启动GTK应用,不加载完整桌面环境,最小成品体积可控制在200M以内,同时支持BIOS/UEFI双引导。


1. 安装前置依赖

在你的Ubuntu开发环境执行以下命令安装制作工具:

sudo apt update && sudo apt install -y \
  build-essential cmake \
  xorriso syslinux syslinux-common isolinux \
  squashfs-tools debootstrap \
  grub-pc-bin grub-efi-amd64-bin

2. 构建最小运行根文件系统

2.1 拉取最小Ubuntu基础环境

# 创建工作目录
mkdir -p ~/gtk-iso/{iso,squashfs}
cd ~/gtk-iso
# 拉取最小Ubuntu 24.04根环境,要22.04就把noble换成jammy
sudo debootstrap --arch=amd64 noble squashfs

2.2 配置chroot环境

进入裁剪后的根环境,安装内核、显示服务、GTK运行时和引导必需组件:

sudo chroot squashfs
apt update && apt install -y --no-install-recommends \
  linux-image-generic \
  casper \
  xinit xorg \
  libgtk-3-0 # 用GTK4就换成libgtk-4-1,静态编译的GTK程序可跳过这一项

# 配置tty1自动登录root
mkdir -p /etc/systemd/system/getty@tty1.service.d/
cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf <<EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I 38400 linux
EOF

# 配置登录tty1后自动启动X服务
cat > /root/.bashrc <<EOF
if [ -z "\$DISPLAY" ] && [ \$(tty) = /dev/tty1 ]; then
  startx
fi
EOF

# 配置X服务启动后直接运行你的GTK应用
cat > /root/.xinitrc <<EOF
# 关闭屏保、休眠,避免长时间运行黑屏
xset s off
xset -dpms
xset s noblank
# 替换成你的应用实际存放路径
/opt/my-gtk-app
# 应用退出后自动关机,避免停在命令行
poweroff
EOF

# 清空root密码方便调试
passwd -d root
exit

2.3 导入你编译好的GTK应用

# 把你编译好的GTK程序拷入根文件系统
sudo cp /你本地编译好的GTK程序路径 squashfs/opt/my-gtk-app
sudo chmod +x squashfs/opt/my-gtk-app

# 检查动态依赖,避免启动时报缺库
sudo chroot squashfs ldd /opt/my-gtk-app
# 输出里如果有not found的库,直接在chroot环境里apt安装对应包即可

3. 准备引导文件

3.1 打包压缩根文件系统

cd ~/gtk-iso
# 把根文件系统打包成squashfs压缩格式
sudo mksquashfs squashfs iso/casper/filesystem.squashfs -comp xz
# 把内核、initrd从根环境拷到引导分区
sudo cp squashfs/boot/vmlinuz-* iso/casper/vmlinuz
sudo cp squashfs/boot/initrd.img-* iso/casper/initrd.img

3.2 配置BIOS引导(兼容老机器)

mkdir -p iso/isolinux
cp /usr/lib/ISOLINUX/isolinux.bin iso/isolinux/
cp /usr/lib/syslinux/modules/bios/*.c32 iso/isolinux/

cat > iso/isolinux/isolinux.cfg <<EOF
DEFAULT gtkapp
LABEL gtkapp
  KERNEL /casper/vmlinuz
  APPEND initrd=/casper/initrd.img boot=casper quiet
EOF

3.3 配置UEFI引导(兼容新机器)

mkdir -p iso/boot/grub
grub-mkimage -d /usr/lib/grub/x86_64-efi -O x86_64-efi -o iso/boot/grub/efi.img \
  part_gpt part_msdos fat ext2 normal chain boot configfile linux efi_gop efi_uga

cat > iso/boot/grub/grub.cfg <<EOF
set default=0
set timeout=0
menuentry "GTK App" {
  linux /casper/vmlinuz boot=casper quiet
  initrd /casper/initrd.img
}
EOF

4. 生成最终ISO

执行以下命令生成同时支持BIOS/UEFI引导的ISO文件:

xorriso -as mkisofs \
  -o ~/gtk-app.iso \
  -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
  -c isolinux/boot.cat \
  -b isolinux/isolinux.bin \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -eltorito-alt-boot \
  -e boot/grub/efi.img \
  -no-emul-boot -isohybrid-gpt-basdat \
  iso/

生成的~/gtk-app.iso就是可直接刻录到U盘、光盘启动的镜像,开机后会直接进入你的GTK应用。


常见问题排查

  • 启动后找不到根分区:检查chroot环境里有没有装casper包,引导参数里有没有加boot=casper。
  • 启动后黑屏:去掉引导参数里的quiet,看具体报错日志,大概率是显卡驱动缺失,在chroot环境里安装对应显卡的开源驱动即可(Intel核显装xserver-xorg-video-intel,AMD核显/独显默认开源驱动一般能直接识别)。
  • 启动后提示找不到应用:先在chroot环境里直接执行/opt/my-gtk-app,确认能正常运行,缺依赖直接补装即可。
  • 要进一步缩小体积:可以删除squashfs里的man文档、多语言locale文件、没用的内核模块,裁剪到位的话成品体积可以压到150M以内。

内容的提问来源于stack exchange,提问作者video-reviews.net

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:42:28