pulseaudio

Jak włączyć dźwięk w kontenerze Docker'a za sprawą PulseAudio

Jakiś czas temu postanowiłem przetestować sposób zamknięcia graficznych aplikacji w kontenerze Docker'a. Całe rozwiązanie zostało opisane na przykładzie skonteneryzowania przeglądarki Firefox. Ten opisany w podlinkowanym artykule pomysł był nawet całkiem przyzwoity ale nie nadaje się on, gdy w grę wchodzą programy odtwarzające dźwięk. No może to za dużo powiedziane, że się nie nadaje, ale z pewnością brakuje mu jednego istotnego elementu. Nawet ta przykładowa przeglądarka internetowa jest w stanie odtwarzać dźwięki jeśli się odwiedzi stosowną stronę WWW. Standardowo jednak nic nie usłyszymy w głośnikach, gdy odpalimy dajmy na to stronę YouTube i puścimy jakiś materiał video. Dlatego też wypadałoby skonfigurować dźwięk i przesłać go do serwera PulseAudio, który będzie odpalony na naszym linux'owym hoście. Kiedyś już tego typu rozwiązanie nawet opisywałem na przykładzie zintegrowania PulseAudio z kontenerami LXC. Okazuje się, że tamto rozwiązanie znajduje również zastosowanie w przypadku Docker'a. Trzeba tylko nieco inaczej skonfigurować kontener i właśnie tej kwestii będzie dotyczył niniejszy wpis.

Przesyłanie dźwięku i plików ze smartfona przez bluetooth

Praktycznie każdy telefon czy komputer/laptop jest wyposażony już w adapter bluetooth. Obecnie coraz rzadziej ten protokół jest wykorzystywany do przesyłania plików jako takich, bo przecie mamy WiFi. Niemniej jednak, w starszych modelach urządzeń bluetooth może być dla nas jedyną opcją, by przesłać pliki bezprzewodowo. Nawet jeśli dysponujemy smartfonem z jednym z nowszych Androidów, to i tak są pewne sytuacje, w których bluetooth może znaleźć ciekawe zastosowanie, np. streaming dźwięku. Urządzenia bluetooth bardzo często sprawiają problemy pod linux i przydałoby się zebrać trochę informacji na temat ich konfiguracji, by przesyłanie dźwięku i plików nie stanowiło dla nas większego wyzwania w sytuacjach podbramkowych, gdzie wszelkie inne alternatywy komunikacji zawodzą.

Konfiguracja serwera dźwięku PulseAudio

Wielu użytkowników linux'a nie przepada zbytnio za PulseAudio, bo ten z jakiegoś powodu sprawia u nich same kłopoty. U mnie ten serwer dźwięku działa przyzwoicie i zwykle nie ma z nim żadnych problemów. Obecnie ten projekt jest już na tyle dojrzały, że te większe środowiska graficzne zwyczajnie polegają na nim w zależnościach. Jeśli jednak instalowaliśmy debiana za pomocą narzędzia debootstrap i konfigurowaliśmy osobno graficzną sesję Xserver'a, menadżer logowania LightDM czy też menadżer okien Openbox, to raczej zależy nam na minimalnym środowisku, które może się zwyczajnie obejść bez PulseAudio. Niemniej jednak, PulseAudio ma kilka ciekawych bajerów, których ALSA nie posiada. By się nie rozpisywać zbytnio, mogę wspomnieć choćby o możliwościprzesyłania dźwięku przez sieć, czy też o takim ficzerze jak normalizacja głośności. Są to głównie zabawki dla nieco bardziej zaawansowanych użytkowników i gdy ich nie potrzebujemy, to serwer dźwięku nam się raczej do niczego nie przyda. Warto jednak się zaznajomić z tym nieco bardziej zaawansowanym kawałkiem oprogramowania i w tym wpisie postaramy się nieco omówić instalację i konfigurację tego serwera dźwięku.

Szyfrowanie dźwięku przesyłanego przez sieć

PulseAudio to serwer dźwięku, który jest w stanie otrzymywać zapytania ze zdalnych lokalizacji. Wobec czego, możemy realizować przesyłanie dźwięku przez sieć i usłyszeć go tam, gdzie go sobie życzymy. Problem w tym, że taki dźwięk jest przesyłany przez sieć w formie niezaszyfrowanej. Dlatego też jesteśmy narażeni na podsłuchanie wszystkiego co mówimy do mikrofonu lub też tego co pojawia się w naszych głośnikach. Możemy jednak zabezpieczyć komunikację między klientem i serwerem dźwięku wykorzystując do tego połączenie SSH. W ten sposób cały sygnał dźwiękowy, jaki jest generowany przez danego hosta w sieci, zostanie wrzucony w szyfrowany kanał TLS i nikt nie będzie w stanie go zinterpretować. Ten wpis ma na celu przedstawienie sposobu na zaszyfrowanie dźwięku, bez którego większość z nas nie wyobraża sobie pacy przy komputerze.

PulseAudio i przesyłanie dźwięku przez sieć

Bardzo wielu ludzi nie uświadamia sobie faktu, że w przypadku komputerów praktycznie wszystkie dane, z którymi mamy styczność, są zapisane za pomocą dwóch znaków, tj. 0 i 1. Mając to na względzie, nie ma chyba informacji, której by nie można było przesłać przez sieć. Serwer dźwięku, jak sama nazwa wskazuje, jest w stanie odbierać dane zawierają informacje dźwiękowe. Dlatego też jeśli jakiś komputer nie posiada karty muzycznej lub/i nie jest fizycznie podłączony do głośników, to nie stanowi to większego problemu by był on w stanie odtwarzać dźwięk, przynajmniej w tym sensie jakim my to rozumiemy. W tym wpisie sþróbujemy zrealizować przesyłanie dźwięku przez sieć wykorzystując do tego PulseAudio i zobaczymy czy sprawi nam to jakieś problemy.

Wine w kontenerze LXC

Każdy kto zmienił architekturę systemu z i386 na amd64 raczej nie dostrzegł większej różnicy w operowaniu na którejś z nich. Czasem jedynie pakiety w nazwie mają 64 zamiast 32. Jest natomiast jedna rzecz, która drażni chyba każdego. Mowa tutaj o projekcie Wine. Wine nie umie obsługiwać natywnie serwera dźwięku PulseAudio. Do tego dochodzi jeszcze problem, który związany jest z tymi wszystkimi pakietami 32 bitowymi, które trzeba zainstalować. I w ten sposób nasz system staje się bardziej multiarch niż amd64. W tym wpisie postaramy się przy pomocy kontenera LXC odizolować Wine od całej reszty systemu operacyjnego, tak by nie musieć wgrywać do niego całej masy zbędnych bibliotek.

Brak dźwięku przy nieaktywnej sesji logowania

Jeśli korzystamy z serwera dźwięku PulseAudio na swoim linux'ie, prawdopodobnie zdarzyła nam się już sytuacja, w której chcieliśmy zablokować lub wygasić ekran monitora mając jednocześnie odpalony jakiś odtwarzacz muzyki. Gdy tylko ekran zostanie zablokowany, możemy odnotować brak dźwięku, bo ten zwyczajnie natychmiast zamiera. Za to po odblokowaniu ekranu, dźwięk wraca. Podobnie sprawa ma się przy przejściu z trybu graficznego (Xorg) na jedną z konsol TTY.

Normalizacja głośności w PulseAudio

Każdy z nas spotkał się z sytuacją, gdzie dźwięki odtwarzane na naszych maszynach zmieniają swoje natężenie w krótkich odstępach czasu, a my przy tym odczuwamy bardzo nieprzyjemne uczucie dyskomfortu psychicznego. Tego typu efekt jest też bardzo często spotykany przy oglądaniu filmów, gdzie zwykle muzyka jest sporo głośniejsza od samych dialogów, nie wspominając już o reklamach, którymi filmy są przerywane. Innym przykładem mogą być mp3, gdzie jedna z nich jest grana zbyt cicho, natomiast kolejna zbyt głośno. PulseAudio jest w stanie poradzić sobie z tego typu problemami.

Automatyczne wyciszanie dźwięku w PulseAudio

Wszystkie główne dystrybucje, a może raczej ich środowiska graficzne, wykorzystują do odtwarzania dźwięku serwer PulseAudio. Niektóre wręcz są tak z nim zżyte, że nie idzie ich oddzielić od siebie. Ja generalnie uważam, że ten kawałek oprogramowania jest jak najbardziej przydatny człowiekowi i potrafi realizować kilka kwestii, które bez niego, albo by nie były możliwe do osiągnięcia, albo trzeba by się natrudzić przy ich implementacji, np. przesyłanie dźwięku przez sieć. U siebie na debianie nigdy nie miałem większych problemów z PulseAudio, z kolei zaś te, które się przytrafiały na drodze jego użytkowania, szło w miarę prosty sposób wyeliminować. Jest jednak jeden problem, z którym prawdopodobnie spotkaliśmy się wszyscy, przynajmniej jeśli wykorzystujemy mikrofon w stopniu większym niż przeciętny użytkownik komputera. Chodzi o to, że po odpaleniu pewnych aplikacji (lub też i w trakcie ich działania), takich jak np. Skype, Mumble, czy TeamSpeak3, dźwięk we wszystkich pozostałych programach potrafi zwyczajnie zdechnąć.