一台只有 3.3GB 系统盘的 ARM 开发板,如何实现开机直接全屏显示网页?这篇文章记录了所有踩过的坑和最终解决方案。
故事背景 📱
最近收到一个EASY-EAI-PI2(RV1126B)测试的板子:刚好最近有个老兄想知道怎么在一台 ARM 嵌入式开发板上,实现开机直接显示浏览器打开指定网页。
听起来很简单对吧?但我万万没想到,这个需求会让我经历一场"史诗级"的踩坑之旅……
设备参数:
- 🐧 系统:Ubuntu 22.04 + Xfce 桌面
需求:
方案一:systemd 直接启动 X11
我的想法:绕过显示管理器,直接用 systemd 启动 X server 和浏览器,简单粗暴!
# 创建 kiosk 服务[Unit]Description=Kiosk BrowserAfter=network-online.target[Service]Type=simpleUser=lqExecStart=/usr/bin/startx /path/to/kiosk.sh -- :0 vt7
满怀期待地执行 systemctl start kiosk,结果……
❌ Fatal server error: xf86OpenConsole: Cannot open virtual console 7 (Permission denied)
坑点:非特权用户无法访问 /dev/tty7,即使加了用户组也没用。嵌入式设备的权限管理比我想象的复杂得多。
结论:此路不通 🚫
方案二:LightDM 自动登录
我的想法:既然直接启动不行,那就用系统自带的显示管理器 LightDM,配置自动登录总可以吧?
# 配置自动登录[SeatDefaults]autologin-user=lqautologin-user-timeout=0
重启后……还是显示登录界面 😑
坑点一:新版 LightDM 的配置语法变了![SeatDefaults] 已经废弃,要用 [Seat:*]
改完后重启,还是跳不出登录界面……
坑点二:用户必须加入 nopasswdlogin 组才能免密登录!
sudogroupadd-r nopasswdloginsudousermod-aG nopasswdlogin lq
终于!自动登录成功了!但是……启动后直接进了桌面环境,还是要手动点浏览器 😤
结论:自动登录可以,但跳不过桌面 🚫
方案三:自定义 Kiosk Session
我的想法:既然不能跳过桌面,那我就创建一个"假桌面",只启动浏览器!
# 创建 kiosk session[Desktop Entry]Name=KioskExec=/usr/local/bin/kiosk-session.shType=Application
# kiosk 启动脚本#!/bin/bashmatchbox-window-manager &epiphany --kiosk-mode https://www.baidu.com
重启后,浏览器确实自动启动了!但是……
坑点:Epiphany 浏览器的 --kiosk-mode 参数根本没有效果!地址栏、最大化最小化按钮都在,根本不是 kiosk 模式 😱
我尝试用 xdotool 移动窗口位置,把地址栏移到屏幕外面……效果很差,而且不稳定。
结论:浏览器选错了 🚫
方案四:安装 Chromium
我的想法:Chromium 支持 --kiosk 参数,这是真正的全屏模式!
sudoaptinstall chromium-browser
然后……
❌ E: 您在 /var/cache/apt/archives/ 上没有足够的可用空间
系统盘满了!赶紧清理空间:
sudorm-rf /var/cache/apt/archives/*.debsudo journalctl --vacuum-size=5M
腾出空间后再次安装:
=> Installing the chromium snaperror: cannot communicate with server: timeout exceeded
坑点:Ubuntu 22.04 的 chromium-browser 包实际上是一个 snap 包装器!Snap 需要连接 snap store,但嵌入式设备网络受限,根本连不上!
更坑的是,snap 的安装路径是固定的,不能改到外挂盘 /home 上!
结论:Snap 是嵌入式设备的噩梦 🚫
最终方案:Firefox 便携版 🎉
我的想法:既然系统盘装不下,那就把浏览器放到外挂盘 /home 上!
Mozilla 官方提供 Firefox 便携版,下载解压就能用!
cd /home/lq# 下载 Firefox ARM64 版本wget"https://download.mozilla.org/?product=firefox-latest&os=linux64-aarch64&lang=zh-CN"-O firefox.tar.bz2tar-xjf firefox.tar.bz2
Firefox 完美支持 --kiosk 参数!
创建最终版本的 kiosk 脚本:
#!/bin/bash# 禁用屏保xset s offxset -dpmsxset s noblank# 隐藏鼠标unclutter -idle0&# 启动轻量级窗口管理器matchbox-window-manager -use_titlebar no -use_cursor no &sleep2# 启动 Firefox kiosk 模式/home/lq/firefox/firefox --kiosk https://www.baidu.com
配置 LightDM 使用 kiosk session:
# /etc/lightdm/lightdm.conf.d/50-autologin.conf[Seat:*]autologin-user=lqautologin-user-timeout=0autologin-session=kiosk
重启测试……成功! 🎊
最终效果
踩坑总结 💡
1. 系统盘空间管理
嵌入式设备系统盘通常很小,这些命令可以清理空间:
# 清理 apt 缓存sudorm-rf /var/cache/apt/archives/*.deb# 清理日志sudo journalctl --vacuum-size=5M# 删除不需要的语言包和字体sudorm-rf /usr/share/locale/*sudorm-rf /usr/share/fonts/truetype/noto
2. Snap 的坑
Ubuntu 22.04 很多软件转向 snap,但对于嵌入式设备:
3. LightDM 配置要点
# ✅ 正确的配置语法[Seat:*]autologin-user=lq# ❌ 已废弃的语法[SeatDefaults]# 不要用了!
用户必须加入这两个组:
sudousermod-aG autologin,nopasswdlogin lq
4. 浏览器 Kiosk 模式对比
| | |
|---|
| --kiosk | |
| --kiosk | |
| --kiosk-mode | |
一键配置脚本
我把整个方案整理成了一个脚本,保存为 setup_kiosk.sh:
#!/bin/bash# 一键配置 Kiosk 模式# 创建 kiosk 脚本cat> /home/lq/firefox/kiosk.sh <<'EOF'#!/bin/bashxset s off && xset -dpms && xset s noblankunclutter -idle 0 &matchbox-window-manager -use_titlebar no -use_cursor no &sleep 2/home/lq/firefox/firefox --kiosk https://www.baidu.comEOFchmod +x /home/lq/firefox/kiosk.sh# 创建 sessionsudotee /usr/share/xsessions/kiosk.desktop <<EOF[Desktop Entry]Name=KioskExec=/home/lq/firefox/kiosk.shType=ApplicationEOF# 配置自动登录sudomkdir-p /etc/lightdm/lightdm.conf.dsudotee /etc/lightdm/lightdm.conf.d/50-autologin.conf <<EOF[Seat:*]autologin-user=lqautologin-user-timeout=0autologin-session=kioskEOF# 用户权限sudogroupadd-r autologin 2>/dev/null ||truesudogroupadd-r nopasswdlogin 2>/dev/null ||truesudousermod-aG autologin,nopasswdlogin lqecho"✅ 配置完成!执行 reboot 重启生效"
看一下效果
写在最后
嵌入式 Linux 的坑真的很多,特别是涉及到图形显示和权限管理的部分。希望这篇文章能帮助到遇到类似问题的朋友!
关键经验:
如果这篇文章对你有帮助,欢迎点赞收藏!有问题欢迎在评论区讨论 👇
关注我,分享更多嵌入式开发实战经验!