Linux 如何在docker中使用alsa声音和/或snd_pcm_open?

Linux 如何在docker中使用alsa声音和/或snd_pcm_open?,linux,ubuntu,audio,docker,alsa,Linux,Ubuntu,Audio,Docker,Alsa,我正在Ubuntu 16.04主机上运行Ubuntu 12.04 Docker容器。我有一些测试代码练习“snd_pcm_open”/“snd_pcm_close”操作以及snd_pcm_STREAM_回放和snd_pcm_STREAM_捕获流类型 我不需要任何实际的声音/音频功能,但只要使用有效句柄获取“snd_pcm_open”返回0,然后在同一句柄上使用“snd_pcm_close”返回0就足够了。我不想修改代码,因为它已经有一些不太好的依赖于平台的开关,我不是维护人员 我正在使用简单的代

我正在Ubuntu 16.04主机上运行Ubuntu 12.04 Docker容器。我有一些测试代码练习“snd_pcm_open”/“snd_pcm_close”操作以及snd_pcm_STREAM_回放和snd_pcm_STREAM_捕获流类型

我不需要任何实际的声音/音频功能,但只要使用有效句柄获取“snd_pcm_open”返回0,然后在同一句柄上使用“snd_pcm_close”返回0就足够了。我不想修改代码,因为它已经有一些不太好的依赖于平台的开关,我不是维护人员

我正在使用简单的代码,并将其编译为“g++alsa_test.cpp-lasound”

#include <stdio.h>
#include <alsa/asoundlib.h>

int main() {
    snd_pcm_t* handle;
    snd_pcm_stream_t stream_type[]= {SND_PCM_STREAM_PLAYBACK, SND_PCM_STREAM_CAPTURE};

    printf("\nstarting\n");
    for (unsigned char i = 0; i < sizeof(stream_type) / sizeof(stream_type[0]); ++i) {
        printf(">>>>>>>>\n\n");
        int deviceResult = snd_pcm_open(&handle, "default" , stream_type[i], 0);
        printf("\n%d open: %d\n", stream_type[i], deviceResult);

        if (deviceResult >= 0) {
            printf("attempting to close %d\n", stream_type[i]);
            snd_pcm_drain(handle);
            deviceResult = snd_pcm_close(handle);
            printf("%d close: %d\n\n", stream_type[i], deviceResult);
        }
        printf("<<<<<<<<\n\n");
    }

    return 0;
}
顺便说一下,容器只有“root”用户,所以访问权限也不应该是问题

要让它工作起来,最简单、最不麻烦的方法是什么?我宁愿去掉特权模式和映射到容器的dev/modules,但是,这些容器不是从外部世界访问的,只是为一些短期任务创建/销毁的。因此,安全并不是一个大问题


提前谢谢

如果您实际上不需要设备正常工作,请使用
null
设备而不是
default

要使
null
插件成为默认插件,请将其放入容器的
/etc/asound.conf
,或用户的
~/.asoundrc

pcm。!默认值=null;

如果您实际上不需要设备正常工作,请使用
null
设备而不是
default

要使
null
插件成为默认插件,请将其放入容器的
/etc/asound.conf
,或用户的
~/.asoundrc

pcm。!默认值=null;

你试过了吗:
docker run
带有标志
--device/dev/snd
是的,我也试过了,但运气不好-v/dev:/dev可能更复杂,但也不起作用。你能分享
strace-fe open./a.out
的输出吗?
docker run
有标志
--device/dev/snd
是的,我也试过了,但运气不好-v/dev:/dev可能更复杂,但也不起作用。您能否分享
strace-fe open./a.out
root@31142791f82d:/export# modinfo soundcore
filename:       /lib/modules/4.4.0-59-generic/kernel/sound/soundcore.ko
alias:          char-major-14-*
license:        GPL
author:         Alan Cox
description:    Core sound module
srcversion:     C941364F5CD0B525693B243
depends:        
intree:         Y
vermagic:       4.4.0-59-generic SMP mod_unload modversions 
parm:           preclaim_oss:int
root@31142791f82d:/export# ls -l /dev/snd/
total 0
drwxr-xr-x  2 root root      100 Feb  2 21:10 by-path
crw-rw----+ 1 root audio 116,  2 Feb  2 07:42 controlC0
crw-rw----+ 1 root audio 116,  7 Feb  2 07:42 controlC1
crw-rw----+ 1 root audio 116, 12 Feb  2 21:10 controlC2
crw-rw----+ 1 root audio 116,  6 Feb  2 07:42 hwC0D0
crw-rw----+ 1 root audio 116, 11 Feb  2 07:42 hwC1D0
crw-rw----+ 1 root audio 116,  3 Feb  2 07:42 pcmC0D3p
crw-rw----+ 1 root audio 116,  4 Feb  2 07:42 pcmC0D7p
crw-rw----+ 1 root audio 116,  5 Feb  2 07:42 pcmC0D8p
crw-rw----+ 1 root audio 116,  9 Feb  2 10:44 pcmC1D0c
crw-rw----+ 1 root audio 116,  8 Feb  2 07:42 pcmC1D0p
crw-rw----+ 1 root audio 116, 10 Feb  2 21:30 pcmC1D1p
crw-rw----+ 1 root audio 116, 14 Feb  2 21:10 pcmC2D0c
crw-rw----+ 1 root audio 116, 13 Feb  2 21:10 pcmC2D0p
crw-rw----+ 1 root audio 116,  1 Feb  2 07:42 seq
crw-rw----+ 1 root audio 116, 33 Feb  2 07:42 timer