Armbian 上为虚拟桌面安装 Chromium 浏览器

在 Armbian 上为虚拟桌面安装 Chromium 浏览器(踩坑全记录)

上一篇写了整套远程桌面的搭建(Xvfb + XFCE + noVNC + nps),这篇单独把"浏览器"这个环节展开讲。看起来只是 apt install 一条命令的事,但在 root 用户、无真实屏幕、ARM 架构这几个条件叠加下,我实际踩了四五个坑。如果你也在 Armbian / 树莓派 / 任何 ARM 板子上装 Chromium,这篇文章应该能帮你少走弯路。

一、环境前提

  • 系统:Armbian(Debian 系),root 用户直接操作
  • 显示:无真实屏幕,图形界面跑在虚拟显示器 :99(Xvfb)上
  • 架构:ARM64
    还没搭好虚拟桌面的,建议先看上一篇文章把 Xvfb + XFCE + noVNC 跑起来,浏览器是装在"桌面里"的。

二、安装:一条命令

bash 复制代码
sudo apt update
sudo apt install -y chromium

就这一条。Debian/Armbian 源里的 chromium 包是为 ARM 编译好的,不需要下载 Chrome 官方的 deb(那个是 amd64 的,ARM 装不上;网上很多教程教下载 Chrome 安装包的步骤在 ARM 板子上直接作废)。

如果提示找不到 chromium 包,可能你的源里包名叫:

bash 复制代码
sudo apt install -y chromium-browser

两个名字试哪个存在用哪个。

安装完验证:

bash 复制代码
chromium --version

能输出版本号(如 Chromium 120.x.x.x)就说明装好了。

三、第一个坑:直接启动报 Permission denied

装完我兴冲冲地敲:

bash 复制代码
DISPLAY=:99 chromium &

结果报错:

复制代码
/root: Permission denied

原因:root 用户运行 Chromium 时,它尝试在 /root 下创建/读取配置目录的方式与普通用户不同,加上默认 sandbox(沙箱)机制在 root 环境下的限制,直接就起不来。

解法:加 --no-sandbox 和显式的 --user-data-dir:

bash 复制代码
DISPLAY=:99 chromium --no-sandbox --user-data-dir=/root/.config/chromium &
  • --no-sandbox:关闭沙箱。root 下必须加,否则 Chromium 拒绝启动(提示 "Running as root without --no-sandbox is not supported")
  • --user-data-dir:明确指定用户数据目录(存书签、缓存、Cookie 的地方)。不指定时它会自己猜路径,猜错了就是那个 Permission denied

四、第二个坑:DISPLAY 变量不生效

另一个常见翻车点:加了参数还是报 cannot open display 之类。

原因:浏览器必须知道往哪块屏幕上画。我们前面虚拟屏幕是 :99,但这个环境变量只在当前 shell 会话里有效 ------你换一个 SSH 窗口、或者由 supervisor 拉起时,环境变量就丢了。

解法:每次启动都显式带上:

bash 复制代码
DISPLAY=:99 chromium --no-sandbox --user-data-dir=/root/.config/chromium &

或者先 export DISPLAY=:99 再启动,但显式前缀写法更保险,一行自包含。

启动成功后,打开 noVNC 网页应该能看到 Chromium 窗口出现在桌面上。

五、第三个坑:SSH 断线浏览器就被杀

上面这条命令带着 & 跑在后台,看着没问题------但它是当前 SSH 会话的子进程 。手机 SSH 一断(息屏、切后台都可能),浏览器跟着被杀。这是整套部署里最隐蔽的坑,因为"刚才明明还好好的"。

临时解法:用 nohup:

bash 复制代码
nohup env DISPLAY=:99 chromium --no-sandbox --user-data-dir=/root/.config/chromium > /tmp/chromium.log 2>&1 &

根治:交给 supervisor 托管,写进配置(与上一篇远程桌面的配置合并管理):

bash 复制代码
sudo tee /etc/supervisor/conf.d/chromium.conf > /dev/null <<'EOF'
[program:chromium]
command=/bin/bash -c "sleep 10; exec chromium --no-sandbox --user-data-dir=/root/.config/chromium"
environment=DISPLAY=":99",HOME="/root"
autorestart=true
startsecs=15
startretries=10
priority=40
stdout_logfile=/var/log/supervisor/chromium.log
stderr_logfile=/var/log/supervisor/chromium.err
EOF
sudo supervisorctl reread
sudo supervisorctl update

几个参数的讲究:

  • sleep 10:等 Xvfb 和 XFCE 先就绪。浏览器比桌面先启动的话,会因为找不到可用的显示而退出,然后 supervisor 重试几次就 FATAL 了
  • priority=40:排在虚拟屏幕、桌面、VNC 之后启动
  • startsecs=15:Chromium 启动慢(ARM 板子上尤甚),默认 1 秒的"存活判定"会把它误判为启动失败
  • autorestart=true :浏览器崩了自动拉起
    加载完看状态:
bash 复制代码
sudo supervisorctl status chromium

显示 RUNNING 即可。

六、第四个坑:中文乱码

浏览器能打开了,但页面中文全是方块------不是编码问题,是系统没有中文字体:

bash 复制代码
sudo apt install -y fonts-noto-cjk
fc-cache -fv
sudo supervisorctl restart chromium

刷新 noVNC 页面,网页中文就正常了。

七、验证全链路

  1. sudo supervisorctl status → chromium 显示 RUNNING
  2. 手机浏览器打开 http://nps地址:6080/vnc.html,输密码进入桌面
  3. 桌面上应该有 Chromium 窗口,点击地址栏能输入网址(打不出字的话,用 noVNC 侧边栏的键盘按钮,或者按上篇装 matchbox-keyboard)
  4. 打开任意网页,滚动、点击正常

八、常用启动参数备忘

跑在低配 ARM 板上,这几个参数能明显改善体验:

bash 复制代码
chromium --no-sandbox \
         --user-data-dir=/root/.config/chromium \
         --disable-gpu \
         --start-maximized \
         --disable-dev-shm-usage
参数 作用
--no-sandbox root 用户必需
--user-data-dir=... 指定数据目录,避免权限问题
--disable-gpu 板子没有可用 GPU 加速时,禁掉省得崩
--start-maximized 启动即最大化,虚拟屏幕 720p 寸土寸金
--disable-dev-shm-usage 内存小的板子建议加,避免 /dev/shm 不足导致标签页崩溃
如果内存实在吃紧(1GB 以下的板子),还可以加 --single-process,牺牲稳定性换内存。

九、踩坑总结表

坑 报错/现象 解法
包名不对 Unable to locate package chromium 换 chromium-browser,或确认源配置
root 启动失败 Permission denied / sandbox 报错 --no-sandbox + --user-data-dir
找不到屏幕 cannot open display 显式 DISPLAY=:99
SSH 断线被杀 进程莫名消失 nohup 应急,supervisor 根治
启动比桌面快 supervisor FATAL 配置里 sleep + priority
中文乱码 方块字 装 fonts-noto-cjk + fc-cache

结语

在 ARM 板子上装 Chromium,命令本身不难,难的是它跑在 root、无屏、被守护进程托管 这三重特殊环境下,每一条常规启动方式都会踩到对应的坑。核心就三件套记牢:DISPLAY=:99、--no-sandbox --user-data-dir、交给 supervisor。配好之后就一劳永逸了------现在我的板子重启后,浏览器总是安安静静地等在虚拟桌面上,手机连上就能用。

有问题欢迎评论区交流。

相关推荐
Summer-Bright19 小时前
浏览器成了AI应用的新入口:智能体接管标签页之后,三本账谁买单
人工智能·chatgpt·agent·浏览器·智能体
ShineWinsu2 天前
对于CSS:弹性布局(Flexbox)的解析
前端·css·面试·浏览器·web·网页·弹性布局
Amos_Web3 天前
我做了一个 Chrome 插件,专治“这篇文章我明明看过,但重点去哪了?”
前端·浏览器
Ikalus19884 天前
我给自己写的工具,连着骗了我七次
chrome·浏览器
ShineWinsu6 天前
对于HTML:HTML常见标签的解析—上
前端·面试·html·浏览器·标签·图片·超链接
Frag0ut13 天前
Chrome 浏览器安全指南:常见风险、隐私设置与防护建议
chrome·浏览器·隐私保护·安全防护·账号安全·安全设置·扩展权限
Frag0ut15 天前
Chrome四大版本获取及共存指南:Stable/Beta/Dev/Canary
前端·chrome·浏览器·dev·beta·canary·共存版
Frag0ut15 天前
新兴浏览器内核能和 Chrome 有一战之力吗?Servo、Ladybird、WebKit 与 Gecko 的技术格局分析
chrome·浏览器·webkit·blink·gecko·servo·ladybird
Helix25016 天前
Chrome 快捷键效率提升:10 个常用快捷键,把浏览速度提升一个量级
chrome·google·浏览器·使用技巧·效率工具·快捷键·爆红教程