sábado, 12 de abril de 2014

Conectado o seu celular pelo cabo de dados usb no Linux

A transferência de arquivos entre o celular e o computador é bem mais rápida pelo cabo usb, do que pelo Bluetooth principalmente se você vai transferir muitos arquivos mp3 para o celular.

Neste artigo foi utilizado um celular simples da marca Nokia modelo C2-01, que é um celular com suporte a vídeos no formato mp4 e bastante prático de usar.

Foi comprado um cabo genérico baratinho feito para o celular Motorola V8, mas que funciona 100% perfeitamente, já que possuir a  mesma conexão de encaixe.




Num celular da marca Nokia, sob o acesso usando o Linux

Ao conectar o celular pelo cabo de dados na porta usb, existem 3 opções:


  1. Pc Suite
  2. Impressão e mídia
  3. Armazenamento de dados



Pc Suite

Escolha esta opção para navegar no celular usando o obexftp já que não existe um software Pc Suite para Linux, para enviar e receber arquivos e listar o mesmo em modo texto acessando os arquivos da memória interna e do cartão removível do celular.
No Linux ao usar a opção Pc Suite você somente pode usar o obexftp ou uma gui gráfica do mesmo para navegar pelo celular, não tem como montar o cartão removível do celular ou a memória interna para um acesso melhor neste ao escolher Pc Suite. Um detalhe é que você não terá acessos a lista de contatos e a agenda, somente os arquivos da memória interna e do cartão de memória ao usar o obexftp no Linux. Escolha esta opção também para usar o celular como modem caso o mesmo suporte. Você também pode usar o obexfs para acessar os arquivos da memória interna e externa, mas o acesso será somente como root também.


Impressão e mídia

Não funciona o acesso pelo obexftp e nem a montagem automática do cartão de memória externo e o acesso à memória interna.


Armazenamento de dados

Ao escolher esta opção no celular, automaticamente será montado o cartão de memória removível nas distros recentes no Linux, podendo assim você transferir arquivos entre o celular e o computador e vice-versa usando apenas copiar e colar no seu gerenciador de arquivos gráfico (automaticamente para ambientes kde, gnome, xfce4).
Neste modo não funciona transferência de arquivos pelo obexftp, sendo também que o mesmo nem detecta o celular neste modo.

Notas:
Caso a montagem automática falha por algum motivo, ou você usar um gestor de janelas simples que não utiliza os recursos do udev, ou você está fora do ambiente X, você poderá montar manualmente o cartão de memória externo, deste que o celular e o dispositivo do cartão de memória foram reconhecidos pelo sistema.

Basta analisar quase no final das linhas do comando dmesg assim que você escolheu a opção Armazenamento de dados qual é o dispositivo do celular.

Exemplo parcial da saída do comando dmesg:


scsi 6:0:0:0: Direct-Access Nokia Nokia C2-01 0000 PQ: 0 ANSI: 4
sd 6:0:0:0: Attached scsi generic sg3 type 0
sd 6:0:0:0: [sdb] Adjusting the sector count from its reported value: 7837697
sd 6:0:0:0: [sdb] 7837696 512-byte logical blocks: (4.01 GB/3.73 GiB)
sd 6:0:0:0: [sdb] Write Protect is off
sd 6:0:0:0: [sdb] Mode Sense: 04 00 00 00
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sd 6:0:0:0: [sdb] Adjusting the sector count from its reported value: 7837697
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sdb: sdb1
sd 6:0:0:0: [sdb] Adjusting the sector count from its reported value: 7837697
sd 6:0:0:0: [sdb] Assuming drive cache: write through
sd 6:0:0:0: [sdb] Attached SCSI removable disk

O celular detectado é o Nokia C2-01 e o dispositivo do cartão de memória externo é o sdb1.

Montando o cartão de memória externo manualmente:
# mount /dev/sdb1 /mnt/nokia ou mount /dev/sdb1 /mnt/nokia -t vfat


Como montar a memória interna do celular ?

Se o seu celular não tem entrada para cartão microSD ou se tem pra o mesmo e este está sem cartão externo, faça o procedimento abaixo:

Escolha: Pc suite no celular
Carregue o módulo fuse caso o mesmo não foi iniciado sozinho: modprobe fuse
Vamos ver as interfaces disponíveis: obexftp -u
Criando um ponto de montagem: mkdir nokia
Montando a memória interna do celular: obexfs -u 0 nokia

Agora você pode acessar o ponto de montagem nokia usando o seu gerenciador de arquivos preferidos mas o acesso ao ponto de montagem somente funciona como root, não funciona como user, e não adianta mudar permissões do ponto de montagem que você não conseguira acessar como user.
Pode copiar e colar arquivos entre o celular e o computador com um navegador gráfico deste que você inicie o mesmo em uma janela de terminal logrado como root.

Notas:
O ponto de montagem não aparecem com o comando df pois se trata de um filesystem virtual, somente aparecerá usando o comando mount.
Para desmontar: umount /home/nando/nokia

# mount
/dev/sda6 on / type reiserfs (rw,notail)
proc on /proc type proc (rw,noexec,nosuid,nodev)
none on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
none on /dev type devtmpfs (rw,mode=0755)
none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
none on /dev/shm type tmpfs (rw,nosuid,nodev)
none on /var/run type tmpfs (rw,nosuid,mode=0755)
none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)
none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)
/dev/sda1 on /mnt/outros type ext4 (rw,commit=0)
gvfs-fuse-daemon on /home/nando/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=nando)
gvfs-fuse-daemon on /root/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev)
/dev/sda4 on /media/4ad7953b-de2a-4f5b-8d78-3cbf6c2c07a3 type ext4 (rw,nosuid,nodev,uhelper=udisks)
obexfs on /home/nando/nokia type fuse.obexfs (rw,nosuid,nodev)

Ao fazer a montagem da memória interna com o obexfs, você também tem acesso normal ao cartão de memória externa caso exista no celular, basta entrar na pasta que dá acesso ao mesmo que no caso do meu celular é NO NAME.


Transferência de arquivos com obextool


O obextool é uma gui gráfica para obexftp.

Instale o obextool que é uma gui gráfica em tk para o comando obexftp.
Dependências são os pacotes: bwidget, tk8.4, tcl8.4, tcllib e tklib

No obextool:

Escolha Download para baixar o arquivo para o computador.
Escolha Upload pra enviar um arquivo do computador para o celular (o upload será salvo na pasta que estiver sendo listada no celular).

Como executar o obextool ?

$ sudo obextool --obexcmd "obexftp -u 0" (após o -u é zero)

Tela do obextool




Como abrir arquivos pelo obextool ?

O obextool permite abrir arquivos de fotos, mp3, mid etc para você, basta criar a associação para os programas que você usa editando o arquivo /etc/obextool/obextool.ext, ele já vem configurado com os programas para abrir determinado arquivo, mas dependendo do seu sistema os programas configurados podem não está instalado, então basta trocar o programa usado por outro.

Exemplos da linha original para abrir arquivos de imagens

### external graphic viewer programs
###
set ObexConfig(view,bmp) "xzgv"
set ObexConfig(view,bmx) "xzgw"
set ObexConfig(view,png) "kview"
set ObexConfig(view,jpg) "kview"

Se você não tem o xzgv e o kview mude todos por exemplo para gqview ou outro programa de sua preferência para abrir arquivos de fotos dentro do obextool.

Para abrir o arquivo selecione com o mouse usando o botão direito e escolha a opção View file.

Usando o celular como modem

Você pode utilizar o seu celular pelo cabo usb e usar o mesmo como modem deste que o mesmo tenha esta função, podendo usar o computador para navegar na internet caso você não tenha banda larga ou internet discada.

Para funcionar é preciso de um kernel compilado com suporte a dispositivos ACM, sendo que todos os kernel recente já vem compilado com dispositivo ACM.

Ao conectar o cabo usb no computador, no celular escolha a opção Pc Suite para poder usar o mesmo como modem.

Agora vamos descobrir qual é o device do modem
# dmesg | grep ACM
cdc_acm 3-1:1.4: ttyACM0: USB ACM device

Onde ttyACM0 é o dispositivo do seu modem usb pelo celular.

Nota:
O cdc_acm é um modulo que foi carregado automaticamente ao inserir o cabo usb.
Para listar os módulos carregados use o comando lsmod.

Agora devemos ter o discador em modo texto wvdial instalado e configura o arquivo /etc/wvdial.conf com as linhas abaixo, mas você pode utilizar outro discador da sua preferência.

[Dialer cabo]
Modem = /dev/ttyACM0 #dispositivo do modem do celular
Baud = 460800 # valor pode ser diferente
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem
Username = claro # user da sua operadora
Password = claro # senha da sua operadora
Phone = *99***1# # telefone da sua operadora
Stupid Mode = 1


Note que a configuração de Baud no arquivo /etc/wvdial.conf é específica para cada aparelho. Uns aceitam valores maiores, outros podem apresentar instabilidades e neste caso, este valor deverá ser reduzido para outros valores (57600, por exemplo).
Baud valores: 115200, 460800, 57600, 28800

Notas:
Em alguns modelos pode ser necessário colocar também a linha Init3.
Exemplo da linha: Init3 = AT+CGDCONT=1,"IP","claro.com.br" no arquivo wvdial.conf, para funcionar o acesso à internet.
Onde "claro.com.br" e o endereço da sua operadora. Onde o Init3 é indicado para conexão pelo cabo usb.

Agora basta discar para acessar a internet

# wvdial cabo
--> WvDial: Internet dialer version 1.61
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Modem initialized.
--> Sending: ATDT*99***1#
--> Waiting for carrier.
ATDT*99***1#
CONNECT
~[7f]}#@!}!} } }2}#}$@#}!}$}%\}"}&} }*} } g}%~
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Fri Jun 22 17:33:12 2012
--> Pid of pppd: 22496
--> Using interface ppp0
--> pppd: ��[06][08]p�[06][08]
--> pppd: ��[06][08]p�[06][08]
--> pppd: ��[06][08]p�[06][08]
--> pppd: ��[06][08]p�[06][08]
--> local IP address 10.43.164.15
--> pppd: ��[06][08]p�[06][08]
--> remote IP address 10.6.6.3
--> pppd: ��[06][08]p�[06][08]
--> primary DNS address 200.169.117.222
--> pppd: ��[06][08]p�[06][08]
--> secondary DNS address 200.169.117.221
--> pppd: ��[06][08]p�[06][08]

O computador já está conectado a internet, mas os DNS não foram colocados automaticamente no arquivo /etc/resolv.conf sem eles você não poderá navegar pela internet digitando nomes de sites.
Você pode colocar os DNS que aparecem na saída do comando wvdial ou usar outro como o do OpenDNS para navegar na internet.
Linhas:
primary DNS address 200.169.117.222
secondary DNS address 200.169.117.221


Colocando o DNS do OpenDNS no arquivo /etc/resolv.conf
nameserver 208.67.222.222
nameserver 208.67.220.220

Agora basta pingar o site www.terra.com.br pra testar.


# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:55 errors:0 dropped:0 overruns:0 frame:0
TX packets:55 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5070 (4.9 KiB) TX bytes:5070 (4.9 KiB)

pan1 Link encap:Ethernet HWaddr 0a:a7:c6:20:61:4d
inet addr:10.77.178.1 Bcast:10.77.178.255 Mask:255.255.255.0
inet6 addr: fe80::8a7:c6ff:fe20:614d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:171 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:27282 (26.6 KiB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:10.43.164.15 P-t-P:10.6.3. Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:2545 (2.4 KiB) TX bytes:2617 (2.5 KiB)



Onde pan1 é a sua interface de rede local gerada pelo ppp0 e ppp0 é da conexão discada.

Em /dev
# ls -l ttyACM*
crw-rw---- 1 root dialout 166, 0 Jun 22 17:33 ttyACM0

Em /dev não existe o link modem mas o acesso à internet funcionou sem o mesmo.

Notas:

Pra enviar o comando wvdial cabo para o segundo plano liberando o prompt desta janela
execute desta forma: wvdial claro & tecle Enter e depois ctrl+c pra enviar por segundo plano.

Para desconectar:
# killall pppd (ao fazer isto o ícone de acesso à internet desaparece no visor do celular).
Tecle ctrl+c na janela que foi executado o wvdial, caso o mesmo não foi enviado por segundo plano ou caso foi enviado por segundo plano use killall wvdial.
Somente fazendo isto é que desaparece o ícone de acesso à Internet do seu celular.

Em alguns casos dependendo da configuração feito feita ou do discador usado pode ser necessário criar o link modem em /dev para o dispositivo /dev/ttyACM0 do celular.

# ln -s ttyACM0 modem

Em alguns casos pode ser necessário passar o vendor e o product do seu celular, para poder funcionar como modem, mas não foi necessário este procedimento no meu computador e o acesso à internet funcionou mesmo não tendo o modulo usbserial carregado, sendo este procedimento manual necessário apenas em distros mais antigas.

Identificando o vendor e product do seu celular

# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0421:054e Nokia Mobile Phones
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Carregando o módulo usbserial com o vendor e product do seu celular.
# /sbin/modprobe usbserial vendor=0421 product=054e


Procedimentos testados no Slackware 13.1, Xubuntu 10.10 e 12.10.








Nenhum comentário:

Postar um comentário