AlienMindSite

lunes, enero 05, 2009

Renovando... iPhone 3G usable en Linux (con iTunes + VBox)



Después de casi 2 años de inactividad, renovo el blog con la experiencia de las navidades... Conseguir que el iPhone 3G sea "usable" en Linux.



Primero de todo: Jailbreak del teléfono. Pistas aquí: www.quickpwn.com

No es extrictamente necesario pero sí muy útil. Esto te permite entre otras cosas que tu móvil sea accesible por SSH/SFTP, y el fantástico Cydia (un synaptic + apt-get para iPhone).

Segundo de todo: iPhone 3G sólo sincroniza con iTunes. NO HAGAS CASO A LO QUE LEAS POR AHÍ SÓLO SINCRONIZA CON ITUNES. En el momento de escribir, a pesar de la información confusa al respecto, ni Amarok, ni GTKPod, ni Banshee, ni Songbird, NADA. De hecho, aquellos que sigáis ciertas recetas para sincronizarlo por SSH con Amarok os encontraréis con la desagradable sorpresa de que se corrompe el iTunes.db por soportar una versión anterior. Esto implica que se jodan las apps instaladas y que te toque reflashear. ¡¡¡NO LO HAGAS!!!

Una opción: Usar pwnplayer (disponible en Cydia) que es capaz de acceder a los archivos directamente que hayas dejado en el movil por SSH. El player es un poco malo y menos vistoso que el iPod.app que trae el iPhone de serie. Y además no permite ver películas :-(

Opción interesante pero de momento no realizable: Usar directamente iTunes (con wine) para acceder al cacharro y sincronizar. iTunes 7.x funciona pero no sabe hablarse con un iPhone 3G. Y por el momento los esfuerzos para utilizar iTunes 8 desde Wine no son fructíferos aunque se está avanzando como se puede leer aquí.

La única opción: Usar iTunes en VirtualBox conectado direcamente por USB 2.0 a nuestro iPhone. Es un poco incómodo pero funciona. Los detalles están aquí, pero se resumen en:
- Añade al sources.list la línea:
deb http://download.virtualbox.org/virtualbox/debian hardy non-free
- sudo apt-get upgrade && sudo apt-get install virtualbox-2.1 # esto eliminará virtualbox-ose
- Prepara tu Windows XP original e instálalo sobre una nueva VM
- Añade al /etc/fstab la línea:
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0
- Prepara este script (iphone-kernel.sh) y ponlo en /usr/local/bin (por ejemplo):

#! /bin/bash
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root, try: sudo iphone_usb.sh" 1>&2
exit 1
fi

KERNEL=`uname -r | awk '{ split($0, values, "-"); printf("%s", values[1]); }'`
sudo apt-get -y build-dep linux-source-$KERNEL
sudo apt-get -y install linux-source-$KERNEL build-essential
tar -jxvf /usr/src/linux-source-$KERNEL.tar.bz2
cd linux-source-$KERNEL/drivers/usb/core
perl -pi.bak -e 's/16384/131072/' devio.c
make -C /lib/modules/`uname -r`/build/ M=`pwd` modules
strip --strip-debug usbcore.ko
sudo install -m644 -b usbcore.ko /lib/modules/`uname -r`/kernel/drivers/usb/core
sudo depmod -ae
sudo update-initramfs -u

- Ejecútalo (esta primera vez y cada vez que te venga una actualización del kernel!!):
sudo chmod a+x /usr/local/bin/iphone-kernel.sh ; /usr/local/bin/iphone-kernel.sh
- Reinicia...

Una vez realizados los pasos anteriores, nos encontraremos con que el iPhone será primero detectado por el Linux como cámara fotográfica. Habrá que desmontarlo. Luego decirle a la máquina virtual que desmonte/monte el dispositivo por USB 2.0 (icono de USB's). Y con el iTunes arrancado, pasado un minuto aproximadamente veremos el dispositivo y podremos sincronizar.

Pero este artículo va un poco más allá. El problema de esta configuración es que iTunes (si se marca la opción de reorganizar la colección y mover archivos, algo útil cuando eres un desastre como yo) va a "secuestrar" tu música. Y además, que es un coñazo abrir el vbox para reproducirla (vamos a intentar que esto sólo sea necesario para sincronizar).

Para solventarlo, la opción va a ser llevarse todos los ficheros de datos a una carpeta en el Linux compartida a través de VBox. Si esta carpeta fuese o apuntase de alguna manera a "$HOME/Música" podríamos aprovechar para usar Rhythmbox para la reproducción de esa colección (este programa tiene la característica de poder "vigilar" un directorio... si se añaden archivos nuevos, cosa que pretendemos que haga iTunes, los autoincorporará al catálogo ;-) ).

Es decir, el esquema final que pretendemos es:
- iTunes (VBox) para organizar la colección, importar carpetas y sincronizar con el iPhone.
- Rhythmox para reproducir la colección sin alterarla.

Los pasos necesarios son:

- Compartir en VirtualBox una carpeta donde almacenaremos la colección (e iTunesDB, ficheros XML, etc...). Esta carpeta será $HOME/Documentos (que ya debería existir) y la compartiremos como "documentos".

- Acceder a esta carpeta a través de \\vboxsvr\documentos desde el Windows. Si no se encuentra vboxsvr, no te preocupes, está ahí. Sólo hay que buscarlo en el Entorno de Red -> Toda la red -> VirtualBox. Montamos esta carpeta en la unidad M:.

- Problema: podríamos darle esta ruta (previamente montada como letra de unidad) al iTunes para que almacene ahí su colección (Edicion -> Preferencias -> Avanzado). PEEERO no lo vamos a hacer. Si lo hicieramos así, al añadir una nueva carpeta a la biblioteca el iTunes se va a encontrar con "ocasionales" problemas de velocidad de la carpeta. Al más mínimo fallo (aunque sea una inapreciable pérdida de velocidad), decidirá llevarse las canciones importadas a la carpeta por defecto, que es: Mis documentos\Mi música\iTunes-\iTunes Music.

Así que siguiente reto: conseguir que "Mis documentos" (local), y por extensión, la carpeta "iTunes Music" se corresponda con la carpeta remota de nuestra elección, concretamente "\\vboxsvr\documentos\Mi música" que hemos compartido previamente.

Todo esto se podría hacer muuy fácil si:
- Windows permitiese montar unidades de red en cualquier punto de montaje
- Windows permitiese enlaces simbólicos entre volúmenes

Pero desgraciadamente no es capaz de nada de esto... Tras mucho investigar) resulta que el cachondo del Windows TIENE enlaces, pero sólo dentro del mismo volúmen (NTFS) o bien si estos enlaces son de una unidad a una carpeta remota (Z: => \\vboxsvr\blabla). Ninguna de las dos soluciones nos vale...

No obstante, resulta que "Mis documentos" es un tipo especial de enlace simbólico cuya ubicación física se almacena en el registro de Windows. Concretamente en: "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal". Esta clave apunta por defecto a "%USERPROFILE%\Mis documentos"

Abrimos el editor de registro (regedit.exe), buscamos esta clave y cambiamos el valor por: M: (conviene sacar una copia previa del valor anterior, como "Personal.orig" o algo así).

- Cortamos y pegamos todo el contenido actual de "Mis documentos" en la unidad M:. Esto incluye la carpeta "Mi música/iTunes" entre otros...

- Cerramos la sesión y volvemos a entrar. Comprobamos que "Mis documentos" no se ha perdido y se corresponde con la unidad remota...

- Y por último (paso sólo es necesario si queremos reproducir con Rhythmbox) : alteramos en el Linux la ubicación de la carpeta $HOME/Música (ruta por defecto de Rhythmbox) como un enlace simbólico a Documentos/Mi música (creado en el paso anterior).

- Ahora abrimos en el VirtualBox el iTunes y comenzamos a importar tranquilamente nuestras carpetas con MP3...

En próximos artículos: qué hacer si quieres mover toda la colección iTunes de una ruta a otra (por si la cagaste en pasos anteriores...) ;-)

Etiquetas: , , , , ,

domingo, mayo 20, 2007

Los problemas de Ubuntu Feisty

Hace varios días que he actualizado a Ubuntu Feisty. Parece que en esta ocasión el cambio desde Edgy ha traído más dolores de cabeza que soluciones. Estos son los problemas que me he encontrado en dos de los ordenadores que he actualizado... desde drivers rotos en el kernel 2.6.20 (el de mi controladora ethernet nada más y nada menos, pasando por el scanner, etc...) a incompatibilidades de VMWare o Beryl ... aunque técnicamente no formen parte de la distribución.

- El driver e1000.ko (Gigabit Ethernet de Intel, del Thinkpad T60) incluido en la distribución está roto. En este caso la solución pasa por bajarse el original de la página de Intel, hacer un sudo make install y listo

- Problemas diversos con el Suspend/Resume de ACPI. A la vuelta, la pantalla está en negro... (me suena que esto ya lo solucioné con Edgy). En ThinkWiki dicen como arreglarlo aunque a mi no me funcionó :-(

- En el kernel han incluido una opción inestable USB_SUSPEND que fastidia numerosos dispositivos USB. El bug es el #85488, y trae de cabeza a mucha gente. Los principales afectados son los scanners (como el mío, Benq S2W 3300U... sobre este de momento no hay solución aunque algunos "workarrounds" tales como usar scanbuttond para abrir el puerto USB y hacer polling sobre él para que no se cierre... pero a mí al menos no me funciona siempre (https://bugs.launchpad.net/ubuntu/+source/sane-backends/+bug/85488/comments/150).

- Otra "cagadilla". El adaptador PCMCIA que vengo usando para leer las tarjetas SD, MMC, etc... (perfectamente soportado por Edgy) ha dejado de funcionar. Tengo que investigar más, pero parece ser que aunque la detecta luego es incapaz de montarla. Reporta el siguiente error en el /var/log/messages

May 20 10:40:23 tanatos kernel: [37405.112000] pccard: PCMCIA card inserted into slot 0
May 20 10:40:23 tanatos kernel: [37405.112000] cs: memory probe 0xe4300000-0xe7ffffff: excluding 0xe4300000-0xe46cffff 0xe4e70000-0xe523ffff 0xe5db0000-0xe617ffff 0xe6cf0000-0xe70bffff
May 20 10:40:23 tanatos kernel: [37405.124000] pcmcia: registering new device pcmcia0.0
May 20 10:40:24 tanatos kernel: [37406.240000] ata7: PATA max PIO0 cmd 0x0001a100 ctl 0x0001a10e bmdma 0x00000000 irq 3
May 20 10:40:24 tanatos kernel: [37406.240000] scsi6 : pata_pcmcia
May 20 10:40:46 tanatos kernel: [37428.908000] rtc: lost some interrupts at 2048Hz.
May 20 10:40:46 tanatos kernel: [37428.908000] rtc: lost some interrupts at 2048Hz.
May 20 10:40:54 tanatos kernel: [37436.428000] ATA: abnormal status 0x96 on port 0x0001a107
May 20 10:40:54 tanatos kernel: [37436.428000] rtc: lost some interrupts at 2048Hz.
May 20 10:40:54 tanatos kernel: [37436.440000] ATA: abnormal status 0x96 on port 0x0001a107
May 20 10:41:24 tanatos kernel: [37466.448000] ata7.00: qc timeout (cmd 0x91)
May 20 10:41:24 tanatos kernel: [37466.448000] ata7.00: failed to IDENTIFY (INIT_DEV_PARAMS failed, err_mask=0x4)


- El VMWare Server no consigue compilarse sus módulos. Como siempre, basta con bajar el vmware-any-any-update109.tar.gz y compilar:

wget http://jaws.go2linux.org/archivos/vmware-any-any-update109.tar.gz
./runme.pl

El problema es que, con esta versión no se puede hacer "bridging" al dispositivo wireless, tal y como se avisa en dmesg (muy intuitivo, sí señor):

[35661.424000] vmnet: You are trying to use wireless bridged networking together with
[35661.424000] vmnet: vmware-any-any-update. This is not supported configuration, and
[35661.424000] vmnet: your wireless bridge will probably not work.


Tampoco sobre esto hay solución... de momento...

- Y ya por último... el Beryl. Se supone que en la distro ahora vendría algo para simplificarnos la vida con este tema, pero no. Han incluido Compiz, que ya es bastante obsoleto. De modo que si tienes beryl + ati + xgl (como era mi caso...) toca hacer una "ñampa". Básicamente, es seguir los mismos pasos de configuración que en Edgy pero haciendo un "downgrade" de beryl-core a la v0.2.0... esto es porque se han "olvidado" de incluir en versiones superiores el binario de beryl-xgl... casi na... En detalle, bastaría con seguir las instrucciones de beryl project

Actualización: El fallo del VMWare es en realidad una "feature", como puede leerse aquí:

Wireless LAN cards are a problem in a Bridged setup and do not work. Previous versions of Workstation caused some confusion by attempting to use wireless (802.11b) Ethernet cards for bridged networking, but would not work, becoming a tech support nightmare. Workstation 3.0 now correctly detects a wireless Ethernet network card and blocks it from being configured for bridged networking. The reason for this is because of a security specification in the IEEE Ethernet 802.11 protocol that says a wireless adapter cannot send packets that have a different MAC address than its own. In bridged mode, the packets are created in the VM, and sent through the switch to the physical network card. Since a virtual machine has its own MAC address for each virtual NIC, the wireless adapter will not send packets other than those generated on the physical wireless card. However, the workaround for using a wireless network card is to use NAT mode.

Pues estamos apañados.

Etiquetas: , , , , , , ,

miércoles, mayo 02, 2007

MPAA is hosting the key


Now MPAA can't censore this number without censoring themselves...
MPAA Gift

Etiquetas: , , , , , ,

viernes, abril 27, 2007

Apaga el movil en el cine

Etiquetas: , ,

lunes, abril 23, 2007

Fry reclama una PS3 nueva para su dueño

Etiquetas: , , , ,

domingo, marzo 18, 2007

Al fondo a la derecha


Al fondo a la derecha
Originally uploaded by ^AlienMind$.
Cartel encontrado en el WC de un bar cualquiera en Colmenar Viejo...
Especialmente importante la advertencia de los MOCOS....

Etiquetas:

domingo, febrero 18, 2007

Conexión UMTS / GPRS con adaptador Sierra Wireless

¡Por fin! He conseguido configurar la conexión WAN interna del Thinkpad T60

Lo primero de todo: los "cachondos" de IBM venden el portátil con la tarjeta bloqueada a Vodafone. Se puede liberar (para usar con Movistar, por ejemplo) con un par de llamadas de teléfono en los que se les proporcione el IMEI y algún dato más... ellos devuelven un código de desbloqueo.

Vayamos por pasos. Este procedimiento ha sido probado en Ubuntu Edgy:

NOTA: Aquí se cuenta todo paso por paso y "a bajo nivel". Al final, se puede utilizar un script que es bastante más cómodo y conveniente

Detectar y liberar el dispositivo

  1. Comprobar que tenemos detectado el dispositivo (lo debería haber detectado "de serie"):
    lsusb | grep -i sierra
    Bus 002 Device 003: ID 1199:6804 Sierra Wireless, Inc.
  2. Nos quedamos con los dos numeritos, y ejecutamos:
    sudo modprobe usbserial vendor=0x1199 product=0x6804
  3. Creamos los devices:
    mknod /dev/ttyUSB0 c 188 0 > /dev/null 2>&1
    mknod /dev/ttyUSB1 c 188 1 > /dev/null 2>&1
    mknod /dev/ttyUSB2 c 188 2 > /dev/null 2>&1
  4. Con el dispositivo ttyUSB0 nos comunicaremos mediante los comandos AT soportados por la tarjeta. Uno rápido podría ser el siguiente, que ya de paso nos da el código IMEI del dispositivo (necesario para el desbloqueo):
    cat /dev/ttyUSB0 &
    echo "AT+GSN" > /dev/ttyUSB0
  5. Obtenemos un número similar al siguiente:
    123456789012345
    OK
  6. Con este dato, llamamos al soporte de IBM y nos devuelven un código de 8 dígitos. Ejecutamos:
    echo 'AT+CLCK="PN",0,"12345678"' > /dev/ttyUSB0
  7. En el paso anterior, aunque devuelva algún tipo de error, realmente se debloquea el modem...

Introducir el PIN

  1. La primera vez que se accede al dispositivo hay que introducir el PIN. No hacerlo puede suponer que ningún comando funcione, o incluso que se bloquee la tarjeta (teniendo que meter el PUK...) Para meter el PIN habrá que, primero, averiguar en qué estado está la tarjeta (esperando PIN o no):
    echo 'AT+CPIN?' > /dev/ttyUSB0
  2. Si aún no hemos introducido el pin, aparecerá algo del tipo:
    +CPIN: SIM PIN
    OK
  3. Para ponerlo, ejecutar:
    echo 'AT+CPIN=1234'
    > /dev/ttyUSB0

  4. Ahora veremos:
    +CPIN: READY
    OK
Establecer parámetros de red
  1. Lo primero de todo, deberíamos ver si tenemos cobertura de red. Con el comando:
    echo 'AT+CSQ' > /dev/ttyUSB0
  2. Obtenemos dos números separados por comas. Valores por encima de 10,x se considerarán adecuados:
    +CSQ: 11,99
    OK
  3. Establecemos el modo conexión a UMTS preferido (si no, se asumiría GPRS). Si falla UMTS, probará a pesar de todo por GPRS....
    echo 'AT!SELRAT=03' > /dev/ttyUSB0
  4. Seleccionamos la red:
    echo 'AT+CREG=1' > /dev/ttyUSB0
    echo 'AT+CGDCONT=1,"IP","movistar.es"' > /dev/ttyUSB0
    echo 'AT+COPS=0,0,"movistar",2' > /dev/ttyUSB0
¡Conectar!

Si hemos llegado hasta aquí, podemos conectar simplemente marcando el *99# (usuario MOVISTAR, password MOVISTAR) .... hay algunos números adicionales a introducir detrás de este número... que aún desconozco lo que significan...

No tiene sentido escribir el comando ATDT*99# de marcado "a mano" ... a partir de este punto se ven implicados otros comandos (pppd, chat, etc...) que acaban consiguiendo que se nos cree la interfaz de red ppp0, conectada a internet. Por tanto, iremos al siguiente paso en el que automatizamos esta tarea.

Automatizar la conexión

El comando wvdial (de línea de comandos) nos puede ayudar a crear la conexión, o al menos a automatizar los primeros pasos (de inicialización). Para la parte del marcado, me parece más conveniente usar GNOME PPP o similar, ya que se integra muy bien con el escritorio y es cómodo...

Por tanto, instalaremos:
  1. sudo apt-get install wvdial gnome-ppp
  2. Copiar el siguiente script de conexión en /etc/wvdial.conf:

    # wvdial para Movistar 3G / HSDPA
    [Dialer Defaults]
    Modem = /dev/ttyUSB0
    Stupid Mode = 1
    Dial Command = ATDT
    Baud = 460800
    ISDN = 0
    Modem Type = Analog Modem
    Check Def Route = off

    [Dialer pin]
    Init1 = AT+CPIN=1234

    [Dialer movistar]
    Init2 = AT!SELRAT=03
    #Init5 = AT+COPS=0,0,"movistar",0
    Init5 = AT+COPS=0,0,"movistar",2
    Init6 = AT+CGDCONT=1,"IP","movistar.es"

    [Dialer connect]
    Phone = *99***1#
    Username = MOVISTAR
    Password = MOVISTAR

  3. Este script (llamémosle sierra-init.sh) en combinación con wvdial, se puede utilizar para preconfigurar el modem durante el inicio del sistema (por ejemplo, invocándolo en /etc/rc.local)


    #!/bin/sh
    if [ "$1" = "-reset" ]; then
    RESET=1
    fi
    if [ "$1" = "-pin" ]; then
    PIN=1
    fi
    ####### Iniciar
    MODEM=`lsusb | grep -i sierra`
    if [ "$MODEM" = "" ]; then
    echo "No se ha detectado Sierra Wireless. Saliendo.."
    exit 1
    fi
    echo $MODEM
    # Limpieza
    rmmod usbserial > /dev/null 2>&1
    # Cargar / Crear dispositivos
    modprobe usbserial vendor=0x1199 product=0x6804
    mknod /dev/ttyUSB0 c 188 0 > /dev/null 2>&1
    mknod /dev/ttyUSB1 c 188 1 > /dev/null 2>&1
    mknod /dev/ttyUSB2 c 188 2 > /dev/null 2>&1
    if [ "$RESET" = "1" ]; then
    exit 0
    fi
    # Inicializar el pin
    if [ "$PIN" = "1" ]; then
    wvdial pin
    exit 0
    fi


    De este modo, para inicializar (primera vez tras el arranque), habría que ejecutar:
    sierra-init.sh -reset
    sierra-init.sh -pin

  4. Para crear la conexión, creamos una entrada con gnome-ppp con las siguientes características:





  5. Pulsamos en conectar y ..... ¡listo!
FIXME: No conecta a alta velocidad (1.8MBPS), tan sólo a 384 kbps como mucho... parece ser que se trata de una limitación del firmware que distribuye Linux. ¿Se podrá probar con el firmware descargado de Sierra Wireless?

Casi toda la información la he conseguido en:

Etiquetas: , , , , ,