Вы ищете способ автоматически запускать ваш любимый музыкальный проигрыватель при подключении Bluetooth-устройства (например, гарнитуры или динамика) к вашей системе Linux? В этой статье вы узнаете, как настроить автоматизацию для автоматического открытия музыкального приложения при подключении Bluetooth-устройства с помощью systemd и простого сценария Bash. Мы будем использовать Rhythmbox в качестве музыкального проигрывателя, но вы можете заменить его любым другим приложением.
Мы протестировали эту настройку с помощью Bluetooth-гарнитуры Fingers в операционной системе Debian 12 Cinnamon, и она отлично работает!
Прежде чем настраивать скрипт, вам нужно найти MAC-адрес вашего устройства Bluetooth. MAC-адрес — это уникальный идентификатор вашего устройства.
Убедитесь, что ваше устройство Bluetooth включено и находится в режиме сопряжения.
Откройте терминал и запустите:
bluetoothctl devices
Откроется список устройств Bluetooth с их MAC-адресами. Определите правильный MAC-адрес для вашего устройства.
Пример вывода:
Device 01:B6:ED:14:1F:8F FINGERS FC-SoundStorm
Запишите MAC-адрес (например, 01:B6:ED:14:1F:8F
). Он понадобится вам на следующих этапах.
Сначала создайте скрипт, который проверяет, подключено ли ваше устройство Bluetooth, и запускает Rhythmbox, если оно ещё не запущено.
Откройте терминал и создайте новый файл:
#!/usr/bin/env bash # ------------------------------------------------------------------ # Script Name: bluetooth-music.sh # Description: A Bash script to Auto-launch Music Player on Bluetooth Connect # Website: https://gist.github.com/ostechnix # Version: 1.0 # ------------------------------------------------------------------ DEVICE_MAC="01:B6:ED:14:1F:8F" APP="rhythmbox" FLAG_FILE="/tmp/bluetooth_music.flag" # Check if Bluetooth device is connected bluetoothctl info "$DEVICE_MAC" | grep -q "Connected: yes" if [ $? -eq 0 ]; then # If Rhythmbox is not running and wasn't manually closed, start it if ! pgrep -f "$APP" > /dev/null && [ ! -f "$FLAG_FILE" ]; then DISPLAY=:0 "$APP" & fi else # Remove flag when Bluetooth disconnects rm -f "$FLAG_FILE" fi
01:B6:ED:14:1F:8F
MAC-адресом вашего устройства Bluetooth.rhythmbox
на команду для предпочитаемого вами музыкального приложения (например, clementine
, spotify
, vlc
).
Сохраните файл и выйдите из него, нажав Ctrl + X
, затем Y
, затем Enter
.
Выполните следующую команду, чтобы сделать скрипт исполняемым:
chmod +x ~/bluetooth-music.sh
Теперь нам нужно настроить службу systemd для запуска скрипта в фоновом режиме.
Создайте служебный файл systemd:
nano ~/.config/systemd/user/bluetooth-music.service
Добавьте следующую конфигурацию:
[Unit] Description=Auto-launch Music Player on Bluetooth Connect After=bluetooth.target [Service] ExecStart=/bin/bash -c 'while sleep 2; do ~/bluetooth-music.sh; done' Restart=always Environment=DISPLAY=:0 Environment=XDG_RUNTIME_DIR=/run/user/%U [Install] WantedBy=default.target
Убедитесь, что путь к файлу bluetooth-music.sh
указан правильно в конфигурации службы. Нажмите CTRL+O
и CTRL+X
для сохранения и закрытия файла.
Выполните следующие команды, чтобы включить и запустить службу:
systemctl --user daemon-reload systemctl --user enable bluetooth-music.service systemctl --user start bluetooth-music.service
Теперь, когда ваше устройство Bluetooth подключится, Rhythmbox откроется автоматически!
Небольшая проблема при таком подходе заключается в том, что если вы закроете приложение Rhythmbox, скрипт автоматически перезапустит его. Это происходит потому, что скрипт каждые несколько секунд проверяет, подключено ли ваше устройство Bluetooth. Если Rhythmbox
оно не запущено, скрипт запускает его снова. Вам может не понравиться это, и вы посчитаете, что это раздражает.
Чтобы предотвратить такое поведение, выполните следующий шаг.
Поскольку скрипт продолжает открываться, Rhythmbox
используйте файл с флагом, чтобы указать, когда вы закрываете его вручную.
Для этого создайте псевдоним для ручного закрытия Rhythmbox:
echo "alias closemusic='touch /tmp/bluetooth_music.flag && pkill rhythmbox'" >> ~/.bash_aliases
Это создаёт команду под названием closemusic
, которая закрывает Rhythmbox и устанавливает флаг, предотвращающий его повторное открытие.
Обратите внимание, что мы уже определили файл /tmp/bluetooth_music.flag
в нашем скрипте, который мы создали ранее на шаге 2.
Теперь скрипт проверяет наличие файла /tmp/bluetooth_music.flag
. Если он существует, Rhythmbox не перезапустится.
Перезагрузить ~/.bash_aliases
файл:
source ~/.bash_aliases
С этого момента вы можете использовать команду closemusic
вместо обычного закрытия Rhythmbox
:
closemusic
Это говорит скрипту о том, что не нужно повторно открывать Rhythmbox, если только ваше Bluetooth-устройство не отключится и не подключится снова.
Если Rhythmbox не запускается или работает некорректно, попробуйте выполнить следующие действия:
Запустите скрипт, чтобы посмотреть, работает ли он:
./bluetooth-music.sh
Если Rhythmbox не запускается, проверьте, подключено ли ваше устройство Bluetooth:
bluetoothctl info 01:B6:ED:14:1F:8F
Убедитесь, что Connected: yes
отображается в выходных данных.
Пример вывода:
Device 01:B6:ED:14:1F:8F (public) Name: FINGERS FC-SoundStorm Alias: FINGERS FC-SoundStorm Class: 0x00260404 Icon: audio-headset Paired: yes Bonded: yes Trusted: yes Blocked: no Connected: yes LegacyPairing: no UUID: Headset [...]
systemctl --user status bluetooth-music.service
Ищите ошибки в выходных данных.
journalctl --user -u bluetooth-music.service -n 50 --no-pager
Если вы видите Cannot open display
, подтвердите, что DISPLAY=:0
установлено в сервисном файле.
Убедитесь, что вы указали правильный путь к скрипту bluetooth-music.sh
в конфигурации systemd.
systemctl --user restart bluetooth-music.service
При такой настройке ваш музыкальный проигрыватель будет автоматически запускаться при подключении устройства Bluetooth, и вы сможете полностью управлять его работой, останавливая его при необходимости. Этот метод обеспечивает бесперебойную работу в Linux без лишних перезапусков.
Если вы нашли это руководство полезным, пожалуйста, поделитесь им с другими пользователями Linux!