回答:
を編集する/etc/pulse/default.pa
ことにより、pulseaudioモジュールにスイッチオン接続をロードし、pulseaudioサウンドサーバーに提示されるとすぐにオーディオシンクに自動接続できます。次の行を挿入する必要があります
load-module module-switch-on-connect
Bluetoothデバイスは、存在するとすぐにPulseAudioで認識されます。ただし、オーディオ設定で手動で接続する必要があります。BTデバイス(stream2ip)へのワンクリック接続を可能にするGUIがあります。
編集:バージョン0.2.5以降、stream2ipはBluetoothデバイスへの自動接続を許可します。
編集: bluezデバイスが存在しない場合、内部オーディオへのフォールバックを使用して、bluezデバイスをデフォルトのデバイスとして設定できます(たとえば、pactlを使用するか、構成設定で)。
編集:これは、ジョブを実行する方法についてのアイデアを提供するための簡単で汚いPythonスクリプトです。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
#
# bt-autoconnect
# Autoconnects Bluetooth Devices to PulseAudio
# (c) Takkat Nebuk
# Licence: GPLv3
# usage:
# bt-autoconnect <MAC> <timeout>
import subprocess
import time
import sys
import string
cli_options = sys.argv
def main():
MAC = cli_options[1]
timeout = cli_options[2]
PMAC = string.replace(MAC,':','_') # PA don't know ':', needs '_'
pa_args = ['pacmd set-default-sink bluez_sink.' + PMAC]
bt_args = ['sdptool browse ' + MAC]
err = False
while err == False:
if subprocess.call(bt_args, shell=True) == 0:
err = subprocess.call(pa_args, shell=True)
time.sleep(int(timeout))
exit()
if __name__ == "__main__":
main()
このスクリプトをコピーしてbt-autoconnect.pyとして保存します。スクリプトを実行可能にするか、コマンドラインから実行して(推奨)cd /script/directory
、次のように入力します。
python bt-autoconnect.py [MAC] [timeout]
置き換えMACを(:0C:78:4F:B6:例えば00 B5)、BluetoothデバイスのMACによって、目的の設定のタイムアウトを秒単位で(例えば10)の際に、デバイス用のスクリプトルックス。このスクリプトは、Bluetoothデバイスのタイムアウト秒ごとに指定されたMACをリッスンし、存在する場合はPulseAudioに接続します。スクリプトは、強制終了されるか、仮想端末が閉じられるまで永久に実行されます。
場合によっては、PulseAudioは、スイッチが切られた後、デバイスが再び存在することを認識していないようです。いくつかの希望pulseaudio -k
があれば、それは再び現れます。
派手ではなく、GUIはありませんが、少なくとも私の設定では問題ありませんでした。
関心のある人向けの編集:便利なセットアップのためのGUIを使用したbt-autoconnectがリリースされました。そこにバグや提案を提出してください。テストしていただきありがとうございます。
sudo service pulseaudio restart
、変更を有効にするには、実行または再起動する必要があります。
残念ながら、私はタックカットからの答えを見たばかりです。それは私のものよりも良い方法のようです。
これは、Pulseaudio <1.0に関連する可能性があると思います。ポーリングは使用しませんが、dbusでBluetoothイベントをリッスンします。
#!/usr/bin/python
# based on monitor-bluetooth
# Changes by Domen Puncer <domen@cba.si>
import gobject
import dbus
import dbus.mainloop.glib
import os
# we want this event: {AudioSource.PropertyChanged} [/org/bluez/16797/hci0/dev_00_24_7E_51_F7_52] State = playing
# and when that happens: pactl load-module module-loopback source=bluez_source.00_24_7E_51_F7_52 sink=alsa_output.pci-0000_00_1b.0.analog-stereo
def property_changed(name, value, path, interface):
iface = interface[interface.rfind(".") + 1:]
val = str(value)
print "{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name, val)
if iface == "AudioSource" and name == "State" and val == "playing":
bt_addr = "_".join(path.split('/')[-1].split('_')[1:])
cmd = "pactl load-module module-loopback source=bluez_source.%s sink=alsa_output.pci-0000_00_1b.0.analog-stereo" % bt_addr
os.system(cmd)
def object_signal(value, path, interface, member):
iface = interface[interface.rfind(".") + 1:]
val = str(value)
print "{%s.%s} [%s] Path = %s" % (iface, member, path, val)
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
bus.add_signal_receiver(property_changed, bus_name="org.bluez", signal_name = "PropertyChanged", path_keyword="path", interface_keyword="interface")
mainloop = gobject.MainLoop()
mainloop.run()