Wrzucam kod dla ciekawych, działa z systemami Linux w których działa menadżer MPRIS (do sterowania odtwarzaczami przez interfejs DBus).
Do działania wymagany jest pakiet python3-gi i zainstalowany program `playerctl`. Na waszą prośbę, jeśli ktoś jest zainteresowany, znajdę czas i ochotę na wyeliminowanie zależności od `playerctl`.
Program uruchamia się bez demona, więc polecam odpalić go przez 'nohup' lub 'setsid' (i znowu, na waszą prośbę, znajdę czas i ochotę żeby program się demonizował).
Uruchamiamy go z argumentem adresu MAC urządzenia bluetooth, które jest słuchawkami. Np. `setsid ./bluetooth-pause.py AC:21:23:00:FC:C8`.
#!/usr/bin/env python3
from pydbus import SystemBus
from gi.repository import GLib
import subprocess
import time
import re
import sys
ADDRESS = sys.argv[1].replace(':','_')
def pc_handler(sender=None, iface=None, signal=None, object=None, arg0=None):
dev_api = dev['org.bluez.Device1']
if dev_api.Connected:
print(f"Device {ADDRESS} connected.")
else:
print(f"Device {ADDRESS} disconnected.")
subprocess.call(['playerctl', '-a', 'pause'])
bus = SystemBus()
bluez_desc = bus.get('org.bluez').Introspect()
ifaces = re.findall("node name=\"(hci.)\"", bluez_desc)
if not ifaces:
raise Exception("No bluetooth interfaces available, check your adapter")
dev = ""
dev_iface = ""
print(f"Running lookup for {ADDRESS}...")
for iface in ifaces:
print(f"Checking {iface}...")
try:
dev = bus.get('org.bluez', f'/org/bluez/{iface}/dev_{ADDRESS}')
print(f"Device {ADDRESS} was found at {iface}.")
dev_iface = iface
break
except KeyError:
print(f"Device {ADDRESS} was not found at {iface}, continuing.")
if not dev:
raise Exception(f"Device {ADDRESS} was not found in the system, please make sure to pair it first")
listener = bus.subscribe(iface='org.freedesktop.DBus.Properties', signal='PropertiesChanged',
object=f'/org/bluez/{dev_iface}/dev_{ADDRESS}',
arg0='org.bluez.Device1', signal_fired=pc_handler)
loop = GLib.MainLoop()
loop.run()