#!/bin/bash # Local Voice 服务部署脚本 # 用于解决systemd环境下的音频设备访问问题 echo "🔧 Local Voice 服务部署脚本" echo "==================================" # 获取用户ID USER_ID=$(id -u) USERNAME=$(whoami) echo "👤 当前用户: $USERNAME (UID: $USER_ID)" # 备份原有服务文件 echo "💾 备份原有服务文件..." if systemctl list-unit-files | grep -q "local-voice.service"; then sudo systemctl stop local-voice.service 2>/dev/null sudo systemctl disable local-voice.service 2>/dev/null sudo cp /etc/systemd/system/local-voice.service /etc/systemd/system/local-voice.service.backup 2>/dev/null || true echo "✅ 原有服务已备份" fi # 安装systemd服务 echo "📦 安装systemd服务..." sudo cp local-voice.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable local-voice.service echo "✅ 系统级服务已安装" # 安装用户级服务 echo "🏠 安装用户级服务..." mkdir -p ~/.config/systemd/user/ cp local-voice-user.service ~/.config/systemd/user/ systemctl --user daemon-reload systemctl --user enable local-voice-user.service echo "✅ 用户级服务已安装" # 确保pipewire-pulse运行 echo "🎵 检查音频服务..." if ! systemctl --user is-active --quiet pipewire-pulse; then echo "🔧 启动pipewire-pulse服务..." systemctl --user start pipewire-pulse systemctl --user enable pipewire-pulse echo "✅ pipewire-pulse已启动" else echo "✅ pipewire-pulse正在运行" fi # 启用用户服务 lingering (允许用户服务在登出后继续运行) echo "🔄 启用用户服务lingering..." sudo loginctl enable-linger $USERNAME echo "✅ 用户服务lingering已启用" # 测试建议 echo "" echo "🎯 测试建议:" echo "1. 先测试用户级服务: systemctl --user start local-voice-user.service" echo "2. 查看用户服务日志: journalctl --user -u local-voice-user.service -f" echo "3. 如果用户级服务正常,再考虑使用系统级服务" echo "" echo "🔍 故障排除:" echo "- 如果用户级服务正常: 建议使用 systemctl --user start local-voice-user.service" echo "- 如果系统级服务正常: 使用 sudo systemctl start local-voice.service" echo "" echo "📊 当前音频设备状态:" python3 -c " import pyaudio p = pyaudio.PyAudio() print('可用音频设备:') for i in range(p.get_device_count()): info = p.get_device_info_by_index(i) if info['maxInputChannels'] > 0: print(f' 设备 {i}: {info[\"name\"]} (默认采样率: {info[\"defaultSampleRate\"]}Hz)') p.terminate() " echo "" echo "✅ 部署完成!"