Автоматическое переключение звука на Bluetooth-наушники в Linux с помощью udev и wpctl
Содержание
Если вы используете Linux и часто подключаете Bluetooth-наушники, наверняка замечали, что звук не всегда автоматически переключается на новое устройство. В этом посте мы разберём простой и надёжный способ автоматизации этого процесса с помощью udev и wpctl (PipeWire). В Linux есть два популярных звуковых сервиса: PulseAudio и PipeWire. PipeWire постепенно становится стандартом, и в сочетании с WirePlumber можно настроить автоматическое переключение. Но иногда WirePlumber не срабатывает, или событие обрабатывается с задержкой. Решение — использовать udev, который отслеживает события подключения устройств и запускает скрипт. Убедитесь, что PipeWire и WirePlumber запущены: Также полезно посмотреть список аудиоустройств: Вы увидите свои колонки и Bluetooth-устройства: Создаём скрипт Делаем скрипт исполняемым: Применяем новые правила: Подключаем Bluetooth-наушники. Скрипт автоматически сохранит текущее устройство и переключит звук на наушники. Отключаем наушники. Скрипт вернёт звук на сохранённое устройство (например, ваши колонки). Проверить работу можно через Использование udev + wpctl позволяет надёжно автоматизировать переключение аудио на Bluetooth-наушники даже в случае, если WirePlumber не успевает сработать. Этот подход легко настраивается и не требует ручного выбора устройства при каждом подключении. Вступление
Шаг 1: Проверяем PipeWire и wpctl
Audio
├─ Sinks:
│ * 136. alsa_output.usb-ARTURIA_ArturiaMsd-00.analog-stereo
│ 55. bluez_output.XX_XX_XX_XX_XX_XX.a2dp-sink
Шаг 2: Создаём скрипт для переключения звука
/usr/local/bin/bt-audio-autoswitch.sh
:#!/bin/bash
ACTION=
STATEFILE="/run/user/ /bt-audio-last-sink"
LOGTAG="bt-audio-autoswitch"
# Текущее устройство вывода
# Идентификатор первого Bluetooth sink
# Ждём обновления PipeWire
if [; then
CURRENT=
if [; then
fi
BT_ID=
if [; then
fi
elif [; then
if [; then
PREV=
if [; then
fi
fi
fi
Шаг 3: Создаём udev-правило
# Подключение Bluetooth аудио
ACTION=="add", SUBSYSTEM=="sound", KERNEL=="card*", RUN+="/usr/local/bin/bt-audio-autoswitch.sh add"
# Отключение Bluetooth аудио
ACTION=="remove", SUBSYSTEM=="sound", KERNEL=="card*", RUN+="/usr/local/bin/bt-audio-autoswitch.sh remove"
Шаг 4: Проверяем работу
journalctl
:
Заключение