У меня есть следующее правило udev:
ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/usr/local/bin/a2dp-fix-wrapper"
который запускает следующий скрипт:
PID=$(pgrep pulseaudio)
USER=$(grep -z USER= /proc/$PID/environ | sed 's/.*=//')
USER_ID=$(id -u $USER)
HOME=$(echo $(getent passwd $USER )| cut -d : -f 6)
export XDG_RUNTIME_DIR=/run/user/$USER_ID
export XAUTHORITY=$HOME/.Xauthority
export DISPLAY=:0
export PULSE_RUNTIME_PATH=$XDG_RUNTIME_DIR/pulse/
sleep 5
sudo -u $USER -E /usr/local/bin/a2dp-fix &> /udev_output.txt
и a2dp-fix это следующее:
bt_device_addr=$(pacmd list-cards | grep -i 'name:.*bluez_card' | sed -E 's/.*<?bluez_card\.([A-Z0-9_]+)>?/\1/')
device_mac=$(echo $bt_device_addr | sed 's/_/:/g')
a2dp_available=$(pacmd list-cards | grep -A30 bluez | grep "A2DP Sink" | sed -E 's/.* available: ([a-z]+)\)/\1/g')
if [[ "$a2dp_available" == "no" ]]
then
echo -e "connect $device_mac\nquit" | bluetoothctl
sleep 5
pacmd set-card-profile bluez_card.$bt_device_addr off
pacmd set-card-profile bluez_card.$bt_device_addr a2dp_sink
pacmd set-default-sink bluez_sink.$bt_device_addr.a2dp_sink
fi
После долгих вмешательств в переменные env я заставил pacmd
. Однако теперь часть bluetoothctl
зависает с сообщением “Waiting to connect to bluetoothd…”
. Это прекрасно работает, если я вызываю его вручную из оболочки с помощью sudo /usr/local/bin/a2dp-fix-wrapper
но не тогда, когда udev запускает его. Я предполагаю, что это должна быть какая-то переменная env, которая не позволяет bluetoothctl
найти работающий экземпляр bluetoothd
.
У кого-нибудь есть мысли?