wtorek, 13 maja 2014

Gdy androidowemu urządzeniu ciężko idzie współpraca z linuksem (czy na odwrót?)...

Problem.

Podłączasz urządzenie z Androidem na pokładzie (przykład jednego ze smartfonów Samsunga) do komputera działającego pod kontrolą Xubuntu 13.10 lub 14.04, a urządzenie daje do wyboru tryb MTP ("urządzenie multimedialne")  lub PTP ("aparat fotograficzny"). Któregokolwiek trybu nie wybierzesz, komunikacja między komputerem a telefonem (przechodzenie przez katalogi, zaznaczanie plików do kopiowania itd.) odbywa się tak wolno, że aż prawie wcale...

W czym więc jest problem (którego nie mają telefony dające do wyboru w miarę szybki, acz niewygodny i nielubiany przeze mnie tryb "USB storage")? 

Otóż kiedyś ktoś namieszał w linuksowych bibliotekach (albo ich ubunciakowych wersjach?) - głównie libmtp, mtpfs i fuse - czyniąc je szalenie wolno działającymi. I tutaj jest pies pogrzebany. Głównie.

Co trzeba zrobić?

Rzucić okiem na artykuł "Connect an Android 4.0+ phone/tablet to Ubuntu, the reliable way" i wykonać wszystkie opisane w nim czynności ;-)
Żeby zaś ułatwić sobie życie - nie każdy bowiem lubi wpisywać polecenia w konsoli - można wygenerować sobie skrypty zawierające komendy montujące:

go-mtpfs ~/MyAndroid &

oraz odmontowujące urządzenie:

fusermount -u ~/MyAndroid

i umieścić je  którymś z katalogów dostępnych "na ścieżce", np. /usr/local/bin.
W następnym kroku tworzymy dla tych skryptów aktywatory na pulpicie i - voila! Komunikacja z naszym androidowym młoteczkiem śmiga jak marzenie (widzimy w Thunarze urządzenie pamięci masowej o nazwie MyAndroid)... pod warunkiem, że jesteśmy rootem... Właśnie - w artykule nie wspomniano o jeszcze jednej rzeczy, niezbędnej żeby montowanie i odmontowywanie mógł przeprowadzać Zwykły Użytkownik. Niniejszym zatem uzupełniam artykuł.
Podwyższamy sobie uprawnienia (np. logujemy się na roota lub używamy sudo) i tworzymy plik:

/etc/udev/rules.d/51-android.rules

W pliku tym umieszczamy następującą linijkę:

SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", MODE="0666", GROUP="plugdev"

gdzie XXXX zastępujemy - że posłużę się pewnym uproszczeniem - identyfikatorem naszego urządzenia działającego w trybie MTP ("urządzenie multimedialne"). Zapisujemy plik, upewniamy się, że należymy do grupy "plugdev" (jeśli nie, to sudo adduser $USER plugdev) i restartujemy komputer.
Po ponownym uruchomieniu możemy się cieszyć z szybkiej współpracy androidofona z naszym ulubionym systemem operacyjnym :-)

Jeszcze tylko krótka informacja, skąd wziąć ów identyfikator urządzenia. Otóż jeśli podłączymy nasz telefon do komputera poprzez USB i wybierzemy telefonie tryb MTP, to identyfikator pozyskamy w prosty sposób, wydając w konsoli polecenie lsusb. Przykładowy wiersz (spośród zwykle kilku) wygenerowany przez to polecenie wygląda np. tak (moja klawiatura ;-)):

Bus 002 Device 002: ID 045e:07b9 Microsoft Corp.

Nasz idVendor w tym przypadku to 045e. Proste?

Powodzenia zatem przy zabawie w transfer plików między telefonem a komputerem :-)