所以我的系统的扬声器和耳机插孔不起作用,所以我跑去sudo pulseaudio -v
看看问题是什么,我发现了太多错误(因此这个问题的奇怪命名)这是该命令的日志
因为我注意到pulseaudio
不应该使用 root 权限运行,所以我决定运行pulseaudio -v
并得到以下结果:
I: [pulseaudio] main.c: setrlimit(RLIMIT_NICE, (31, 31)) failed: Operation not permitted
I: [pulseaudio] main.c: setrlimit(RLIMIT_RTPRIO, (9, 9)) failed: Operation not permitted
I: [pulseaudio] core-util.c: Successfully gained nice level -11.
I: [pulseaudio] main.c: This is PulseAudio 15.99.1
I: [pulseaudio] main.c: Page size is 4096 bytes
I: [pulseaudio] main.c: Machine ID is 664d5eb40be146aaa89e6646ade8f191.
I: [pulseaudio] main.c: Using runtime directory /run/user/1000/pulse.
I: [pulseaudio] main.c: Using state directory /home/misery/.config/pulse.
I: [pulseaudio] main.c: Using modules directory /usr/lib/pulse-15.99.1+dfsg1/modules.
I: [pulseaudio] main.c: Running in system mode: no
E: [pulseaudio] pid.c: Daemon already running.
E: [pulseaudio] main.c: pa_pid_file_create() failed.
在尝试修复 PulseAudio 时,我发现了两个经常看到的错误:
pa_pid_file_create() failed.
org.bluez.ProfileManager1.RegisterProfile() failed: org.bluez.Error.NotPermitted: UUID already registered
我该如何解决这个问题?
答案1
请注意,来自 PulseAudio 的每条日志消息均以优先级指示符开头:I:
表示信息丰富的消息,而E:
用于错误消息。信息性消息可能表明像 PulseAudio 尝试它“知道”的东西可能会失败,也许是因为它有多种方法来实现某些东西,并且在不尝试所有方法的情况下无法知道哪种方法适合该特定系统。
我在运行中只看到两条实际错误消息sudo pulseaudio -v
,表明 Pulseaudio 两次尝试向 BlueZ 注册蓝牙音频,但在两次尝试中,都得到了响应,表明此类注册是已经完成了, IEPulseAudio 的另一个副本已经在运行。
你的第二次运行pulseaudio -v
证实了这一点。
E: [pulseaudio] pid.c: Daemon already running.
E: [pulseaudio] main.c: pa_pid_file_create() failed.
您已经有一个 PulseAudio 实例正在运行:您需要先停止它,然后再尝试启动另一个实例。
您的sudo pulseaudio -v
运行表明它正在检测系统上的三个独立的“声卡”:
card0
:PCI 设备 0000:00:03.0 处的 Intel HD Audio 类型声音设备。该设备似乎仅具有类似 HDMI 的音频输出,因此它可能是用于 HDMI 和/或 DisplayPort 音频的 GPU 集成音频设备。由于这是card0
,如果您没有主动选择其他内容,它可能会是您的默认输出。但是,如果您没有连接 DP 或 HDMI 音频功能并准备播放音频的显示器,则您将无法通过此显示器听到任何声音。card1
:另一个 Intel HD Audio 类型的声音设备,位于 PCI 设备 0000:00:1b.0。这个实际上有模拟输入和输出,其产品名称被检测为“Wildcat Point-LP High Definition Audio Controller”,所以这就是主板上的音频芯片。如果您使用的是实际计算机的耳机插孔(而不是配备 HDMI/DP 音频的显示器),则这就是您应该使用的声音设备。card2
:“Loopback PCM”假声卡,如果您想录制使用原始 ALSA 或 OSS 声音接口的旧应用程序的声音输出,但在其他情况下没有用处,则该卡可能很有用。如果您不小心将其选为默认声卡,您将不会获得实际的声音输出。
因此,您有两个“错误”选择和一个“正确”选择,并且有理由相信系统可能默认为错误选择之一,除非您明确选择了其他选择。
要确认 PulseAudio 的输出选择,您可能需要运行以下命令(作为普通用户,不是作为根):
pacmd list-cards | grep -e device.product.name -e device.bus_path -e device.description -e "active profile"
如果我正确理解你的情况,你会希望它输出如下内容:
device.bus_path = "pci-0000:00:03.0"
active profile: <off>
device.bus_path = "pci-0000:00:1b.0"
device.product.name = "Wildcat Point-LP High Definition Audio Controller"
device.description = "Built-in Audio Analog Stereo"
active profile: <output:analog-stereo+input:analog-stereo>
device.bus_path = "platform-snd_aloop.0"
device.description = "Built-in Audio Analog Stereo"
active profile: <off>
(输出可能包括其他行,但本质上应该有许多带有设备标识信息的更深缩进的行,然后是一个较少缩进的行,用于标识当前为其选择的 PulseAudio 配置文件。)
换句话说,您需要在 PulseAudio 中禁用PCI 设备上的 HDMI 音频设备0000:00:03.0
和误导性设备(通过为它们选择配置文件),并且 PCI 设备上真正具有模拟功能的声音芯片应该使用该配置文件它可能会在 GUI 工具中列为“模拟立体声双工”。platform-snd_aloop.0
off
0000:00:1b.0
如果您安装了 PulseAudio 配置 GUI 工具pavucontrol
,只需启动它(作为普通用户),转到“配置”选项卡,然后切换配置文件,记住两个“内置音频模拟立体声”设备之一将是由 ALSA 环回模块创建的伪造品snd-aloop
。
但是,您的桌面环境可能会尝试为您“记住”和“自动恢复”您的声音配置,因此尝试以这种方式绕过桌面配置工具可能会或可能不会在重新启动或注销/登录周期中持续存在。最好在桌面环境自己的控制面板/系统设置应用程序中找到相应的声音配置文件设置,然后从那里进行切换。但您尚未指定您正在使用哪种桌面环境(或者您是否正在使用一种桌面环境!),因此我无法为您提供具体说明。
另外,如果您没有理由使用snd-aloop
ALSA 模块,您可能需要尝试阻止它加载并为您带来额外的混乱来源。