ksgt0025
deepin
2025-12-15 17:15 It has been deleted!
我的v25每次重启后网页播放几乎没有声音,必须手动控制音量大小后才能恢复
这个问题内部已经有问题单在跟踪,我们催下研发进度
把默认的PipeWire 切换到 PulseAudio,待后续问题解决再切换回来。
在主目录新建一个audio-switch.sh文件,文件内容:
#!/bin/bash
# Deepin 25 音频服务切换脚本
# 在 PipeWire 和 PulseAudio 之间切换
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查当前音频服务
get_current_audio_server() {
if systemctl --user is-active --quiet pipewire.service || systemctl --user is-active --quiet pipewire-pulse.service; then
echo "pipewire"
elif systemctl --user is-active --quiet pulseaudio.service; then
echo "pulseaudio"
else
echo "unknown"
fi
}
# 显示当前状态
show_status() {
local current=$(get_current_audio_server)
log_info "当前音频服务: $current"
echo -e "\n服务状态:"
echo "PipeWire: $(systemctl --user is-active pipewire.service 2>/dev/null || echo 'inactive')"
echo "PipeWire-Pulse: $(systemctl --user is-active pipewire-pulse.service 2>/dev/null || echo 'inactive')"
echo "PulseAudio: $(systemctl --user is-active pulseaudio.service 2>/dev/null || echo 'inactive')"
}
# 切换到 PulseAudio
switch_to_pulseaudio() {
log_info "正在切换到 PulseAudio..."
# 停止 PipeWire 相关服务
systemctl --user stop pipewire-pulse.service 2>/dev/null || true
systemctl --user stop pipewire.service 2>/dev/null || true
systemctl --user stop pipewire-media-session.service 2>/dev/null || true
systemctl --user stop pipewire.socket 2>/dev/null || true
# 禁用 PipeWire 服务 [1,6](@ref)
systemctl --user disable pipewire-pulse.service 2>/dev/null || true
systemctl --user disable pipewire.service 2>/dev/null || true
systemctl --user disable pipewire-media-session.service 2>/dev/null || true
systemctl --user disable pipewire.socket 2>/dev/null || true
# 屏蔽 PipeWire 服务防止自动启动 [1](@ref)
systemctl --user mask pipewire-pulse.service 2>/dev/null || true
systemctl --user mask pipewire.service 2>/dev/null || true
# 启用并启动 PulseAudio 服务 [3](@ref)
systemctl --user unmask pulseaudio.service pulseaudio.socket 2>/dev/null || true
systemctl --user enable --now pulseaudio.service pulseaudio.socket
log_success "已切换到 PulseAudio"
}
# 切换到 PipeWire
switch_to_pipewire() {
log_info "正在切换到 PipeWire..."
# 停止 PulseAudio 服务
systemctl --user stop pulseaudio.service pulseaudio.socket 2>/dev/null || true
# 禁用 PulseAudio 服务 [1,6](@ref)
systemctl --user disable pulseaudio.service pulseaudio.socket 2>/dev/null || true
systemctl --user mask pulseaudio.service pulseaudio.socket 2>/dev/null || true
# 取消屏蔽 PipeWire 服务 [1](@ref)
systemctl --user unmask pipewire.service pipewire-pulse.service 2>/dev/null || true
# 启用并启动 PipeWire 服务
systemctl --user enable --now pipewire.service pipewire.socket pipewire-pulse.service
# 启动媒体会话服务(如果存在)
if systemctl --user list-unit-files | grep -q pipewire-media-session.service; then
systemctl --user enable --now pipewire-media-session.service
fi
log_success "已切换到 PipeWire"
}
# 验证切换是否成功
verify_switch() {
log_info "验证切换结果..."
sleep 2
local current=$(get_current_audio_server)
local expected="$1"
if [ "$current" = "$expected" ]; then
log_success "切换验证成功!当前音频服务: $current"
# 测试音频功能
if command -v pactl &>/dev/null; then
log_info "音频服务器信息:"
pactl info | grep -E "Server Name|Server Version"
fi
else
log_error "切换验证失败!期望: $expected, 实际: $current"
return 1
fi
}
# 重启音频服务(不影响切换)
restart_audio() {
local current=$(get_current_audio_server)
log_info "重新启动当前音频服务: $current"
if [ "$current" = "pipewire" ]; then
systemctl --user restart pipewire.service pipewire-pulse.service
else
systemctl --user restart pulseaudio.service
fi
log_success "音频服务已重启"
}
# 显示帮助信息
show_help() {
cat << EOF
Deepin 25 音频服务切换脚本
用法: $0 [选项]
选项:
status 显示当前音频服务状态
to-pw 切换到 PipeWire
to-pa 切换到 PulseAudio
restart 重启当前音频服务
help 显示此帮助信息
示例:
$0 status # 显示当前状态
$0 to-pa # 切换到 PulseAudio
$0 to-pw # 切换到 PipeWire
$0 restart # 重启音频服务
注意: 切换后可能需要重新启动音频应用程序或重新登录。
EOF
}
# 主函数
main() {
local action="${1:-status}"
# 检查是否以普通用户运行
if [ "$EUID" -eq 0 ]; then
log_error "请勿使用 root 权限运行此脚本(音频服务是用户级服务)"
exit 1
fi
# 检查 systemd user session
if ! systemctl --user is-active dbus.service >/dev/null 2>&1; then
log_error "systemd user session 未启动,请先确保图形会话正常"
exit 1
fi
case "$action" in
status)
show_status
;;
to-pw|to-pipewire)
show_status
switch_to_pipewire
verify_switch "pipewire"
;;
to-pa|to-pulseaudio)
show_status
switch_to_pulseaudio
verify_switch "pulseaudio"
;;
restart)
show_status
restart_audio
;;
help|--help|-h)
show_help
;;
*)
log_error "未知操作: $action"
show_help
exit 1
;;
esac
}
# 脚本入口
if [ $# -eq 0 ]; then
show_status
else
main "$@"
f
使用方法
保存脚本:将上面的脚本保存为 audio-switch.sh
赋予执行权限:
chmod +x audio-switch.sh
使用脚本:
# 查看当前状态
./audio-switch.sh status
# 切换到 PulseAudio
./audio-switch.sh to-pa
# 切换到 PipeWire
./audio-switch.sh to-pw
# 重启当前音频服务
./audio-switch.sh restart
第一次切换到PulseAudio,会提示失败,然后重启在切换一次PulseAudio,就可以成功。
Popular Ranking
ChangePopular Events
More
【前置条件】:发生问题的系统版本为25.0.10
【复现步骤】:假设音量为50%,然后重启主机,或插拔下有线耳机。音量设置虽然显示为50%,但实际音量比50%小,重新调整新的音量才能恢复。
【预期结果】:重启主机,或插拔下有线耳机后,恢复到操作之前的音量,且实际音量与操作前的音量保持一致。
【实际结果】:重启主机,或插拔下有线耳机后,无法恢复到操作之前的音量,虽然图形界面显示的是之前的音量,但实际音量比图形界面显示的音量小,必须重新调整新的音量才能恢复。