如何调试 Pulse Audio 问题?

Sen*_*ran 13 sound pulseaudio

我已经在我的机器上安装了 Ubuntu 11.10。我已作为 USER_A 登录。我的外部音频设备是耳机,我能够正确听到音频。

我需要将我的 Ubuntu 机器加入一个窗口域(我的办公室服务器)。我按照http://www.ghacks.net/2010/04/21/join-a-ubuntu-machine-to-a-windows-domain/ 中解释的步骤成功地将我的 ubuntu 机器加入了 windows 域.

sudo apt-get install likewise-open5
sudo domainjoin-cli join DOMAIN USER_B
Run Code Online (Sandbox Code Playgroud)

现在,当我以 USER_B 身份登录时,同一台机器上没有该用户的音频。

我与我的 User_A 帐户交叉检查。User_A 的声音没有问题。仅对于 User_B,没有音频。

当我检查 User_B 的声音设置时,硬件、输入和输出中没有列出设备。而对于用户 A,我的耳机列在输入和输出中。

任何人都可以帮我解决这个问题。为什么 User_B 没有声音?

能否请您简单介绍一下如何“检查音频组中是否添加了用户”。

而且当我尝试在终端中执行 pulseaudio -k 时(来自 User_B)

E: [pulseaudio] main.c: Failed to kill daemon: No such process
Run Code Online (Sandbox Code Playgroud)

我也在脉冲音频日志上找到了这个。当我运行时:

pulseaudio --log-level=4 --log-target=stderr
Run Code Online (Sandbox Code Playgroud)

我在日志中发现以下错误行:

E: [pulseaudio] module-dbus-protocol.c: dbus_server_listen() failed: org.freedesktop.DBus.Error.BadAddress: Abstract socket name too long
E: [pulseaudio] module-dbus-protocol.c: Starting the local D-Bus server failed.
E: [pulseaudio] module.c: Failed to load module "module-dbus-protocol" (argument: ""): initialization failed.
E: [pulseaudio] main.c: Module load failed.
E: [pulseaudio] main.c: Failed to initialize daemon.
Run Code Online (Sandbox Code Playgroud)

Tak*_*kat 18

此初步答案总结了调试仅在为该用户加入域的环境中对该用户可用的声音所涉及的步骤。以后可能需要延长。

如果我们只有一个用户的声音,我们可能在这个用户帐户的设置中有一些错误的配置。我们需要从受影响的用户帐户中采取以下步骤以进一步了解问题。

  1. 脉冲音频是否正在运行?
    通常您会通过访问顶部栏中的声音菜单看到这一点。或者,我们可以在终端中发出以下命令:

    pulseaudio -k
    
    Run Code Online (Sandbox Code Playgroud)

    如果pulseaudio不运行,将会出现错误。此外,此命令负责停止和重新生成pulseaudio,以防它挂起。

  2. pulseaudio 守护进程的用户设置是否有误?
    为了测试这一点,我们必须重命名受影响用户的 HOME 中的设置目录,然后重新启动pulseaudio(参见1.):

    mv ~/.pulse ~/.pulse.bad
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    mv ~/.config/pulse ~/.config/pulse.bad  ## for newer releases
    
    Run Code Online (Sandbox Code Playgroud)
  3. ALSA 的频道是否静音?
    我们可以在终端中打开 alsamixer 来调整通道音量,并在通道意外静音时取消静音:

    alsamixer
    
    Run Code Online (Sandbox Code Playgroud)
  4. 确保用户不在“音频”组
    中 该audio组中的用户对pulseaudio 服务器具有独占访问权限。当该用户使用它时,其他用户无法访问它。因此用户不应该在audio组中。

  5. 手动启动Pulseaudio
    如果pulseaudio没有运行,我们也可以从命令行启动守护进程

    pulseaudio -D
    
    Run Code Online (Sandbox Code Playgroud)

    Pulseaudio 然后使用默认设置并启动它的守护进程。我们还可以将此命令放入我们的自动启动应用程序,以克服在加载桌面之前pulseaudio 无法运行的情况。

  6. 浏览日志文件
    Pulseaudio 将在系统启动和用户登录时加载。因此,只能从启动pulseaudio 时生成的日志中读取错误。请参阅本指南,了解如何生成 pulsaudio 日志脚本。简而言之,我们必须注意 pulseaudio 不会重生,我们可以在详细模式下运行它:

    pulseaudio -vvvv <options>
    
    Run Code Online (Sandbox Code Playgroud)

要完成的


在问题中给出的情况下,我们可以看到pulseaudio 无法运行,因为它无法启动D-Bus 服务。这可能是由于到用户 HOME 的路径损坏或过长造成的(请参阅错误 #872992)。作为一种解决方法,我们可以通过/etc/pulse/default.pa像这样注释掉以下行来发出没有​​ D-Bus 控制的pulseaudio :

# load-module module-dbus-protocol
Run Code Online (Sandbox Code Playgroud)

但是,我们(和我们的应用程序)将无法使用 D-Bus 控制脉冲音频。