From c36a6dcd65a027bdf3058b9ad2920cc773dfae78 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 28 Feb 2020 01:14:43 +0100 Subject: [PATCH] Add default asound for pulse (#1538) * Add default asound for pulse * fix lint * fix config --- supervisor/audio.py | 21 ++++++++++++++++++--- supervisor/data/asound.tmpl | 13 +++++++++++++ supervisor/docker/addon.py | 6 +++++- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 supervisor/data/asound.tmpl diff --git a/supervisor/audio.py b/supervisor/audio.py index 7dab5ffdd..d7817662f 100644 --- a/supervisor/audio.py +++ b/supervisor/audio.py @@ -4,6 +4,7 @@ from contextlib import suppress import logging from pathlib import Path from typing import Awaitable, Optional +import shutil import jinja2 @@ -18,6 +19,7 @@ from .validate import SCHEMA_AUDIO_CONFIG _LOGGER: logging.Logger = logging.getLogger(__name__) PULSE_CLIENT_TMPL: Path = Path(__file__).parents[0].joinpath("data/pulse-client.tmpl") +ASOUND_TMPL: Path = Path(__file__).parents[0].joinpath("data/asound.tmpl") class Audio(JsonConfig, CoreSysAttributes): @@ -31,9 +33,14 @@ class Audio(JsonConfig, CoreSysAttributes): self.client_template: Optional[jinja2.Template] = None @property - def path_extern_data(self) -> Path: - """Return path of pulse cookie file.""" - return self.sys_config.path_extern_audio.joinpath("external") + def path_extern_pulse(self) -> Path: + """Return path of pulse socket file.""" + return self.sys_config.path_extern_audio.joinpath("external/pulse.sock") + + @property + def path_extern_asound(self) -> Path: + """Return path of default asound config file.""" + return self.sys_config.path_extern_audio.joinpath("asound") @property def version(self) -> Optional[str]: @@ -90,6 +97,14 @@ class Audio(JsonConfig, CoreSysAttributes): except OSError as err: _LOGGER.error("Can't read pulse-client.tmpl: %s", err) + # Setup default asound config + asound = self.sys_config.path_audio.joinpath("asound") + if not asound.exists(): + try: + shutil.copy(ASOUND_TMPL, asound) + except OSError as err: + _LOGGER.error("Can't create default asound: %s", err) + async def install(self) -> None: """Install Audio.""" _LOGGER.info("Setup Audio plugin") diff --git a/supervisor/data/asound.tmpl b/supervisor/data/asound.tmpl new file mode 100644 index 000000000..94931a293 --- /dev/null +++ b/supervisor/data/asound.tmpl @@ -0,0 +1,13 @@ +# Default to PulseAudio + +pcm.!default { + type pulse + hint { + show on + description "Default ALSA Output (Home Assistant PulseAudio Sound Server)" + } +} + +ctl.!default { + type pulse +} diff --git a/supervisor/docker/addon.py b/supervisor/docker/addon.py index f1509e720..88b8e2645 100644 --- a/supervisor/docker/addon.py +++ b/supervisor/docker/addon.py @@ -308,10 +308,14 @@ class DockerAddon(DockerInterface): "bind": "/etc/pulse/client.conf", "mode": "ro", }, - str(self.sys_audio.path_extern_data.joinpath("pulse.sock")): { + str(self.sys_audio.path_extern_pulse): { "bind": "/run/pulse.sock", "mode": "rw", }, + str(self.sys_audio.path_extern_asound): { + "bind": "/etc/asound.conf", + "mode": "ro", + }, } )