Kolejny raz prosty skrypt, tym razem z prośbą o przetestowanie. Chodzi o automatyczne wykrywanie podłączonego iPoda. Zależy mi dodaniu automatycznej obsługi tych urządzeń do programów, które w tej chwili wymagają ręcznego podania nazwy urządzenia i punktu montowania (gtkpod, Quod Libet z wtyczką do iPoda). W tym celu muszę się upewnić, że wykrywanie działa prawidłowo.
Wymagania
- dbus
- hal
- python
- python-dbus
Skrypt
#!/usr/bin/python
import dbus
class IPodSeek (object):
def findPod(self):
bus = dbus.SystemBus()
try:
hal_manager_obj = bus.get_object('org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')
hal_manager = dbus.Interface(hal_manager_obj,
'org.freedesktop.Hal.Manager')
dev_udi_list = hal_manager.FindDeviceStringMatch ('portable_audio_player.type', 'ipod')
for udi in dev_udi_list:
vol_udi_list = hal_manager.FindDeviceStringMatch ('info.parent', udi)
for vol_udi in vol_udi_list:
vol_obj = bus.get_object ('org.freedesktop.Hal', vol_udi)
vol = dbus.Interface (vol_obj, 'org.freedesktop.Hal.Device')
if not vol.GetProperty('volume.is_mounted'):
continue;
return (vol.GetProperty('block.device'), vol.GetProperty('volume.mount_point'))
except None:
print 'HAL is down.'
return ('', '')
def __init__(self):
(dev, mount) = self.findPod()
print 'dev = %s; mount = %s' % (dev, mount)
IPodSeek()
Instrukcja obsługi
Wystarczy zapisać plik jako ipodseek.py i nadać mu prawa do wykonania (chmod +x ipodseek.py).
Prosiłbym o podanie w komentarzach, czy skrypt działa prawidłowo (iPod musi być zamontowany), konkretnego modelu iPoda i dystrybucji użytej do testowania. Jeśli wszystko pójdzie zgodnie z planem, przygotuję patche na źródła programów. Zgodnie z filozofią Apple, chciałbym żeby iPod po prostu działał.
Sprawdzone urządzenia
- iPod Nano (PLD 3.0; Gentoo — Maciej
Tas
Litwiniuk) - iPod Shuffle (Ubuntu Dapper 6.06 — Maciej
byte
Chojnacki)
Implementacja
Na początek, przygotowałem patch dla wtyczki do Quod Libeta, jest do pobrania na stronie z wtyczką.
Autor wtyczki poinformował mnie przy okazji, że planowane jest jej włączenie do podstawowego kodu Quod Libet.
