https://bbs.deepin.org.cn/post/290663
系统和内核日志来一个
https://bbs.deepin.org.cn/post/290663
系统和内核日志来一个
https://bbs.deepin.org.cn/post/290663
系统和内核日志来一个
把默认的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 "$@"
fi
使用方法
保存脚本:将上面的脚本保存为 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,就可以成功。
把默认的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 "$@"
fi
使用方法
保存脚本:将上面的脚本保存为 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
【系统环境】
matebook 14 ultra5 deepin25 内核6.12
【问题描述】
现在使用的系统是25.0.10,是12.16号晚上更新到这个版本。以前使用的是这个之前的版本,在使用新版本系统时候出现微信语音不能使用麦克风。在老系统这个问题是没有的,就是想求证一下,这个如何解决。
【截图/录屏】
(请在此处附上问题现象的截图或录屏)