78 lines
2.6 KiB
Bash
Executable File
78 lines
2.6 KiB
Bash
Executable File
#!/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 "✅ 部署完成!" |