„Z mojego punktu widzenia (prawdopodobnie dlatego, że nie mam laptopa), jedną z głównych zalet nowoczesnego telefonu jest możliwość przechowywania na nim danych, do których mam stały dostęp (Dokumenty/Grafika/Audio/Video), dlatego właśnie kluczowym problemem był wygodny dostęp do plików, tak jak dla pamięci przenośnej, i najlepiej – bezprzewodowy. Oto co zrobiłem by to uzyskać.”
Słowem wstępu
Nie, tytuł nie pomylił mi się ze słowami kluczowymi, ponieważ dokładnie opisuje o co chodzi :)
Posiadam od 2 dni nokię E50, zgrabny i lekki telefonik z symbianem 9, który podobno jest następcą 6310i. Jak dotąd przechodzi przez moje kolejne testy pomyślnie i chyba faktycznie go zatrzymam. Jedyny istotny minus to bateria, ale myślę że jeśli chce się mieć kolorowy wyświetlacz i tyle różnych gadżetów w środku, to trzeba za to jakoś zapłacić użytecznością, trudno – może się przyzwyczaję do dwa razy krótszego czasu życia baterii, a może się okaże że wartości podawane w sieci (3-4 dni) nie są tak bliskie prawdy w moim przypadku.
Wracając do tematu głównego…
Z mojego punktu widzenia, jedną z głównych zalet telefonu jest możliwość przechowywania na nim danych, do których mam dostęp (Dokumenty/Grafika/Audio/Video). Brakuje mi co prawda opcji odczytywania i edycji ODT, ale ostatecznie pozostają PDFy (tak, uparłem się i z doc korzystać nie będę, prędzej sam napiszę plugin do ODT :P).
Dlatego właśnie kluczowym problemem był wygodny dostęp do plików, tak jak dla pamięci przenośnej, i najlepiej – bezprzewodowy. Zdaję sobie sprawę, że większość dystrybucji domyślnie instaluje potrzebne pakiety, ale w moim przypadku (system Linux From Scratch) taka opcja nie wchodziła w grę, więc musiałem zrobić to co zawsze, czyli zainstalować wszystko ręcznie krok po kroku.
Zacząłem od wyszukania w sieci strony Open Obex (otwarta implementacja protokołu wykorzystywanego do przesyłania plików między urządzeniami przenośnymi a komputerem) i sprawdzenia co u nich nowego. Nie zawiodłem się, gdyż dowiedziałem się o ObexFS, czyli o systemie plików opartym na FUSE, dzięki któremu pamięc telefonu możemy zamontować poprzez bluetooth tak – jak zwykłą pamięć przenośną.
Potrzebne oprogramowanie
FUSE (wybrałem wersję 2.4.2, zgodnie z zaleceniem na stronie ObexFs)
OpenObex
ObexFTP
ObexFS, beta
dodatkowo, aby mieć możliwość korzystania z anteny bluetooth, potrzebne są także:
D-Bus (chyba opcjonalne)
BlueZ
Instalacja D-Bus’a i BlueZ’a nie powinna nikomu sprawić problemu (dość standardowe ./configure;make;su -c „make install;ldconfig” i edycja /etc/hcid.conf, /etc/bluetooth/hcid.conf lub /usr/local/etc/bluetooth/hcid.conf), ciekawie robi się dalej :)
Zależności nakazują dalej instalację FUSE. Ponieważ FUSE jest podzielony na dwie części: kernelspace (moduł) i userspace (biblioteki), moduł możemy skompilować razem z resztą FUSE’a, albo możemy skorzystać z kodu dołączanego do jądra (podobno od 2.6.8) i przekompilować kernel.
Ponieważ próba wykonania tej krótszej operacji, czyli kompilacji samego modułu dołączonego razem ze źródłem FUSE’a, zakończyła się z bliżej mi nie znanych przyczyn, już przy pierwszym pliku (fuse-2.4.2/kernel/dev.c:112: error: impossible constraint in `asm’), wybrałem bramkę nr 2, czyli rekompilację kernela. Potrzebną do włączenia opcję znalazłem szybko w „File systems/Filesystem in Userspace” (wybrałem dołączenie do jądra). Po załadowaniu od nowa systemu z poprawionym jądrem w dmesg pojawił się „fuse init (API version 7.7)”, czyli wszystko w porządku.
Dalsze kompilacje bibliotek FUSE, OpenObex, ObexFtp i w końcu ObexFS przebiegły standardowo (./configure;make;su -c „make install;ldconfig”).
Kolejnym krokiem była konfiguracja nowego punktu montowania, czyli stworzenie katalogu, w którym będzie montowany telefon (np. /mnt/nokia), a następnie dodanie odpowiedniej konfiguracji do /etc/fstab (strona ObexFS opisuje kilka możliwości konfiguracji punktu montowania), czyli w skrócie dodanie linii:
obexfs#-b00-11-22-33-44-55 /mnt/nokia fuse user,fsname=obexfs#-b00-11-22-33-44-55 0 0
gdzie oczywiście 00-11-22-33-44-55, to MAC adres naszego telefonu. Aby go uzyskać, włączamy bluetooth w telefonie, podłączamy antenę bluetooth do usb i wykonujemy polecenie:
hcitool scan
Po chwili powinna pojawić się lista wykrytych urządzeń:
Scanning ...
00:15:B1:14:B1:12 mSzift
wstawiamy myślniki w miejsce dwukropków, dodajemy całą linijkę do /etc/fstab i gotowe!
Teraz według teorii, wystarczyło wydać polecenie:
mount /mnt/nokia
Tu teoria się kończy...
Niestety w moim przypadku system chwilę potrawił, nie wyrzucił nic, a /mnt/nokia dalej było puste…
Z początku podejrzewałem zły kanał komunikacji. Wykonałem
sdptool browse
aby przekonać się jakimi kanałami usług dysponuje telefon… i telefony sąsiadów.. żartuję, potrzebna jest autoryzacja. Po stronie komputera powinno wyskoczyć okienko z pytaniem o kod PIN – nie chodzi tu o PIN telefonu – ale o dowolny najlepiej wymyślony na poczekaniu ( wyłącznie cyfrowy, ale nie typu 111..) kod, który następnie wprowadzimy w telefonie, celem weryfikacji, że oba końce połączenia są u Nas, a nie np. u sąsiada ;)
Już po chwili zobaczymy potok danych na ekranie, będą one podzielone na bloki tekstu, po parę linijek. Szukamy „Service Name: OBEX File Transfer” i niżej w tym samym bloku tekstu znajdujemy coś takiego:
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
"OBEX" (0x0008)
Oczywiście interesuje Nas właśnie ta liczba 11, bo mówi ona o numerze kanału, przez który będziemy przesyłać pliki. Ponownie według strony ObexFS, aby zdefiniować kanał podajemy wpis tak:
obexfs#-b00-11-22-33-44-55\040-B6 /mnt/nokia fuse user,fsname=obexfs#-b00-11-22-33-44-55\040-B6 0 0
gdzie „\040-B6” odpowiada „ -B6”, czyli w pokazanym wyżej przypadku ostatecznie będzie to wyglądało tak:
obexfs#-b00-15-B1-14-B1-12\040-B11 /mnt/nokia fuse user,fsname=obexfs#-b00-15-B1-14-B1-12\040-B11 0 0
niestety to u mnie nie podziałało. Cały czas otrzymywałem komunikat o źle podanej opcji B11, więc w końcu wyedytowałem plik /sbin/mount.fuse i na samym dole zakomentarzowałem (dodałem # przed)
${FSTYPE} ${MOUNTPATH} ${MOUNTPOINT} ${OPTIONS}
i poniżej wpisałem na sztywno:
obexfs -b 00:15:B1:14:B1:12 -B11 /mnt/nokia
Teraz po ponownym wykonaniu mount /mnt/nokia komputer jakby dłużej myślał, ale dalej bez skutku. Podejrzałem co się dzieje w /var/log/sys.log (lub dmesg) i zobaczyłem wpisy w tym stylu:
Apr 26 10:45:39 szift hcid[2171]: link_key_request (sba=11:11:11:11:11:11, dba=00:15:B1:14:B1:12)
a więc coś jeszcze było nie tak, chwila zastanowienia doprowadziła mnie do odpowiedzi…(haha! look at me, no google :P)
Tanie moduły Bluetooth
Czyli te sprzedawane po 10-20 zł na allegro, podobno mające zasięg do 100m. Korzystalem z nich od dłuższego czasu bez większych problemów, np. do łączenia się z siecią przez 6310i po GPRS, jednak zawsze zastanawiało mnie dlaczego ich adresy MAC to 11:11:11:11:11:11. W tym przypadku to właśnie okazało się być problemem, ale jak wszystko w Linuksie – tylko dopóki nie znalazłem właściwego rozwiązania. Tym rozwiązaniem okazał się mały prosty programik o nazwie bdaddr, służący właśnie do zmiany MAC adresu urządzeń bluetooth. Jest on dołączony do aktualnych wersji BlueZ’a, ale o ile dobrze pamiętam, nie kompiluje się i nie instaluje przy zwykłym standardowym ./configure;make..itd. Aby z niego skorzystać, należy w katalogu źródła wejść do katalogu „test” i tam wykonać polecenie make, a następnie ręcznie przekopiować go sobie do /usr/sbin (sbin a nie bin, bo do faktycznego działania wymaga uprawnień roota). W ten sposób jesteśmy już tylko 3 kroki od zamontowania telefonu:
1. jako root zmieniamy adres naszego urządzenia bluetooth na coś rozsądnego
bdaddr -i hci0 00:16:B5:11:B2:05
Manufacturer: Integrated System Solution Corp. (57)
Device address: 11:11:11:11:11:11
New BD address: 00:16:B5:11:B2:05
Address changed - Reset device now
2. dalej jako root, zgodnie z poleceniem resetujemy naszą antenę
hciconfig hci0 reset
to polecenie nie pokazuje nic, aby się jeszcze upewnić czy zmiana nastąpila pomyślnie, można wykonać:
hciconfig hci0
hci0: Type: USB
BD Address: 00:16:B5:11:B2:05 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN ISCAN AUTH ENCRYPT
RX bytes:3960523 acl:11027 sco:0 events:10752 errors:0
TX bytes:3114843 acl:10643 sco:0 commands:84 errors:0
czyli nowy adres jest już ustawiony, teraz pozostaje ostatni krok
3. jako zwykły użytkownik wykonujemy polecenie:
mount /mnt/nokia
i cieszymy się nową pamięcia przenośną ;)
ls /mnt/nokia/C:/Data
A0000BEC Documents Games Images Installs Others Sounds Videos
Na koniec
Trzeba pamiętać, że ustawienie adresu MAC trzeba przeprowadzić po każdym podłączeniu anteny do usb, lub po każdym zrestartowaniu komputera. Można pewnie napisać do tego jakiś prosty skrypt, który przy każdym podłączeniu urządzenia będzie robił to za nas. Sam narazie dodałem te polecenia do sekwencji startowej systemu (po uruchomieniu hcid), ponieważ antenę mam i tak cały czas podłączoną do usb.
Warto zauważyć, że df nie pokazuje nam nic o nowym podmontowaniu, natomiast zwykłe cat /etc/mtab i owszem:
obexfs /mnt/nokia fuse rw,nosuid,nodev,user=szift 0 0
Mamy dostęp tylko do dysku C: i ewentualnie D: (karta pamięci), ale w sumie nie ma dużego problemu z dostępem do innych części telefonu, dzięki Y-Browser do przeglądania wszystkiego w telefonie – z poziomu telefonu.
Bardzo ciekawą pozycją jest także PuTTY for Symbian OS, czyli niemal kompletny klient w stylu PuTTY (u mnie ma tylko problem z zapamiętaniem konfiguracji domyślnej, ale zmieniłem to przerzucając plik C:\System\Apps\putty\defaults do C:\Data, edytując ręcznie z komputera (jakoś tak wygodniej ;) i wrzucając spowrotem na swoje miejsce).
