将 2013 年 Dell E6540 改造成专用电视媒体控制器

发布: (2026年1月12日 GMT+8 05:31)
8 分钟阅读
原文: Dev.to

抱歉,我需要您提供要翻译的完整文本内容(除代码块和 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-bootstrapsnap

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 容器中,该容器能够:

  1. 下载 Ubuntu 24.04 桌面 ISO
  2. 解压并修改分层 squashfs
  3. 删除 所有 欢迎向导(gnome‑initial‑setupgnome‑tourubuntu‑desktop‑bootstrap
  4. 配置自动登录
  5. 预装壁纸、Chrome 策略、暗色模式等
  6. 重新生成一个 混合(BIOS + UEFI)可启动 ISO
  7. 使用单条命令将 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:

要求详情
Sourcegithub.com/tv6540/cubic2
DependenciesDocker, macOS or Linux, USB drive (≥ 8 GB)
OptionalLogitech K400 Plus (recommended)

步骤

git clone https://github.com/tv6540/cubic2
cd cubic2
./make.sh

The script will:

  1. Prompt for sudo (kept alive during the build)
    提示输入 sudo(在构建期间保持活跃)
  2. Show a USB‑device picker and ask for confirmation before erasing
    显示 USB 设备选择器,并在擦除前请求确认
  3. Download the Ubuntu ISO (cached for future builds)
    下载 Ubuntu ISO(为后续构建缓存)
  4. Build the custom ISO inside Docker
    在 Docker 中构建自定义 ISO
  5. 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-sandbox flag
    安装带有 --no-sandbox 标志的 Chrome
  • Enable auto‑login
    启用自动登录

You’re then ready to stream.
这样就可以开始流媒体播放了。

📚 关键要点

主题教训
分层 squashfs不要合并 层;就地修改所需的层。
文件列出unsquashfs -l 列出文件 而不提取 —— 适合快速查找。
欢迎向导ubuntu-desktop-bootstrapgnome-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 接收器
  • 内置触控板
  • 媒体键
  • 长电池寿命
  • 体积小巧,适合沙发使用

大量的挫败感大量的反复试验大量的咖啡因为基础构建。

Back to Blog

相关文章

阅读更多 »

你好,我是新人。

嗨!我又回到 STEM 的领域了。我也喜欢学习能源系统、科学、技术、工程和数学。其中一个项目是…