Per una serie di ragioni (utenti,gruppi,permessi,device), il collegamento di cellulari nokia sia via USB che Bluetooth su slackware può creare una serie di problematiche. Per questa ragione in questo how-to vedremo un esempio di collegamento corretto via USB per trasferire file tra il cellulare e un sistema Gnu/Linux, nello specifico su Slackware.

Per prima cosa è bene essere certi di avere nel sistema l’utility di base che permetterà lo scambio di file tra cellulare e pc come se stessimo usando un comune applicativo ftp per lo scambio di file.

L’applicativo in questione è Obextool (grafico) che comprende ObexFtp (testuale) con relative openobex-apps_.
_

NB: l’how-to è scritto per Slackware 12.1 e superiori, in cui il pacchetto openobex-apps e anche obexftp è già presente. Se per una ragione strana non dovesse essere così sarà facimente reperibile dal web e nel caso specifico per Slackware anche già pacchettizato per l’uso.

Come primo passo quindi, accertata la presenza di obexftp e relative dipendenze ci assicureremo che il kernel riconosca il cellulare come un normale dispositivo di scambio di file in USB.

NB: ai fini di una buona riuscita bisogna considerare che tutto il procedimento si basa sul demone  udev . Se non fosse stato abilitato di default all’avvio di Slackware sarà bene dapprima verificare la sua presenza e in caso contrario startarlo da user root:

~# ps x | grep udev

1002 ?        S<s    0:02 /sbin/udevd --daemon

se non restituisce il processo provvederemo a startarlo:

~# /etc/rc.d/rc.udev start

Quindi colleghiamo  il cavetto USB da utente semplice e digitiamo:

~$ dmesg

che dovrebbe restituire un output simile al seguente:

usb 4-1: new full speed USB device using uhci_hcd and address 2
usb 4-1: configuration #1 chosen from 1 choice
cdc_acm 4-1:1.8: ttyACM0: USB ACM device
usbcore: registered new interface driver cdc_acm
drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters

Accertato che il cellulare Nokia sia stato riconosciuto come dispositivo USB provvederemo  a riconoscere il device di appartenenza:

~$ /sbin/lsusb
Bus 005 Device 001: ID 0000:0000  
Bus 004 Device 002: ID 0421:043a Nokia Mobile Phones N70 USB Phone Parent
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 003: ID 0c45:602c Microdia Clas Ohlson TWC-30XOP WebCam
Bus 001 Device 001: ID 0000:0000

Accertato che il cellulare è montato sul Device 002 identificato da udev come dev ttyACM0 , verificheremo come buona norma insegna da utente root quali sono i permessi e il gruppo assegnati di default dal sistema  a tale device. Tale parsimonia potrebbe tornarci utile in seguito.

~#  ls -al /dev/ttyACM0
crw-rw---- 1 root uucp 166, 0 2009-05-17 22:35 /dev/ttyACM0

Verificati i permessi  come utente root appartenente al gruppo uucp ed identificato il device, dovremo dire ad udev quale dispositivo è collegato. Per farlo dovremo munirci di due parametri: dell’ IdProduct e dell’IdVendor del cellulare nokia che intendiamo collegare.

I due parametri sono riconosciuti dal sistema già dal precedente comando “/sbin/lsusb” che ci ha restituito:

0421:043a

ma per essere sicuri di non sbagliare e confonderne uno con l’altro:

~#  lsusb -v | grep idVendor                                     
 idVendor           0x0000
 idVendor           0x0421 Nokia Mobile Phones
 idVendor           0x0000
 idVendor           0x0000
 idVendor           0x0000
 idVendor           0x0c45 Microdia
 idVendor           0x0000
~#  lsusb -v | grep idProduct                                    
 idProduct          0x0000
 idProduct          0x043a N70 USB Phone Parent
 idProduct          0x0000
 idProduct          0x0000
 idProduct          0x0000
 idProduct          0x602c Clas Ohlson TWC-30XOP WebCam
 idProduct          0x0000

Segnamo dove preferiamo i due parametri sottolineati in rosso. Trovati i due parametri dovremmo dire ad udev che una volta collegato il dispositivo non dovranno esserci problemi di permessi.

NB: in casi generali udev permetterà di vedere il dispositivo e quindi la transazione FTP solo all’utente root. Per evitare questo, e far in modo che il normale user posso effettuare le transazioni da pc a cellulare e viceversa aggiungeremo una regola ad udev nella directory /etc/udev/rules.d/ con il nostro editor preferito, essendo già da operazioni precedenti muniti dei parametri id”Vendor & Product” del cellulare come segue.

~# vi /etc/udev/rules.d/80-nokia.rules
ACTION!="add", GOTO="nokia_rules_end"
#SUBSYSTEM!="usb_device", GOTO="nokia_rules_end"

LABEL="nokia_rules_start"

ATTR{idVendor}=="0421", ATTR{idProduct}=="043a", OWNER="root", GROUP="users", MODE="0660"

LABEL="nokia_rules_end"

NB: in tutte le altre distribuzioni l’aggiunta della regola udev per identificare il dispositivo prevede come parametro GROUP=”“ l’appartenenza al gruppo dialout.  Date le differenze di presenza del gruppo in Slackware utilizzeremo semplicemente il gruppo users.

Nota da non sottovalutare: é buona norma essere certi che il proprio utente sia appartenente ai gruppi generici di sfruttamento di periferiche che in casi generali dovrebbero risultare come i seguenti:

~ $  id                                                                    
uid=1000(...) gid=100(users) gruppi=5(tty),7(lp),11(floppy),17(audio),18(video),19(cdrom),81(messagebus),82(haldaemon),83(plugdev),93(scanner),100(users)

In caso contrario provvederemo ad aggiungere il nostro utente ai gruppi citati sopra e a refreshare l’aggiunta dell’utente ai gruppi citati:

~# usermod -G floppy,audio,video,cdrom,haldaemon,plugdev,scanner,tty,uucp mio_utente
~# newgrp nostro_gruppo_di_appartenenza_utente            
esempio:
~# newgrp users

Una volta salvato il file con la regola udev e il gruppo users abilitato alle transazioni con obexftp provvederemo a staccare il cavetto usb e restartare udev.

~# /etc/rc.d/rc.udev restart

Restartato il demone udev, riattaccheremo il cavetto USB e verificheremo la connessione tra Slackware e il nostro amato Nokia da terminale  come segue:

~$  obex_test -u
Using USB transport, querying available interfaces
Interface 0: Nokia Nokia N70 SYNCML-SYNC
Interface 1: Nokia Nokia N70 PC Suite Services
Use 'obex_test -u interface_number' to run interactive OBEX test client

Verificato il riconoscimento da obex verificheremo se la transazione da utente via terminale è gi à disponibile:

~$  obexftp -u 1 -c C: -l
If USB doesn't work setup permissions in udev or run as superuser.
Connecting...done
Sending "C:"... done
Receiving "(null)"... <?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd"
 [ <!ATTLIST folder mem-type CDATA #IMPLIED>
 <!ATTLIST folder label CDATA #IMPLIED> ]>
<folder-listing version="1.0">
 <parent-folder />
 <folder name="cache" modified="20070821T120632Z" user-perm="RWD" mem-type="DEV"/>
 <folder name="Data" modified="20081118T024304Z" user-perm="RWD" mem-type="DEV"/>
 <folder name="Nokia" modified="20060101T020012Z" user-perm="RWD" mem-type="DEV"/>
 <folder name="Notepad" modified="20081113T010836Z" user-perm="RWD" mem-type="DEV"/>
 <file name="BlasterSettings" size="73" modified="20070919T140206Z" user-perm="RWD"/>
 <file name="CellTrack" size="47" modified="20070914T215856Z" user-perm="RWD"/>
 <file name="DSPROFILEEDITOR.EXE" size="3881" modified="20070822T095218Z" user-perm="RWD"/>
 <file name="MP" size="47" modified="20070920T222404Z" user-perm="RWD"/>
 <file name="PDPhotoLibCache.txt" size="16" modified="20090509T213150Z" user-perm="RWD"/>
 <file name="Photo Express M-Style" size="42" modified="20070904T160312Z" user-perm="RWD"/>
 <file name="PowerMP3" size="46" modified="20070902T191346Z" user-perm="RWD"/>
</folder-listing>done
Disconnecting...done

NB: la prima stringa If USB doesn’t work setup permissions in udev or run as superuser. è un messaggio di warning_,_ che normalmente deve restituire udev. Non pregiudica il funzionamento e il trasferimento dei file tra i dispositivi.

Finalmente vedremo il contenuto della memoria del nostro cellulare Nokia e da questo momento potremo effettuare via obexftp le transazioni come se stessimo usando un normale applicativo FTP.

Come da esempio seguente utilizzeremo:

-p (PUT) per l'upload
-g (GET) per il download
$ obexftp -u 1 -c 'E:/muvee' -p esempio.3gp
$ obexftp -u 1 -c 'C:/Nokia/Sounds/Digital' -g 'Sound.amr'

</pre>

Chiaramente può essere utile nel caso del trasferimento di una gran mole di file, utilizzare un interfaccia grafica che eviti di farci digitare perennemente e/o per 10 minuti di fila, sempre gli stessi comandi. Le possibilità al momento risultano essere due.

Utilizzare come da citazione ad inizio pagina Obextool (un interfaccia grafica di openobex in cui è nativo “ObexFTP” ) oppure utilizzare ObexFtp-Frontend ( in java).  Io personalmente li ho utilizzati entrambi e preferisco il secondo se pur in java e quindi un pizzico più pesante del primo che però a differenza di questo implementa funzionalità comode. Per parcondicio quindi, illustrerò entrambe le possibilità.

IMPLEMENTAZIONE DELL’INTERFACCIA GRAFICA AL COLLEGAMENTO “CEL - PC” TRAMITE OBEXFTP.

Frontend via ObexTool:

Scarichiamo Obextool.

Scaricato; lo scompatteremo dove preferiamo, supponiamo la dir : /home/mio_utente/obextool rinominata da noi e modificheremo tre direttive di percorso ed eseguibili predefinite come da esempio seguente. Quindi riassumendo:

~$ wget obextool
~$ tar zxvf obextool-0.35.tar.gz
~$ rm obextool-0.35.tar.gz
~$ mv obextool-0.35/ obextool
~$ cd obextool

Poi modficheremo i seguenti file come segue:

1)

~$ vi ~/obextool/etc/obexwrap.sh

sostituendo l’ultima riga presente

obexftp -b 00:1A:75:59:62:62 -B 7 "$@"

NB:  varia a seconda della versione di obextool in uso, ma la modifica è la stessa.

in:

obexftp -u 1 "$@"
2) 
~$ vi ~/obextool/etc/obextool.cfg

sostituendo il valore della stringa successiva se risulta essere ad 1 (riferita a telefonini Siemens) spostandola a ** (per cellulari Nokia):

NB: questa modifica è da fare nelle vecchie versioni di obextool, l’ultima disponibile non necessita di questa modifica essendo già sul valore 0.

set ObexConfig(config,memstatus) 1

in:

set ObexConfig(config,memstatus) 0

3) Obextool richiede Tablelist che andrà scompattato nella directory di obextool. Scaricato ed estratto tablelist andremo a modificare l’ultimo file in base alla versione scaricata di Tablelist dal sito ufficiale come da esempio:

~$ cd ~/obextool/
~$ wget Tablelist
~$ tar zxvf tablelist4.11.tar.gz
~$ ls
contrib/  doc/  etc/  images/  lang/  lib/  obextool.tk*  plugins/  tablelist4.11/
~$ rm tablelist4.11.tar.gz

Scaricate le tablelist nella directory obextool creeremo il file startup-obextool.sh definito in base al percorso di destinazione delle tablelist che abbiamo scaricato come da esempio:

~$ cd ~/obextool/
~$ vi startup-obextool.sh
#!/bin/sh
TCLLIBPATH=~/obextool/tablelist4.11/ wish ~/obextool/obextool.tk

Salviamo e gli diamo i permessi di esecuzione:

~$ su -
~# chmod +x startup-obextool.sh
~# exit

Effettuate le modifiche e creato il  file di start avviamo il Frontend Obextool.tk  presente in home:

~$ sh ~/obextool/startup-obextool.sh

**Frontend via Obexftp-Frontend in java.**

Il procedimento è nettamente più semplice del precedente, dato che il frontend è in formato **binario** e quindi è sufficiente scaricarlo ed avviarlo:

~$ wget Obexftp-Frontend
~$ unzip obexftp-frontend-0.6.6-bin.zip
~$ cd obexftp-frontend-0.6.6-bin
~$ sh obexftp-frontend
Avviato il Frontend bisognerà modificare alcuni semplici parametri nella sezione in alto
F12 Options => Configuration
e modificare:
ObexFTP path inserendo il percorso =>  /usr/bin/obexftp
Connection type => selezionare USB
Connection line => 1
**NB**: Per un corretto funzionamento bisogna spuntare l'opzione **"Device info fetching"** disattivando l'opzione nel caso di connessione **USB**. \# End