Подружил организмы Маруси и Home Assistent

1. Установи PipeWire и WirePlumber:

sudo apt install pipewire pipewire-audio-client-libraries wireplumber libspa-0.2-bluetooth

sudo apt install wireplumber pipewire-audio pipewire-pulse bluez

2. Отключи PulseAudio:

systemctl --user --now disable pulseaudio.service pulseaudio.socket

3. Запусти PipeWire вручную:

systemctl --user daemon-reexec systemctl --user start pipewire pipewire-pulse wireplumber

Если всё ок:

pactl info

→ Должно отразиться Server Name: PulseAudio (on PipeWire ...)

4. Подключи колонку:

bluetoothctl power on connect D4:35:38:33:0D:B9 trust D4:35:38:33:0D:B9

Через 5 секунд:

pactl list short sinks

Должен появиться bluez_output... — и TTS из Home Assistant будет работать.

2. Проверь, что WirePlumber грузит bluetooth-политику

ls /usr/share/wireplumber/bluetooth.lua.d/

→ должен быть файл 50-bluez-config.lua или подобный.

3. Проверь поддержку Bluetooth в PipeWire

Создай (или обнови) файл:

mkdir -p ~/.config/wireplumber/main.lua.d/
nano ~/.config/wireplumber/main.lua.d/bluez-monitor-enable.lua

Вставь:

bluez_monitor = {}

bluez_monitor.properties = {

       ["bluez5.enable-sbc-xq"] = true,

       ["bluez5.enable-msbc"] = true,

       ["bluez5.enable-hw-volume"] = true,

      ["bluez5.roles"] = "[ a2dp_sink ]"   

}

Сохрани и выйди.

Открой (или создай) файл:

sudo nano /etc/systemd/system/bluetooth.service.d/override.conf

И вставь:

[Service]

ExecStart=

ExecStart=/usr/sbin/bluetoothd --noplugin=sap

После этого:

sudo systemctl daemon-reexec

sudo systemctl restart bluetooth

4. Перезапусти WirePlumber

systemctl --user restart wireplumber

5. Переподключи колонку

bluetoothctl disconnect D4:35:38:33:0D:B9

bluetoothctl connect D4:35:38:33:0D:B9

6. Проверь карты и sink'и

pactl list short cards

pactl list short sinks

Ожидаем bluez_output....

2. 🔧 Сделать колонку устройством по умолчанию

Дальнейшие шаги

Установи A2DP-профиль (если не установлен): 

bluetoothctl connect D4:35:38:33:0D:B9

pactl set-card-profile bluez_card.D4_35_38_33_0D_B9 a2dp-sink

Это нужно для качественного звука. Без этого может быть headset-head-unit, который даёт только низкокачественный звук.

  1. Сделай колонку выходом по умолчанию:

pactl set-default-sink bluez_output.D4_35_38_33_0D_B9.1

  1. Проверь, работает ли воспроизведение:

paplay /usr/share/sounds/alsa/Front_Center.wav

Если звук воспроизводится через колонку — всё работает.

  1. Создай systemd unit для автоподключения:

nano ~/.config/systemd/user/bt-autoconnect.service

Вставь следующее:

[Unit]

Description=Автоподключение Bluetooth-колонки

After=bluetooth.target

[Service]

ExecStart=/usr/bin/bluetoothctl connect D4:35:38:33:0D:B9

Restart=on-failure

[Install]

WantedBy=default.target

  1. Включи сервис:

systemctl --user daemon-reexec

systemctl --user daemon-reload

systemctl --user enable --now bt-autoconnect.service

✅ 2. Установка Bluetooth-колонки как основного sink после подключения

Создаём PipeWire hook:

  1. Создай скрипт:

mkdir -p ~/.config/pipewire/default-sink

nano ~/.config/pipewire/default-sink/bluetooth-default.sh

  1. Вставь:

#!/bin/bash

sleep 10 # Подождать, пока колонка появится

pactl set-card-profile bluez_card.D4_35_38_33_0D_B9 a2dp-sink

pactl set-default-sink bluez_output.D4_35_38_33_0D_B9.1

  1. Сделай исполняемым:

chmod +x ~/.config/pipewire/default-sink/bluetooth-default.sh

  1. Создай user unit:

nano ~/.config/systemd/user/bluetooth-default-sink.service

[Unit]

Description=Назначить Bluetooth-колонку устройством по умолчанию

After=bt-autoconnect.service

[Service]

Type=oneshot

ExecStart=%h/.config/pipewire/default-sink/bluetooth-default.sh

[Install]

В итоге нормально не работает: перед каким нибудь действием нужно разбудить колонку несколькими командами, пока колонка занята одним, другое неработает. ОТКАЗАЛСЯ.

WantedBy=default.target

  1. Активируй:

systemctl --user daemon-reload systemctl --user enable --now bluetooth-default-sink.service

Comments powered by CComment