将 2013 年 Dell E6540 改造成专用电视媒体控制器
抱歉,我需要您提供要翻译的完整文本内容(除代码块和 URL 之外)。请把文章的正文粘贴在这里,我就可以按照要求将其翻译成简体中文并保留原有的格式。
📦 硬件
| 设备 | 详情 |
|---|---|
| 笔记本电脑 | Dell Latitude E6540 (i7, 8 GB RAM) |
| 键盘 | Logitech K400 Plus(无线 – 适合在沙发上浏览) |
| U盘 | 任意 ≥ 8 GB |
🎯 目标
创建一个 custom Ubuntu 24.04 live USB,使其:
- 直接启动 Chrome
- 没有 设置向导、登录界面或其他提示
- 对于连接到电视的媒体控制器,实现真正的“即插即用”
1️⃣ Ubuntu 24.04的分层 squashfs
Ubuntu 24.04 不再提供单一的 filesystem.squashfs。
相反,它使用 分层 布局:
casper/
├── minimal.squashfs # 基础层
├── minimal.standard.squashfs # 标准附加层
└── minimal.standard.live.squashfs # 实时环境自定义层
❌ 我尝试的方式
将三个层合并为一个 filesystem.squashfs。
🚫 结果
启动失败:“File system layers are missing”(文件系统层缺失)
✅ 解决办法
保持这三个层完整。
只修改包含你需要更改文件的特定层。
Casper 期望这种分层结构。
参考: Ubuntu Casper 手册
2️⃣ 移除 GNOME 初始设置向导
问题
GNOME 初始设置向导在启动时一直出现。
我的尝试
仅在顶层 (minimal.standard.live.squashfs) 中搜索并删除文件 仅。
结果
向导仍然出现——二进制文件不在该层。
✅ 解决方案 – 搜索 所有 层
for layer in minimal minimal.standard minimal.standard.live; do
FOUND=$(unsquashfs -l "$CASPER_DIR/${layer}.squashfs" 2>/dev/null |
grep -E "gnome-initial-setup" || true)
if [ -n "$FOUND" ]; then
echo "Found in ${layer}.squashfs!"
fi
done
经验教训: gnome-initial-setup 位于 minimal.squashfs(基础层)。
3️⃣ 并非 gnome‑initial‑setup 的 “Welcome to Ubuntu” 向导
问题
删除 gnome-initial-setup 后,仍然出现了一个 不同的 欢迎向导。
我的尝试
- 删除更多
gnome‑initial‑setup文件 - 屏蔽 systemd 服务
- 创建 “完成” 标记文件
结果
向导仍然存在,只是图标和行为不同。
✅ 解决方案 – 这是一个名为 ubuntu-desktop-bootstrap 的 snap
unsquashfs -l layer.squashfs | \
grep -E "ubuntu-desktop-bootstrap|desktop-bootstrap"
经验教训: 不要轻易假设罪魁祸首;请检查实际的桌面快捷方式或进程名称。
4️⃣ 启用自动登录
问题
系统停留在 GDM 登录界面,而没有自动登录。
✅ 解决方案 – 在 squashfs 中编辑 GDM 配置
mkdir -p "$SQUASH_DIR/etc/gdm3"
cat > "$SQUASH_DIR/etc/gdm3/custom.conf"
⚠️ --no-sandbox 会降低安全性,但在 live‑USB 环境中是必需的。
6️⃣ PulseAudio vs. PipeWire (pactl missing)
问题
脚本在 Ubuntu 24.04 live 环境中因 pactl: command not found 而失败。
原因
Ubuntu 24.04 默认使用 PipeWire;最小化的 live 环境通常没有 pactl。
✅ 解决方案 – 为调用加保护
if command -v pactl &>/dev/null; then
HDMI_SINK=$(pactl list short sinks | grep -i hdmi | head -1 | awk '{print $2}')
[ -n "$HDMI_SINK" ] && pactl set-default-sink "$HDMI_SINK"
else
echo "Warning: pactl not available"
fi
7️⃣ 在 macOS 上更快的 ISO 写入
问题
使用 dd 写入一个 6 GB 的 ISO 需要 1085 秒(约 18 分钟)。
✅ 解决方案 – 使用原始设备 (/dev/rdisk)
# 慢速(≈18 分钟)
sudo dd if=ubuntu.iso of=/dev/disk4 bs=4m
# 快速(≈2 分钟)– 原始设备绕过 macOS 缓冲区缓存
RAW_DEVICE=$(echo "/dev/disk4" | sed 's|/dev/disk|/dev/rdisk|')
sudo dd if=ubuntu.iso of=$RAW_DEVICE bs=4m status=progress
结果:约提升 10 倍速度。
8️⃣ 保留 EFI 分区以实现 UEFI 启动
问题
自定义 ISO 在 UEFI 系统上无法启动。
✅ 解决方案 – 提取并重复使用原始 EFI 分区
# 1️⃣ Get EFI partition info from the original ISO
EFI_INFO=$(xorriso -indev "$ISO_IN" -report_el_torito as_mkisofs 2>&1 |
grep -A1 "append_partition 2")
INTERVAL=$(echo "$EFI_INFO" | grep -oP '\d+d-\d+d' | head -1)
# 2️⃣ Parse start/end sectors
START_SECTOR=$(echo "$INTERVAL" | cut -d'-' -f1 | tr -d 'd')
END_SECTOR=$(echo "$INTERVAL" | cut -d'-' -f2 | tr -d 'd')
COUNT=$((END_SECTOR - START_SECTOR + 1))
# 3️⃣ Extract the EFI image
dd if="$ISO_IN" of="$EFI_IMG" bs=512 skip="$START_SECTOR" count="$COUNT"
然后将 $EFI_IMG 嵌入回自定义 ISO。
9️⃣ End‑to‑End Automation (Docker‑based)
我将所有内容封装在一个 Docker 容器中,该容器能够:
- 下载 Ubuntu 24.04 桌面 ISO
- 解压并修改分层 squashfs
- 删除 所有 欢迎向导(
gnome‑initial‑setup、gnome‑tour、ubuntu‑desktop‑bootstrap) - 配置自动登录
- 预装壁纸、Chrome 策略、暗色模式等
- 重新生成一个 混合(BIOS + UEFI)可启动 ISO
- 使用单条命令将 ISO 写入 USB
./make.sh # cleans, builds, and writes to USB
📦 使用方法
If you have a Dell E6540 (or similar older laptop) and want a dedicated TV/media controller:
| 要求 | 详情 |
|---|---|
| Source | github.com/tv6540/cubic2 |
| Dependencies | Docker, macOS or Linux, USB drive (≥ 8 GB) |
| Optional | Logitech K400 Plus (recommended) |
步骤
git clone https://github.com/tv6540/cubic2
cd cubic2
./make.sh
The script will:
- Prompt for
sudo(kept alive during the build)
提示输入sudo(在构建期间保持活跃) - Show a USB‑device picker and ask for confirmation before erasing
显示 USB 设备选择器,并在擦除前请求确认 - Download the Ubuntu ISO (cached for future builds)
下载 Ubuntu ISO(为后续构建缓存) - Build the custom ISO inside Docker
在 Docker 中构建自定义 ISO - Write the ISO to the selected USB drive
将 ISO 写入选定的 USB 驱动器
Boot the USB, and the built‑in setup script runs automatically to:
- Configure the display (HDMI, TV)
配置显示器(HDMI,电视) - Install Chrome with the
--no-sandboxflag
安装带有--no-sandbox标志的 Chrome - Enable auto‑login
启用自动登录
You’re then ready to stream.
这样就可以开始流媒体播放了。
📚 关键要点
| 主题 | 教训 |
|---|---|
| 分层 squashfs | 不要合并 层;就地修改所需的层。 |
| 文件列出 | unsquashfs -l 列出文件 而不提取 —— 适合快速查找。 |
| 欢迎向导 | ubuntu-desktop-bootstrap ≠ gnome-initial-setup。检查实际的进程名称。 |
| Live USB 上的 Chrome | 需要 --no-sandbox(overlayfs 会破坏沙箱)。 |
| macOS 写入 ISO | 使用 /dev/rdisk 可提升约 10 倍写入速度。 |
| UEFI 启动 | 重建 ISO 时保留原始 EFI 分区。 |
享受即插即用的 Ubuntu Live USB,直接在 Dell E6540 上启动 Chrome! 🎉
USB 写入
- 提前获取所有提示 – 没有人想等 20 分钟后再输入 “yes”。
Logitech K400 Plus 非常适合此设置:
- 无线,配有小型 USB 接收器
- 内置触控板
- 媒体键
- 长电池寿命
- 体积小巧,适合沙发使用
以大量的挫败感、大量的反复试验和大量的咖啡因为基础构建。