Потоковая передача звука Pulseaudio для нескольких пользователей по tcp с использованием Guacamole VNC

Убунту 14.04. У меня PulseAudio работает как демон и настроен на потоковую передачу. В /etc/pulse/default.pa я добавил следующее, чтобы принимать TCP-соединения:

load-module module-native-protocol-tcp auth-ip-acl=192.168.1.0/24 auth-anonymous=1

Поддержка VNC в Guacamole позволяет получать звук через подключение к серверу PulseAudio. См. соответствующую статью о поддержке Guacamole Audio (через PulseAudio). Я могу получить звук для потоковой передачи с одного рабочего стола VNC, но не более одного, несмотря на то, что в /etc/guacamole/user-mapping.xml включено несколько подключений VNC (это разные подключения). Например:

<!-- First user -->
<authorize username="user1" password="abcd">
    <connection name="vnc">
        <protocol>vnc</protocol>
        <param name="hostname">localhost</param>
        <param name="port">5903</param>
        <param name="password">abcd</param>
        <param name="enable-audio">true</param>
        <param name="audio-servername">localhost</param>
    </connection>
</authorize>

<!-- Second user -->
<authorize username="user2" password="abcd">
    <!-- First authorized connection -->
    <connection name="vnc">
        <protocol>vnc</protocol>
        <param name="hostname">localhost</param>
        <param name="port">5904</param>
        <param name="password">abcd</param>
        <param name="enable-audio">true</param>
        <param name="audio-servername">localhost</param>
    </connection>
</authorize>

PulseAudio принимает соединения через порт 4713.

$ netstat -ln | grep 4713
tcp        0      0 0.0.0.0:4713            0.0.0.0:*               LISTEN
tcp6       0      0 :::4713                 :::*                    LISTEN

Поддерживает ли PulseAudio несколько пользователей Guacamole VNC?

Поскольку Guacamole ведет журнал в /var/log/syslog, я изолировал журналы для двух экземпляров соединений. Это журналы.

Первое подключение — это пользователь с именем guacamole_guest, и у него нет звука.

Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Protocol "vnc" selected
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Connection ID is "$299e5678-59de-4dbd-9408-ad256785f732"
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: VNC server supports protocol version 3.8 (viewer 3.8)
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: We have 2 security types to read
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: 0) Received security type 2
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Selecting security type 2 (0/2 in the list)
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: 1) Received security type 16
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Selected Security Scheme 2
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: VNC authentication succeeded
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Desktop name "guacamole_guest's X desktop (lubuntu-ThinkCentre-M58p:3)"
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Connected to VNC server, using protocol version 3.8
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: VNC server default format:
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]:   32 bits per pixel.
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]:   Least significant byte first in each pixel.
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]:   TRUE colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Audio will be encoded as audio/ogg
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Starting audio stream
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Connecting to PulseAudio...
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Starting client
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Authorizing PulseAudio connection...
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Sending client name...
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: PulseAudio now ready
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Will use default sink: "auto_null"
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: Starting streaming from "Dummy Output"
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: PulseAudio stream being created...
Oct 23 02:31:23 lubuntu-ThinkCentre-M58p guacd[18848]: PulseAudio stream now ready
Oct 23 02:31:33 lubuntu-ThinkCentre-M58p guacd[18848]: Client disconnected
Oct 23 02:31:33 lubuntu-ThinkCentre-M58p guacd[18848]: Audio stream finished
Oct 23 02:31:33 lubuntu-ThinkCentre-M58p kernel: [1207939.582306] guacd[18848]: segfault at 67452305 ip b6b7ce15 sp bfd99cc0 error 4 in libguac-client-vnc.so.0.0.0[b6b73000+e000]

Второй пользователь называется lubuntu. У него есть звук.

Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Protocol "vnc" selected
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Connection ID is "$6344d2fb-c5fe-4073-82d7-88dea358b8f6"
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: VNC server supports protocol version 3.8 (viewer 3.8)
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: We have 2 security types to read
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: 0) Received security type 2
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Selecting security type 2 (0/2 in the list)
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: 1) Received security type 16
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Selected Security Scheme 2
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: VNC authentication succeeded
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Desktop name "lubuntu's X desktop (lubuntu-ThinkCentre-M58p:2)"
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Connected to VNC server, using protocol version 3.8
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: VNC server default format:
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]:   32 bits per pixel.
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]:   Least significant byte first in each pixel.
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]:   TRUE colour: max red 255 green 255 blue 255, shift red 16 green 8 blue 0
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Audio will be encoded as audio/ogg
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Starting audio stream
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Connecting to PulseAudio...
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Authorizing PulseAudio connection...
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Sending client name...
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Starting client
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: PulseAudio now ready
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Will use default sink: "auto_null"
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: Starting streaming from "Dummy Output"
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: PulseAudio stream being created...
Oct 23 02:31:37 lubuntu-ThinkCentre-M58p guacd[18871]: PulseAudio stream now ready
Oct 23 02:31:43 lubuntu-ThinkCentre-M58p guacd[18871]: Client disconnected
Oct 23 02:31:43 lubuntu-ThinkCentre-M58p guacd[18871]: Audio stream finished
Oct 23 02:31:43 lubuntu-ThinkCentre-M58p kernel: [1207949.566374] guacd[18871]: segfault at 67452305 ip b6b7ce15 sp bfd99cc0 error 4 in libguac-client-vnc.so.0.0.0[b6b73000+e000]

На поверхности они выглядят одинаково. Не знаю, куда двигаться дальше. Сегфоулты выглядят не очень хорошо, но они случаются в обоих случаях.


person sunapi386    schedule 23.10.2015    source источник


Ответы (1)


Поддерживает ли PulseAudio несколько пользователей Guacamole VNC?

PulseAudio не будет знать о VNC-подключениях Guacamole. Guacamole объединит аудиопоток от PulseAudio с графическим потоком от VNC, но соединения VNC и PulseAudio в остальном полностью независимы.

Guacamole может обрабатывать потоки PulseAudio для разных пользователей/подключений, но эти потоки должны поступать с разных хостов. Это связано с тем, что Guacamole будет выполнять следующие действия при подключении к PulseAudio от имени соединения VNC:

  1. Установите TCP-соединение с сервером PulseAudio, описанным audio-servername.
  2. Создайте источник монитора вокруг приемника по умолчанию и транслируйте полученные аудиопакеты.

Поскольку сервер PulseAudio в localhost будет одним и тем же сервером PulseAudio в обоих ваших соединениях, а приемник по умолчанию только один, вы будете слышать звук из одного и того же приемника в обоих случаях.

Первое подключение — это пользователь с именем guacamole_guest, и у него нет звука. ... Второго пользователя зовут lubuntu. У него есть звук.

Хотя это интересно, тот факт, что вы слышите звук только в одном из ваших подключений, скорее всего, больше связан с тем, как звук маршрутизируется в PulseAudio. Я уверен, что есть причина, но выяснение этой причины не приведет к решению вашей проблемы. Два подключения PulseAudio, связанные с вашими двумя подключениями VNC, гарантировано идентичны в вашем случае.

Если вы хотите разместить рабочие столы нескольких пользователей на одном и том же оборудовании, я бы рекомендовал вместо этого размещать рабочие столы каждого пользователя на виртуальной машине, используя что-то вроде VirtualBox или KVM. Это обеспечит лучшую изоляцию между пользователями, а также уникальный сетевой адрес для соответствующих им серверов PulseAudio.

Сегфоулты выглядят не очень хорошо, но они случаются в обоих случаях.

Действительно, guacd определенно не должен ошибаться. Если вы можете надежно воспроизвести segfault, лучше всего будет создать отчет об ошибке для проекта. В случае segfault инструкции по выполнению этого несколько сложны, но необходимы для определения, где и как происходит segfault:

  1. Убедитесь, что guacd мертв (чтобы мы могли запустить его снова под отладчиком).

    $ killall guacd
    guacd: no process found
    $ 
    
  2. Загрузите guacd в gdb, предварительно загрузив плагин для отказавшего протокола.

    $ LD_PRELOAD=/usr/local/lib/libguac-client-vnc.so gdb /usr/local/sbin/guacd
    GNU gdb (GDB) 7.4.1-debian
    Copyright (C) 2012 Free Software Foundation, Inc.
    ...
    (gdb)
    
  3. Скажите gdb следовать за следующим дочерним процессом (guacd создает новый дочерний процесс для изоляции и обработки каждого нового соединения).

    (gdb) set follow-fork-mode child
    (gdb)
    
  4. Запустите guacd в gdb, используя -L debug, чтобы включить ведение журнала уровня отладки в guacd.

    (gdb) run -L debug
    Starting program: /usr/local/sbin/guacd 
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
    guacd[29589]: INFO:     Guacamole proxy daemon (guacd) version 0.9.8 started
    guacd[29589]: DEBUG:    Unable to bind socket to host ::1, port 4822: Address family not supported by protocol
    guacd[29589]: DEBUG:    Successfully bound socket to host 127.0.0.1, port 4822
    guacd[29589]: INFO:     Listening on host 127.0.0.1, port 4822
    ...
    
  5. Воспроизведите проблему. Как только это произойдет, вы вернетесь к приглашению gdb. Получить обратную трассировку от gdb:

    (gdb) bt
    
  6. Отправьте полученную трассировку вместе с описанием того, как воспроизвести проблему в новой задаче в JIRA проекта Guacamole.

person Mike Jumper    schedule 09.11.2015