[Feedback on issues] 控制台音量调节功能异常
Tofloor
poster avatar
黑色的白兔
deepin
2025-12-09 11:31
Author

亮度可以通过拖动就可以调节,但是音量不可以,是不是功能异常了,还是设计本来如此?
image.png

Reply Favorite View the author
All Replies
deepin-流云
Super Moderator
Community OP
2025-12-09 11:37
#1

可以正常拖动的呀,系统版本是什么?声音都正常么
录屏_选择区域_20251209113442.gif

Reply View the author
kookboy
deepin
2025-12-09 11:38
#2

需要先选择一下输出设备或驱动:…

Reply View the author
黑色的白兔
deepin
2025-12-09 11:49
#3
kookboy

需要先选择一下输出设备或驱动:…

没有外置耳机,只有电脑自带的

Reply View the author
黑色的白兔
deepin
2025-12-09 11:50
#4
deepin-流云

可以正常拖动的呀,系统版本是什么?声音都正常么
录屏_选择区域_20251209113442.gif

6.12.43

Reply View the author
ksgt0025
deepin
2025-12-09 11:59
#5

把默认的PipeWire切换到PulseAudio试试

#!/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

1、保存脚本:将上面的脚本保存为 audio-switch.sh
2、赋予执行权限:

chmod +x audio-switch.sh

3、使用脚本:

# 查看当前状态
./audio-switch.sh status

# 切换到 PulseAudio
./audio-switch.sh to-pa

# 切换到 PipeWire  
./audio-switch.sh to-pw

# 重启当前音频服务
./audio-switch.sh restart
Reply View the author
黑色的白兔
deepin
2025-12-09 12:32
#6
ksgt0025

把默认的PipeWire切换到PulseAudio试试

#!/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

1、保存脚本:将上面的脚本保存为 audio-switch.sh
2、赋予执行权限:

chmod +x audio-switch.sh

3、使用脚本:

# 查看当前状态
./audio-switch.sh status

# 切换到 PulseAudio
./audio-switch.sh to-pa

# 切换到 PipeWire  
./audio-switch.sh to-pw

# 重启当前音频服务
./audio-switch.sh restart

(base) C:/persistent/home/@@$ ./audio-switch.sh status

[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
(base)******::/persistent/home/@@$ ./audio-switch.sh to-pa

[INFO] 当前音频服务: pipewire



服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
[INFO] 正在切换到 PulseAudio...
Created symlink /home/@@:/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/
@@/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.
Job for pulseaudio.service canceled.
[SUCCESS] 已切换到 PulseAudio
[INFO] 验证切换结果...
[ERROR] 切换验证失败!期望: pulseaudio, 实际: pipewire
(base) ***/persistent/home/@@$ ./audio-switch.sh to-pw
[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: inactive
inactive
PipeWire-Pulse: active
PulseAudio: active
[INFO] 正在切换到 PipeWire...
Created symlink /home/@@/.config/systemd/user/default.target.wants/pipewire.service → /usr/lib/systemd/user/pipewire.service.
Created symlink /home/@@/.config/systemd/user/sockets.target.wants/pipewire.socket → /usr/lib/systemd/user/pipewire.socket.
Created symlink /home/@@/.config/systemd/user/default.target.wants/pipewire-pulse.service → /usr/lib/systemd/user/pipewire-pulse.service.
Created symlink /home/@@/.config/systemd/user/sockets.target.wants/pipewire-pulse.socket → /usr/lib/systemd/user/pipewire-pulse.socket.
A dependency job for pipewire-pulse.service failed. See 'journalctl -xe' for details.
[SUCCESS] 已切换到 PipeWire
[INFO] 验证切换结果...
[SUCCESS] 切换验证成功!当前音频服务: pipewire
[INFO] 音频服务器信息:
连接失败:拒绝连接
pa_context_connect() 失败:拒绝连接
(base) @@:/persistent/home/@@$ ./audio-switch.sh restart
[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
[INFO] 重新启动当前音频服务: pipewire
[SUCCESS] 音频服务已重启

Reply View the author
ksgt0025
deepin
2025-12-09 12:40
#7
黑色的白兔

(base) C:/persistent/home/@@$ ./audio-switch.sh status

[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
(base)******::/persistent/home/@@$ ./audio-switch.sh to-pa

[INFO] 当前音频服务: pipewire



服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
[INFO] 正在切换到 PulseAudio...
Created symlink /home/@@:/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/
@@/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.
Job for pulseaudio.service canceled.
[SUCCESS] 已切换到 PulseAudio
[INFO] 验证切换结果...
[ERROR] 切换验证失败!期望: pulseaudio, 实际: pipewire
(base) ***/persistent/home/@@$ ./audio-switch.sh to-pw
[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: inactive
inactive
PipeWire-Pulse: active
PulseAudio: active
[INFO] 正在切换到 PipeWire...
Created symlink /home/@@/.config/systemd/user/default.target.wants/pipewire.service → /usr/lib/systemd/user/pipewire.service.
Created symlink /home/@@/.config/systemd/user/sockets.target.wants/pipewire.socket → /usr/lib/systemd/user/pipewire.socket.
Created symlink /home/@@/.config/systemd/user/default.target.wants/pipewire-pulse.service → /usr/lib/systemd/user/pipewire-pulse.service.
Created symlink /home/@@/.config/systemd/user/sockets.target.wants/pipewire-pulse.socket → /usr/lib/systemd/user/pipewire-pulse.socket.
A dependency job for pipewire-pulse.service failed. See 'journalctl -xe' for details.
[SUCCESS] 已切换到 PipeWire
[INFO] 验证切换结果...
[SUCCESS] 切换验证成功!当前音频服务: pipewire
[INFO] 音频服务器信息:
连接失败:拒绝连接
pa_context_connect() 失败:拒绝连接
(base) @@:/persistent/home/@@$ ./audio-switch.sh restart
[INFO] 当前音频服务: pipewire

服务状态:
PipeWire: active
PipeWire-Pulse: active
PulseAudio: inactive
inactive
[INFO] 重新启动当前音频服务: pipewire
[SUCCESS] 音频服务已重启

再切换一次 不要用管理员权限

Reply View the author
ksgt0025
deepin
2025-12-09 12:51
#8

你用的是虚拟机?你看看虚拟机有没有音频增强选项之类的,把它开启看看。

Reply View the author
a-bird
deepin
2025-12-09 13:17
#9
ksgt0025

把默认的PipeWire切换到PulseAudio试试

#!/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

1、保存脚本:将上面的脚本保存为 audio-switch.sh
2、赋予执行权限:

chmod +x audio-switch.sh

3、使用脚本:

# 查看当前状态
./audio-switch.sh status

# 切换到 PulseAudio
./audio-switch.sh to-pa

# 切换到 PipeWire  
./audio-switch.sh to-pw

# 重启当前音频服务
./audio-switch.sh restart

我在网上搜过这两类音频框架,按理说PipeWire要比PulseAudio好,但是我的电脑自带喇叭似乎更适合PulseAudio。目前deepin23.1版本中,默认使用PulseAudio,音量大小都很正常,但是deepin25.0.9版本默认使用的是PipeWire,音量感觉不正常

Reply View the author
ksgt0025
deepin
2025-12-09 13:30
#10
a-bird

我在网上搜过这两类音频框架,按理说PipeWire要比PulseAudio好,但是我的电脑自带喇叭似乎更适合PulseAudio。目前deepin23.1版本中,默认使用PulseAudio,音量大小都很正常,但是deepin25.0.9版本默认使用的是PipeWire,音量感觉不正常

我这边是因为在PipeWire下,同一张声卡下用耳机模式切换回音响,声音会变小,需要静音一下,才恢复。切换回PulseAudio这个问题就没了。在别的发行版同样是PipeWire却没发现这个问题。可能是某些代码冲突了,或者是PipeWire文件的问题吧。

Reply View the author
黑色的白兔
deepin
2025-12-09 13:52
#11
ksgt0025

你用的是虚拟机?你看看虚拟机有没有音频增强选项之类的,把它开启看看。

不是虚拟机,笔记本电脑

Reply View the author
黑色的白兔
deepin
2025-12-09 13:56
#12
ksgt0025

我这边是因为在PipeWire下,同一张声卡下用耳机模式切换回音响,声音会变小,需要静音一下,才恢复。切换回PulseAudio这个问题就没了。在别的发行版同样是PipeWire却没发现这个问题。可能是某些代码冲突了,或者是PipeWire文件的问题吧。

重启了一下,现在正常了。

Reply View the author
一粒
deepin
2025-12-10 09:46
#13

(挠头)不要推荐别人从pipewire切换到pulseaudio啊,有问题就报问题都是可以修的,pulseaudio是真的没人维护了

Reply View the author