From c30cd5ca7937c206b02470ef47b657497eb066a2 Mon Sep 17 00:00:00 2001 From: 3030332422 <3030332422@qq.com> Date: Thu, 30 Apr 2026 18:04:44 +0800 Subject: [PATCH] =?UTF-8?q?update=EF=BC=9A=E6=B7=BB=E5=8A=A0=E2=80=9C?= =?UTF-8?q?=E4=B8=80=E4=BD=93=E6=9C=BA=E6=95=B0=E5=AD=97=E4=BA=BA=E2=80=9D?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/all-in-one-digital-human-setup.md | 442 +++++++++++++++++++++++++ 1 file changed, 442 insertions(+) create mode 100644 docs/all-in-one-digital-human-setup.md diff --git a/docs/all-in-one-digital-human-setup.md b/docs/all-in-one-digital-human-setup.md new file mode 100644 index 00000000..7a3015cf --- /dev/null +++ b/docs/all-in-one-digital-human-setup.md @@ -0,0 +1,442 @@ +# 一体机数字人配置指南 + +本项目用于在 x86 架构设备(如迷你主机、工控机、普通电脑等)上部署一套完整的数字人展示系统,实现以下功能: +- 开机自动进入 Kiosk 全屏浏览器,展示指定网页 +- 后台运行唤醒词检测服务,支持语音交互 + +> **说明**:本文档以 **Intel N100 迷你主机(天虹 QN10-100B4)** 为例进行部署演示,其他 x86 设备可参考调整(注意网络配置和声卡设备差异)。 + +## 适用环境 + +| 项目 | 说明 | +|------|------| +| 示例硬件 | 天虹 QN10-100B4(Intel N100) | +| 操作系统 | Ubuntu 24.04 LTS (Noble Numbat) | +| 示例用户 | xz(请根据实际情况替换) | +| 网络 | Wi-Fi 连接,固定 IP(可按需改为有线) | + +## 部署流程 + +1. 系统初始化(换源、连网) +2. 安装图形组件与 Kiosk 浏览器 +3. 配置自动登录与图形界面 +4. 部署唤醒词服务(Python 环境 + 麦克风) +5. 优化开机速度与隐藏启动信息 + +--- + + +### 系统初始化(换源、连网) + +``` +sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak + +sudo tee /etc/apt/sources.list > /dev/null < **提醒**:以下命令中的 Wi-Fi 名称、密码、IP 地址均为示例,请务必替换为你自己的实际信息。 + +Bash + +``` +sudo nmcli device wifi connect "MERCURY_1812" password "buzhidao" + +sudo nmcli connection modify "MERCURY_1812" ipv4.addresses "192.168.0.86/24" ipv4.gateway "192.168.0.1" ipv4.dns "8.8.8.8,114.114.114.114" ipv4.method "manual" + +sudo nmcli connection up "MERCURY_1812" +``` + + +### 第一步:安装核心图形组件与浏览器 + +这里我们坚持“极简主义”,坚决不装多余的桌面环境(如 GNOME/KDE),只装底层驱动、最轻量的窗口管理器(Openbox)、隐藏鼠标工具以及 Chromium 浏览器。 + +Bash + +``` +sudo timedatectl set-timezone Asia/Shanghai + + +sudo apt install net-tools vim fonts-wqy-microhei fonts-wqy-zenhei alsa-utils pulseaudio -y +sudo apt install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox unclutter -y + +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb +sudo apt install ./google-chrome-stable_current_amd64.deb -y +rm google-chrome-stable_current_amd64.deb + +sudo apt purge snapd -y + +``` + +### 第二步:配置 TTY1 开机免密自动登录 + +为了避免手动输入账号密码的尴尬,我们通过修改 systemd 服务,让系统一开机就自动以 `xz` 的身份登录。这里使用一键写入命令,彻底避开由于 `nano` 或 `vi` 操作不当导致的保存失败问题。 + +**1. 创建配置目录:** + +Bash + +``` +sudo mkdir -p /etc/systemd/system/getty@tty1.service.d/ +``` + +**2. 写入自动登录规则:** + +Bash + +``` +echo -e "[Service]\nExecStart=\nExecStart=-/sbin/agetty --autologin xz --noclear %I \$TERM" | sudo tee /etc/systemd/system/getty@tty1.service.d/override.conf +``` + +**3. 重载服务并设置默认启动目标:** + +Bash + +``` +sudo systemctl daemon-reload +sudo systemctl set-default multi-user.target +``` + +### 第三步:配置登录后自动启动图形界面 + +系统自动登录后默认停留在黑底白字的命令行,我们需要配置脚本,让它一旦登录立马启动 X11 图形环境。 + +**1. 触发 `startx` 的启动逻辑:** + +直接将触发代码追加写入你的个人环境配置文件中: + +Bash + +``` +cat << 'EOF' >> ~/.bash_profile +if [ -z "$DISPLAY" ] && [ "$(fgconsole)" -eq 1 ]; then + exec startx +fi +EOF +``` + +**2. 告诉 `startx` 去启动 Openbox:** + +Bash + +``` +echo "exec openbox-session" > ~/.xinitrc +``` + +### 第四步:配置“铜墙铁壁”的 Openbox 与浏览器 + +这是最核心的一步:关闭屏幕休眠、隐藏鼠标、全屏锁定浏览器,并写一个“死循环”保证浏览器被意外关闭后也能瞬间复活。 + +**1. 创建 Openbox 配置目录:** + +Bash + +``` +mkdir -p ~/.config/openbox +``` + +**2. 写入自启动脚本 (`autostart`):** + +复制以下整段代码并回车(这会自动把所有保护规则写进文件里): + +Bash + +``` +cat << 'EOF' > ~/.config/openbox/autostart +# 关闭屏幕保护 +xset -dpms +xset s noblank +xset s off + +# 隐藏鼠标 +unclutter -idle 0.1 -root & + +# 死循环启动 Chromium(崩溃或被关也能秒重启) +while true; do + google-chrome \ + --kiosk \ + --no-first-run \ + --no-default-browser-check \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-translate \ + --disable-external-intent-requests \ + --autoplay-policy=no-user-gesture-required \ + --use-fake-ui-for-media-stream \ + "https://www.douyin.com" + sleep 2 +done & +EOF +``` + +**3. 屏蔽 `Alt+F4` 退出快捷键:** + +为了防止别人插上键盘强行关掉窗口,我们把 Openbox 默认的系统快捷键干掉。 + +Bash + +``` +cp /etc/xdg/openbox/rc.xml ~/.config/openbox/ +sed -i '//,/<\/keybind>/d' ~/.config/openbox/rc.xml +``` + +### 第五步:重启验收成果 + +如果拔掉网线或不需要等待所有网络上线,可禁用网络等待服务,避免开机卡顿 + +Bash + +``` +sudo systemctl mask systemd-networkd-wait-online.service +sudo systemctl mask NetworkManager-wait-online.service +``` + +隐藏开机信息(GRUB) + +Bash + +``` +sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT="quiet loglevel=3 systemd.show_status=false vt.global_cursor_default=0"/g' /etc/default/grub + +echo 'GRUB_TIMEOUT_STYLE="hidden"' | sudo tee -a /etc/default/grub +echo 'GRUB_RECORDFAIL_TIMEOUT=0' | sudo tee -a /etc/default/grub + +sudo update-grub +``` + +声音设置成100%,然后 重启: + +Bash + +``` +amixer -q sset Master 100% unmute +sudo reboot +``` + +### 部署唤醒词服务 + +在一体机上部署唤醒词检测服务,需要安装 Python 环境、上传项目文件、配置 Camera 麦克风和开机自启。 + +#### 1. 安装 Miniconda + +```bash +wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh +bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda3 +~/miniconda3/bin/conda init bash +source ~/.bashrc +rm Miniconda3-latest-Linux-x86_64.sh +``` + + +确保登录时自动进入conda环境 + +```bash +if ! grep -q '.bashrc' ~/.bash_profile; then + cat << 'EOF' >> ~/.bash_profile + +if [ -f ~/.bashrc ]; then + . ~/.bashrc +fi +EOF +fi +``` + + +#### 2. 创建 Python 虚拟环境 + +```bash +conda create -n test python=3.10 -y +conda activate test +``` + +若出现 Terms of Service have not been accepted 错误,执行: + +```bash +conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main +conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r +``` + +#### 3. 上传项目文件 + +将开发机上的 `main/xiaozhi-server/test/` 整个目录上传到一体机的 `~/test/` 目录: + +```bash +# 在开发机上执行(将 <一体机IP> 替换为实际 IP) +scp -r main/xiaozhi-server/test/ xz@<一体机IP>:~/test/ +``` + +#### 4. 安装系统依赖 + +唤醒词服务需要音频采集库和 ALSA PulseAudio 插件: + +```bash +sudo apt install libportaudio2 portaudio19-dev libasound2-plugins -y +``` + +#### 5. 安装 Python 依赖 + +```bash +cd ~/test/wakeword_runtime +pip install numpy +pip install -r requirements.txt +``` + +#### 6. 下载唤醒词模型 + +模型文件不包含在项目中,需要单独下载配置,详见 `wakeword_runtime/README.md` 中的"模型下载"章节。 + +#### 7. 修改 Openbox 自启动脚本 + +需要在 autostart 中加上 PulseAudio 和 Camera 麦克风配置,并将 Chrome 地址改为测试页面。 + +先确认 Camera 麦克风在 PulseAudio 中的设备名: + +```bash +pulseaudio --start +pactl list sources short +``` + +找到包含 `USB_Camera` 的那一行,记下完整名称,例如: + +``` +alsa_input.usb-SN0002_2K_USB_Camera_46435000_P030D00_SN0002-02.mono-fallback +``` + +然后用完整内容覆盖 autostart(将 `TARGET_MIC` 替换为你的实际设备名): + +```bash +cat << 'EOF' > ~/.config/openbox/autostart +# 1. 启动声音服务并稍作等待 +pulseaudio --start +sleep 1 + +# 2. 锁定 Camera 的麦克风(请替换为你的实际设备名) +TARGET_MIC="alsa_input.usb-SN0002_2K_USB_Camera_46435000_P030D00_SN0002-02.mono-fallback" + +# 3. 设为系统默认麦克风 +pactl set-default-source "$TARGET_MIC" + +# 4. 解除静音 +pactl set-source-mute "$TARGET_MIC" 0 + +# 5. 音量拉到 100% +pactl set-source-volume "$TARGET_MIC" 100% + +# --- 极简桌面与浏览器环境配置 --- + +# 关闭屏幕保护 +xset -dpms +xset s noblank +xset s off + +# 隐藏鼠标 +unclutter -idle 0.1 -root & + +# 死循环启动浏览器(崩溃或被关也能秒重启) +while true; do + google-chrome \ + --kiosk \ + --no-first-run \ + --no-default-browser-check \ + --disable-infobars \ + --disable-session-crashed-bubble \ + --disable-translate \ + --disable-external-intent-requests \ + --autoplay-policy=no-user-gesture-required \ + --use-fake-ui-for-media-stream \ + "http://127.0.0.1:8006/test_page.html" + sleep 2 +done & +EOF +``` + +#### 8. 配置唤醒词服务开机自启 + +创建 systemd 服务文件,让唤醒词服务开机自动运行。 + +先确认当前用户的 UID: + +```bash +id -u $(whoami) +``` + +然后用查到的 UID 替换下面 `1000`(通常第一个用户就是 1000): + +```bash +sudo tee /etc/systemd/system/xiaozhi-test.service << 'EOF' +[Unit] +Description=XiaoZhi Test Runtime +After=network.target sound.target + +[Service] +Type=simple +User=xz +Environment=XDG_RUNTIME_DIR=/run/user/1000 +Environment=PULSE_SERVER=unix:/run/user/1000/pulse/native +WorkingDirectory=/home/xz/test +ExecStartPre=/bin/sleep 10 +ExecStart=/home/xz/miniconda3/envs/test/bin/python start_test_runtime.py +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target +EOF +``` + +> **重要说明**: +> - `User=xz` — 替换为你的实际用户名 +> - `/run/user/1000` — 替换为你实际的 UID +> - `WorkingDirectory` 和 `ExecStart` 中的路径 — 替换为你的实际部署路径 +> - `Environment` 中的 PulseAudio 环境变量**必须保留**,否则唤醒词服务和浏览器无法同时使用 Camera 麦克风 + +启用并启动服务: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable xiaozhi-test +sudo systemctl start xiaozhi-test +``` + +#### 9. 常用服务管理命令 + +```bash +sudo systemctl start xiaozhi-test # 立即启动 +sudo systemctl stop xiaozhi-test # 停止 +sudo systemctl restart xiaozhi-test # 重启 +sudo systemctl status xiaozhi-test # 查看状态 +journalctl -u xiaozhi-test -f # 查看实时日志 +``` +