Ubuntu en Android: Diferència entre les revisions

De GiLUG
Dreceres ràpides: navegació, cerca
(Primera parte)
 
Línia 34: Línia 34:
  
 
:'''ADB por red'''
 
:'''ADB por red'''
Moltes connexions per USB són poc estables (es tallen molt sovint i te n'adones que escrius al teu ordinador), i en aquests casos es resol per xarxa (wifi). Quan es fa això és important que l'aparell no tingui connexió directa a internet (per exemple amb l'operador telefònic) i es tracti d'una comunicació pel Wifi local.
+
Muchas conexiones por USB son poco estables (se cortan muy a menudo y te das cuenta de que escribes en tu ordenador), y en estos casos se resuelve por red (wifi). Cuando se hace esto es importante que el aparato no tenga conesión directa a internet (por ejemplo con el operador telefónico) y se trate de una comunicación por el Wifi local.
* Des d'Android, per veure els dispositius de xarxa que té activats (default... dev -->):
+
* Desde Android, para ver los dispositivos de red que tiene activados (default... dev -->):
 
  ip route list
 
  ip route list
* Des d'Android, per veure l'adreça IP d'un dispositiu de xarxa (per exemple '''wlan0'''):
+
* Desde Android, para ver la dirección IP de un dispositivo de red (por ejemplo '''wlan0'''):
 
  ifconfig wlan0
 
  ifconfig wlan0
* Per establir des de l'ordinador que la comunicació serà via xarxa (per exemple a la IP 192.168.1.122):
+
* Para establecer desde el ordenador que la comunicación será via red (por ejemplo a la IP 192.168.1.122):
 
  adb connect 192.168.1.122
 
  adb connect 192.168.1.122
* Per obrir una sessió de terminal a l'aparell:
+
* Para abrir una sesión de terminal en el aparato:
 
  adb shell
 
  adb shell
* Per iniciar una sessió com a superusuari (root), i tenir permisos d'administració d'Android:
+
* Para iniciar una sesión como superusuario (root) y tener permisos de administración de Android:
 
  su
 
  su
* Per finalitzar com a superusuari i també tancar la sessió de terminal:
+
* Para finalizar como superusuario y tambien cerrar la sesión de terminal:
 
  exit
 
  exit
 
  exit
 
  exit
  
:'''Notes addicionals'''
+
:'''Notas adicionales'''
* En aquesta guia, on s'indiquen instruccions escrites són per executar en una finestra de terminal local o remot.
+
* En esta guia, en donde se indican instrucciones escritas es para ejecutar en una ventana de terminal local o remoto.
* Si teniu missatges de tipus «Operation not permitted» sol ser perquè no heu iniciat com a superusuari (su)
+
* Si obtiene mensajes de tipo «Operation not permitted» suele ser porque no ha iniciado como superusuario (su)
  
== Comprovar les eines disponibles ==
+
== Comprobar las herramientas disponibles ==
En un terminal comproveu aquesta instrucció:
+
En un terminal compruebe esta instrucción:
 
  chroot
 
  chroot
Us pot dir dues coses: o la presentació d'ajuda (amb «''usage: chroot...''») o el missatge d'error «''chroot: not found''». En aquest últim cas (''not found'') teniu una variant d'Android molt retallada, i necessiteu reemplaçar-la per una altra més lliure com [[Canviar Android per CyanogenMod|CyanogenMod]] o [http://replicant.us/ Replicant]. Altres alternatives més tècniques són: [[Superposar directoris sobre Android]] o [https://wiki.ubuntu.com/ARM/OmapDesktopInstall Formatejar una targeta de memòria].
+
Le puede decir dos cosas: o bien la presentación de ayuda (con «''usage: chroot...''») o bien el mensahe de error «''chroot: not found''». En este último caso (''not found'') tiene una variante de Android muy recortada, y necesita reemplazarla por otra más libre como [[Reemplazar Android por CyanogenMod|CyanogenMod]] o [http://replicant.us/ Replicant]. Otras alternativas más técnicas son: [[Superponer directorios sobre Android]] o [https://wiki.ubuntu.com/ARM/OmapDesktopInstall Formatear una targeta de memoria].
  
== Anotar l'arquitectura ==
+
== Anotar la arquitectura ==
Es pot mirar quina generació de processador utilitza Android amb '''una''' de les següents instruccions:
+
Se puede mirar qué generación de procesador utiliza Android con '''una''' de las siguientes instrucciones:
 
  uname -m
 
  uname -m
 
  cat /proc/cpuinfo
 
  cat /proc/cpuinfo
Si el processador ARM de l'aparell suporta coma flotant (ARMv7 o superior, per exemple armv7l seria el cas), aleshores es poden utilitzar paquets «armhf» en comptes de «armel». Això millora la velocitat d'alguns processos.
+
Si el procesador ARM del aparato soporta coma flotante (ARMv7 o superior, por ejemplo armv7l seria el caso), entonces se pueden utilizar paquetes «armhf» en lugar de «armel». Esto mejora la velocidad de algunos procesos.
  
== Preparar l'espai ==
+
== Preparar el espacio ==
Per a què funcionin els enllaços i accessos a dispositiu cal que el nou contenidor estigui en una partició apropiada per GNU/Linux, com per exemple Ext3 o Ext4. Amb la instrucció '''mount''' es pot veure el format de cada volum, i amb aquesta sintaxi es veu molt clar:
+
Para que funcionen los enlaces y accesos a dispositivo hace falta que el nuevo contenedor esté en una partición apropiada para GNU/Linux, como por ejemplo Ext3 o Ext4. Con la instrucción '''mount''' se puede ver el formato de cada volumen, y con esta sintaxis se ve muy claro:
 
  mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' '
 
  mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' '
I es pot filtrar veure només les que ens interessa:
+
Y se puede filtrar para ver sólo lo que nos interesa:
 
  mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' ' | sed -e '/ext.$/!d'
 
  mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' ' | sed -e '/ext.$/!d'
  
Una vegada vistes les rutes compatibles, cal que valoreu l'espai lliure que hi ha amb aquesta instrucció:
+
Una vez vistas las rutas compatibles, debe valorar el espacio libre que hay con esta instrucción:
 
  df
 
  df
Si a l'espai lliure (Free) no s'anota la unitat de mesura (100K, 100M, 100G), vol dir que s'expressa en K (KiB). A tenir en compte també que la ruta /cache funciona «com una paperera interna» i el seu contingut pot ser esborrat.
+
Si en el espacio libre (Free) no se menciona la unidad de medida (100K, 100M, 100G), significa que se expresa en K (KiB). A tener en cuenta tambien que la ruta /cache funciona «como una papelera interna» y que su contenido puede ser borrado automáticamente.
  
Necessiteu almenys 100MiB per una instal·lació elemental (''core'' sol), o cap a 250MiB per un debootstrap, però es pot arribar a utilitzar 2 o 3GiB si instal·leu totes les grans aplicacions d'escriptori d'ús comú, apart de comptar amb una mica d'espai de treball. Igualment es poden fer instal·lacions «per totes les butxaques».
+
Necesita almenos 100MiB para una instalación elemental (''core'' solo), o hacia los 250MiB para un ''debootstrap'', pero se puede llegar a utilizar 2 o 3GiB si instala todas las grandes aplicaciones de escritorio de uso común, aparte de contyar con un poco de espacio de trabajo. Igualmente se pueden hacer instalaciones «para todos los bolsillos».
  
Per la resta de guia suposarem que heu escollit la partició '''/data''', i aleshores el nou sistema operatiu el poseu a '''/data/ubuntu'''. Heu d'habilitar doncs els permisos d'escriptura, execució, dispositius i superusuari a la partició, i crear el subdirectori:
+
Para el resto de guía supondremos que ha escogido la partición '''/data''', y entonces el nuevo sistema operativo lo pone en '''/data/ubuntu'''. Debe habilitar entonces los permisos de escritura, ejecución, dispositivos y superusuario en la partición, y crear el subdirectorio::
 
  mount -o remount,rw,dev,exec,suid,noatime /data
 
  mount -o remount,rw,dev,exec,suid,noatime /data
  PuntArrel="/data/ubuntu"
+
  PuntoRaiz="/data/ubuntu"
  mkdir "$PuntArrel"
+
  mkdir "$PuntoRaiz"
  cd "$PuntArrel"
+
  cd "$PuntoRaiz"
  
== Obtenir una base de sistema operatiu ==
+
== Obtener una base de sistema operativo ==
  
Aquesta seria la manera de construïr-lo des d'un altre ordinador (suposant arquitectura per armhf) en una partició Ext2/Ext3:
+
Esta sería la manera de construirlo desde otro ordenador (suponiendo arquitectura para armhf) en una partición Ext2/Ext3:
 
  sudo debootstrap --verbose --arch=armhf --foreign precise precise-armhf
 
  sudo debootstrap --verbose --arch=armhf --foreign precise precise-armhf
* Per transportar l'arbre de directoris d'un dispositiu a un altre, cal copiar-ho amb permisos de superusuari, per tal que els atributs i propietaris de fitxers i directoris no es perdin pel camí. Per obrir així un explorador de carpetes amb Ubuntu, es pot executar (Alt+F2) «'''gksudo nautilus'''».
+
* Para transportar el arbol de directorios de un dispositivo a otro, hay que copiarlo con permisos de superusuario, para que los atributos y propietarios de ficheros y directorios no se pierdan por el camino. Para abrir así un explorador de carpetas con Ubuntu, se puede ejecutar (Alt+F2) «'''gksudo nautilus'''».
  
Però aquí també proposem la manera de fer-ho completament des de l'aparell amb Android: descarregant una base preparada (del web oficial) amb '''només una''' d'aquestes instruccions, segons la versió i variant que necessiteu (es publicaran més versions a cdimage.ubuntu.com):
+
Pero aqui tambien proponemos la manera de hacerlo completamente desde el aparato con Android: descargando una base preparada (del web oficial) con ''sólo una'' de estas instrucciones, según la versión y variante que necesite (se publicaran más versiones en cdimage.ubuntu.com):
 
  '''wget <nowiki>http://cdimage.ubuntu.com/ubuntu-core/releases/precise/release/ubuntu-core-12.04.1-core-armhf.tar.gz</nowiki>'''
 
  '''wget <nowiki>http://cdimage.ubuntu.com/ubuntu-core/releases/precise/release/ubuntu-core-12.04.1-core-armhf.tar.gz</nowiki>'''
 
  wget <nowiki>http://cdimage.ubuntu.com/ubuntu-core/releases/oneiric/release/ubuntu-core-11.10-core-armel.tar.gz</nowiki>
 
  wget <nowiki>http://cdimage.ubuntu.com/ubuntu-core/releases/oneiric/release/ubuntu-core-11.10-core-armel.tar.gz</nowiki>
Línia 94: Línia 94:
 
  wget <nowiki>http://cdimage.ubuntu.com/releases/precise/release/ubuntu-12.04-preinstalled-desktop-armhf+ac100.tar.gz</nowiki>
 
  wget <nowiki>http://cdimage.ubuntu.com/releases/precise/release/ubuntu-12.04-preinstalled-desktop-armhf+ac100.tar.gz</nowiki>
 
  wget <nowiki>http://cdimage.ubuntu.com/releases/oneiric/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.tar.gz</nowiki>
 
  wget <nowiki>http://cdimage.ubuntu.com/releases/oneiric/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.tar.gz</nowiki>
Nota: Les «preinstaled» porten tot el programari d'una instal·lació típica, però també elements que cal netejar per engegar el contenidor.
+
Nota: Las «preinstaled» traen todo el software de una instalación típica, pero tambien elementos que hay que limpiar para arrancar el contenedor.
  
Amb el fitxer descarregat, toca desempaquetar-lo:
+
Con el fichero descargado, toca desempaquetarlo:
 
  tar -xzf ubuntu-core-12.04.1-core-armhf.tar.gz
 
  tar -xzf ubuntu-core-12.04.1-core-armhf.tar.gz
 
  rm ubuntu-core-12.04.1-core-armhf.tar.gz
 
  rm ubuntu-core-12.04.1-core-armhf.tar.gz
Línia 102: Línia 102:
 
== Adaptar la base ==
 
== Adaptar la base ==
  
Corregiu alguns enllaços dins el directori de la base, per adequar-los més a la situació:
+
Corrija algunos enlaces dentro del directorio de la base, para adecuarlos más a la situación:
  chmod 755 "$PuntArrel"
+
  chmod 755 "$PuntoRaiz"
 
  if [ -d /acct ] ; then mkdir -p acct ; fi
 
  if [ -d /acct ] ; then mkdir -p acct ; fi
 
  cd var
 
  cd var
 
  if [ -L run ] ; then rm run ; ln -s ../run run ; fi
 
  if [ -L run ] ; then rm run ; ln -s ../run run ; fi
 
  if [ -L lock ] ; then rm lock ; ln -s ../run/lock lock ; fi
 
  if [ -L lock ] ; then rm lock ; ln -s ../run/lock lock ; fi
  cd "$PuntArrel"
+
  cd "$PuntoRaiz"
  
Netegeu directoris que de vegades venen amb contingut per una instal·lació nadiua (aquest pas potser no sigui imprescindible):
+
Limpie directorios que a veces vienen con contenido para una instalación nativa:
 
  if [ -d proc ] ; then rm -R proc/* ; fi
 
  if [ -d proc ] ; then rm -R proc/* ; fi
 
  if [ -d dev ] ; then rm -R dev/* ; fi
 
  if [ -d dev ] ; then rm -R dev/* ; fi
 
  if [ -d sys ] ; then rm -R sys/* ; fi
 
  if [ -d sys ] ; then rm -R sys/* ; fi
 +
if [ -d var/run/dbus ] ; then rm -R var/run/dbus/* ; fi
  
== Muntar recursos d'Android ==
+
== Montar recursos de Android ==
  
  mount -o bind "/proc" "$PuntArrel/proc"
+
  mount -o bind "/proc" "$PuntoRaiz/proc"
  mount -o bind "/dev" "$PuntArrel/dev"
+
  mount -o bind "/dev" "$PuntoRaiz/dev"
  mount -o bind "/dev/pts" "$PuntArrel/dev/pts"
+
  mount -o bind "/dev/pts" "$PuntoRaiz/dev/pts"
  mount -o bind "/sys" "$PuntArrel/sys"
+
  mount -o bind "/sys" "$PuntoRaiz/sys"
  if [ -d /acct ] ; then mount -o bind "/acct" "$PuntArrel/acct" ; fi
+
  if [ -d /acct ] ; then mount -o bind "/acct" "$PuntoRaiz/acct" ; fi
  if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntArrel/dev/cpuctl" ; fi
+
  if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntoRaiz/dev/cpuctl" ; fi
  
Si voleu fer disponibles les carpetes d'usuari d'Android, cal mirar quines particions hi ha muntades. Es pot fer amb un simple '''mount''' o amb aquesta instrucció que simplifica la informació:
+
Si quiere hacer disponibles las carpetas de Android, se debe que mirar qué particiones hay montadas. Se puede hacer con un simple '''mount''' o con esta instrucción que simplifica la información:
 
  mount | sed -e '/ \/mnt\//!d' | sed -e '/^\//!d' | cut -f 2,3 -d ' ' | cut -f 2- -d '/' | cut -f 1 -d ' ' | sed -e 's/^/\//g'
 
  mount | sed -e '/ \/mnt\//!d' | sed -e '/^\//!d' | cut -f 2,3 -d ' ' | cut -f 2- -d '/' | cut -f 1 -d ' ' | sed -e 's/^/\//g'
Si per exemple volem muntar /mnt/sdcard fem:
+
Si por ejemplo queremos montar /mnt/sdcard hacemos:
  mkdir -p "$PuntArrel/mnt/sdcard"
+
  mkdir -p "$PuntoRaiz/mnt/sdcard"
  mount -o bind "/mnt/sdcard" "$PuntArrel/mnt/sdcard"
+
  mount -o bind "/mnt/sdcard" "$PuntoRaiz/mnt/sdcard"
  
== Entrar al nou sistema i establir serveis elementals ==
+
== Entrar en el nuevo sistema y establecer servicios elementales ==
Des de la incorporació del sistema d'inici de serveis Upstart, [http://gyp.blogs.balabit.com/2011/01/using-upstart-in-a-chroot/ els contenidors Chroot no inicien els serveis com una instal·lació normal], i cal fer-ho manualment.
+
Desde la incorporación del sistema de inicio de servicios Upstart, [http://gyp.blogs.balabit.com/2011/01/using-upstart-in-a-chroot/ los contenedores Chroot no inician los servicios como una instalación normal], y hay que hacerlo manualmente.
  chroot "$PuntArrel" /bin/su
+
  chroot "$PuntoRaiz" /bin/su
 
  mount -a
 
  mount -a
  
Assegureu-vos que hi figuri alguna cosa muntada, per a què no fallin algunes utilitats:
+
Asegúrese de que figure alguna cosa montada, para que no fallen algunas utilidades:
 
  if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi
 
  if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi
  
Completeu el ''debootstrap'' si és el cas, a la mateixa arquitectura:
+
Complete el ''debootstrap'' si es el caso, en la misma arquitectura:
 
  if [ -x /debootstrap/debootstrap ] ; then /debootstrap/debootstrap --second-stage ; fi
 
  if [ -x /debootstrap/debootstrap ] ; then /debootstrap/debootstrap --second-stage ; fi
  
Pedaç per evitar error d'inici de serveis Upstart:
+
Parche para evitar error de inicio de servicios Upstart:
 
  dpkg-divert --local --rename --add /sbin/initctl
 
  dpkg-divert --local --rename --add /sbin/initctl
 
  ln -s /bin/true /sbin/initctl
 
  ln -s /bin/true /sbin/initctl
  
Configureu la xarxa:
+
Configure la red:
 
  echo "nameserver 4.2.2.2" > /etc/resolv.conf
 
  echo "nameserver 4.2.2.2" > /etc/resolv.conf
 
  echo "nameserver 8.8.8.8" >> /etc/resolv.conf
 
  echo "nameserver 8.8.8.8" >> /etc/resolv.conf
Línia 151: Línia 152:
 
  echo "127.0.0.1 localhost" > /etc/hosts
 
  echo "127.0.0.1 localhost" > /etc/hosts
  
Comproveu si hi ha repositoris establerts:
+
Compruebe si hay repositorios establecidos:
 
  cat /etc/apt/sources.list
 
  cat /etc/apt/sources.list
Si no hi havia res, o els «universe» estan deshabilitats amb #, escriviu-los amb les següents instruccions (exemple per Ubuntu 12.04, anomenat «precise»):
+
Si no había nada, o los «universe» estan deshabilitados con #, escribalos con las siguientes instrucciones (ejemplo para Ubuntu 12.04, llamado «precise»):
  Versio="precise"
+
  Version="precise"
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Versio} main universe" > /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Version} main universe" > /etc/apt/sources.list</nowiki>
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Versio} main universe" >> /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Version} main universe" >> /etc/apt/sources.list</nowiki>
 
  <nowiki>echo "" >> /etc/apt/sources.list</nowiki>
 
  <nowiki>echo "" >> /etc/apt/sources.list</nowiki>
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Versio}-updates main universe" >> /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Version}-updates main universe" >> /etc/apt/sources.list</nowiki>
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Versio}-updates main universe" >> /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Version}-updates main universe" >> /etc/apt/sources.list</nowiki>
 
  <nowiki>echo "" >> /etc/apt/sources.list</nowiki>
 
  <nowiki>echo "" >> /etc/apt/sources.list</nowiki>
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Versio}-security main universe" >> /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "deb http://ports.ubuntu.com/ ${Version}-security main universe" >> /etc/apt/sources.list</nowiki>
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Versio}-security main universe" >> /etc/apt/sources.list</nowiki>
+
  <nowiki>echo "# deb-src http://ports.ubuntu.com/ ${Version}-security main universe" >> /etc/apt/sources.list</nowiki>
 
  apt-get update
 
  apt-get update
  
Instal·leu serveis i eines per evitar queixes (els paquets ''-ca'' són per la llengua catalana):
+
Instale servicios y herramientas para evitar quejas (los paquetes ''-es'' son para el idioma castellano):
:Nota: si apareix algun requadre de pregunta o missatge, es canvia d'opció amb el TABulador i es polsen els botons amb l'espai.
+
:Nota: si aparece algún recuadro de pregunta o mensaje, se cambia de opción con el TABulador, y se pulsan los botones con el espacio, lo cual es fácil de hacer si se está trabajando con ADB desde un ordenador.
 
  apt-get install dbus dbus-x11
 
  apt-get install dbus dbus-x11
 
  mkdir -p /var/run/dbus
 
  mkdir -p /var/run/dbus
  apt-get install language-pack-ca
+
  apt-get install language-pack-es
 
  update-locale
 
  update-locale
  LlenguaPredeterminada="ca_ES.UTF-8"
+
  IdiomaPredeterminado="es_ES.UTF-8"
  export LANG="$LlenguaPredeterminada"
+
  export LANG="$IdiomaPredeterminado"
  export LANGUAGE="$LlenguaPredeterminada"
+
  export LANGUAGE="$IdiomaPredeterminado"
  echo "LANG=\"$LlenguaPredeterminada\"" >> /etc/default/locale
+
  echo "LANG=\"$IdiomaPredeterminado\"" >> /etc/default/locale
  echo "LANGUAGE=\"$LlenguaPredeterminada\"" >> /etc/default/locale
+
  echo "LANGUAGE=\"$IdiomaPredeterminado\"" >> /etc/default/locale
Inicieu el servei DBus del qual en depenen moltes aplicacions (no es pot aprofitar el d'Android):
+
Inicie el servicio DBus del cual dependen muchas aplicaciones (no se puede aprovechar el de Android):
 
  DbusPid="$(dbus-daemon --system --print-pid --fork)"
 
  DbusPid="$(dbus-daemon --system --print-pid --fork)"
  
Instal·leu la part bàsica d'Ubuntu i apliqueu actualitzacions. Aquest procés triga bastant:
+
Instale la parte básica de Ubuntu y aplique actualizaciones. Este proceso tarda bastante:
 
  apt-get install ubuntu-minimal ubuntu-standard
 
  apt-get install ubuntu-minimal ubuntu-standard
 
  apt-get upgrade
 
  apt-get upgrade
Instal·leu escriptori i aplicacions que us interessi. Aquest procés pot trigar MOLT:
+
Instale escritorio y aplicaciones que le interese. Este proceso puede tardar MUCHO:
  apt-get install sudo ubuntu-desktop libreoffice libreoffice-l10n-ca language-pack-gnome-ca
+
  apt-get install sudo ubuntu-desktop libreoffice libreoffice-l10n-es language-pack-gnome-es
(si apareix un requadre de missatge o pregunta, es desplaça amb el TABulador i es polsa amb l'espai.)
+
(si aparece un recuadro de mensaje o pregunta, se desplaza con el TABulador, y se pulsa con el espacio).
  
== Obrir un compte d'usuari normal ==
+
== Abrir una cuenta de usuario normal ==
Utilitzant l'escriptori i aplicacions com a usuari normal (no root) millora la seguretat i l'admissió per part d'alguns components que ho requereixen.
+
Utilizando el escritorio y aplicaciones como usuario normal (no root) mejora la seguridad y la admisión por parte de algunos elementos que lo requieren.
 
  cp -a /etc/adduser.conf /etc/adduser.conf.bak
 
  cp -a /etc/adduser.conf /etc/adduser.conf.bak
 
  cat /etc/adduser.conf.bak | sed -e 's/^#EXTRA_GROUPS=/EXTRA_GROUPS=/g' > /etc/adduser.conf
 
  cat /etc/adduser.conf.bak | sed -e 's/^#EXTRA_GROUPS=/EXTRA_GROUPS=/g' > /etc/adduser.conf
  NomUsuari=usuari
+
  NombreUsuaria=usuario
  adduser --add_extra_groups --gecos "" $NomUsuari
+
  adduser --add_extra_groups --gecos "" $NombreUsuaria
Incloure el nou compte ($NomUsuari) al grup comú d'usuaris i grups d'administració que hi hagi:
+
Incluir la nueva cuenta ($NombreUsuaria) en el grupo común de usuarios y grupos de administración que haya:
  usermod --append --groups users $NomUsuari
+
  usermod --append --groups users $NombreUsuaria
  usermod --append --groups sudo $NomUsuari
+
  usermod --append --groups sudo $NombreUsuaria
  usermod --append --groups adm $NomUsuari
+
  usermod --append --groups adm $NombreUsuaria
  usermod --append --groups admin $NomUsuari
+
  usermod --append --groups admin $NombreUsuaria
Crear un grup especial on incloure-hi l'usuari, per a què pugui obrir ports d'entrada.
+
Crear un grupo especial en donde incluir el usuario, para que pueda abrir puertos de entrada
 
  addgroup --gid 3003 sockets
 
  addgroup --gid 3003 sockets
  usermod --append --groups sockets $NomUsuari
+
  usermod --append --groups sockets $NombreUsuaria
  
== Habilitar interfície gràfica ==
+
== Habilitar interfaz gráfica ==
Tot i que ja ha aparegut alguna [http://f-droid.org/repository/browse/?fdid=au.com.darkside.XServer eina X-Server] per utilitzar aplicacions en pantalla directament sense control remot, de moment exposem el mètode tradicional 2011-2012 (suposant que la pantalla de l'aparell té una resolució de 1280x720):
+
Aunque ya ha aparecido alguna [http://f-droid.org/repository/browse/?fdid=au.com.darkside.XServer herramienta X-Server] para utilizar aplicaciones en pantalla directamente sin control remoto, de momento exponemos el método tradicional 2011-2012 (suponiendo como ejemplo que la pantalla del aparato tiene una resolución de 1280x720):
 
  apt-get install xvfb x11vnc xtightvncviewer
 
  apt-get install xvfb x11vnc xtightvncviewer
 
  if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
 
  if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
  MesOpcions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
+
  MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
  echo "x11vnc $MesOpcions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
+
  echo "x11vnc $MoreOptions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
 
  chmod a+rx /tmp/xvnc.sh
 
  chmod a+rx /tmp/xvnc.sh
  su -l $NomUsuari -c /tmp/xvnc.sh
+
  su -l $NombreUsuaria -c /tmp/xvnc.sh
Es quedarà esperant connexions (veureu PORT=5900). Cal no tancar aquest terminal mentre es vulgui tenir Ubuntu disponible.
+
Se quedará esperando conexiones (verá PORT=5900). Es necesario no cerrar este terminal mientras se quiera tener Ubuntu disponible.
  
== Obrir l'escriptori d'Ubuntu des d'Android ==
+
== Abrir el escritorio de Ubuntu desde Android ==
Es pot utilitzar qualsevol [http://f-droid.org/repository/browse/?fdid=android.androidVNC programa de control remot per VNC], que es pot trobar fàcilment amb el [[gestor de paquets F-Droid]].
+
Se puede utilizar cualquier [http://f-droid.org/repository/browse/?fdid=android.androidVNC programa de control remot per VNC], que se puede encontrar fácilmente con el [[Gestor de paquetes F-Droid]].
  
Es connecta a l'adreça '''localhost''' i amb el port normal '''5900'''. Sense usuari (''nickname'') ni tampoc contrasenya (''password''). Teniu un accés prou segur perquè només admetrà connexions des del mateix aparell.
+
Se conecta a la dirección '''localhost''' y con el puerto normal '''5900'''. Sin usuario (''nickname'') ni tampoco contraseña (''password''). Tiene un acceso suficientemente seguro porque sólo admitirá conexiones desde el mismo aparato (-localhost).
  
== Sortida ==
+
== Salida ==
Si voleu tornar a utilitzar Android n'hi ha prou amb tancar el VNC, o símplement minimitzar-lo per fer altres coses. Si atureu l'aparell amb Android no passa res; és com si també aturéssiu l'escriptori d'Ubuntu com si fos un ordinador.
+
Si quiere volver a utilizar Android es suficiente con cerrar el VNC, o símplemente minimizarlo para hacer otras cosas. Si detiene el aparato con Android no pasa nada; es como si tambien detuviera el escritorio de Ubuntu como si fuera un ordenador.
  
Si voleu aturar el sistema Ubuntu sense aturar ni reiniciar Android, heu de sortir de la sessió del mateix escriproti d'Ubuntu, igual com si ho fessiu d'un ordinador normal: amb el botó d'aturar l'ordinador, però l'opció de sortir com a usuari. Si veieu una finestra de terminal també tancant-la es finalitza la sessió. Amb les següents indicacions fareu una sortida completament neta.
+
Si quiere detener el sistema Ubuntu sin detener ni reiniciar Android, debe salir de la sesión por el mismo escritorio de Ubuntu, igual como si lo hiciera de un ordenador normal: con el botón gráfico de detener el ordenador, pero la opción de salir como usuario. Si ve una ventana de terminal tambien cerrándola se finaliza la sesión. Con las siguientes indicaciones hará una salida completamente limpia del contenedor.
  
Aturar serveis: A la finestra de Terminal on teníeu el x11vnc esperant connexions, si aquest encara espera, el podeu interrompre amb {Control} + {C}. Després la resta:
+
Detener servicios: En la ventana de Terminal en donde tenía el x11vnc esperando conexiones, si este todavía espera, lo puede interrumpir con {Control} + {C}. Después el resto:
 
  kill $DbusPid
 
  kill $DbusPid
 
  rm -f /var/run/dbus/pid
 
  rm -f /var/run/dbus/pid
Línia 227: Línia 228:
 
  umount -a
 
  umount -a
 
  exit
 
  exit
Si per exemple heu muntat la carpeta d'Android /mnt/sdcard :
+
Si por ejemplo ha montado la carpeta de Android /mnt/sdcard :
  umount "$PuntArrel/mnt/sdcard"
+
  umount "$PuntoRaiz/mnt/sdcard"
  if [ -d /dev/cpuctl ] ; then umount "$PuntArrel/dev/cpuctl" ; fi
+
  if [ -d /dev/cpuctl ] ; then umount "$PuntoRaiz/dev/cpuctl" ; fi
  if [ -d /acct ] ; then umount "$PuntArrel/acct" ; fi
+
  if [ -d /acct ] ; then umount "$PuntoRaiz/acct" ; fi
  umount "$PuntArrel/sys"
+
  umount "$PuntoRaiz/sys"
  umount "$PuntArrel/dev/pts"
+
  umount "$PuntoRaiz/dev/pts"
  umount "$PuntArrel/dev"
+
  umount "$PuntoRaiz/dev"
  umount "$PuntArrel/proc"
+
  umount "$PuntoRaiz/proc"
 
  exit
 
  exit
 
  exit
 
  exit
  
== Per repetir l'experiència ==
+
== Para repetir la experiencia ==
* Si no heu finalitzat la sessió dins Ubuntu, símplement podeu tornar a connectar amb el programa-client de VNC.
+
* Si no ha finalizado la sesión dentro de Ubuntu, símplemente puede volver a conectar con el programa-cliente de VNC.
* El millor, és clar és poder tenir icones directes a l'escriptori, tant per muntar el contenidor com per connectar amb l'escriptori per VNC. Aquest wiki agraïrà molt les aportacions sobre aquest tema.
+
* Lo mejor, está claro, es poder tener iconos directos en el escritorio de Android, tanto para montar el contenedor como para conectar con el escritorio por VNC. Este wiki agradecerá mucho las aportaciones sobre este tema.
  
En altres casos, com per exemple que hagueu aturat l'aparell o finalitzat Ubuntu completament, escriviu aquestes instruccions en una finestra de Terminal (dades del mateix exemple d'aquesta pàgina, que cal personalitzar):
+
En otros casos, como por ejemplo que haya detenido el aparato o finalizado el contenedor Ubuntu completamente, escriba estas instrucciones en una ventana de Terminal (datos del mismo ejemplo de esta página, que hay que personalizar):
 
  su
 
  su
 
  mount -o remount,rw,dev,exec,suid,noatime /data
 
  mount -o remount,rw,dev,exec,suid,noatime /data
  PuntArrel="/data/ubuntu"
+
  PuntoRaiz="/data/ubuntu"
  mount -o bind "/proc" "$PuntArrel/proc"
+
  mount -o bind "/proc" "$PuntoRaiz/proc"
  mount -o bind "/dev" "$PuntArrel/dev"
+
  mount -o bind "/dev" "$PuntoRaiz/dev"
  mount -o bind "/dev/pts" "$PuntArrel/dev/pts"
+
  mount -o bind "/dev/pts" "$PuntoRaiz/dev/pts"
  mount -o bind "/sys" "$PuntArrel/sys"
+
  mount -o bind "/sys" "$PuntoRaiz/sys"
  if [ -d /acct ] ; then mount -o bind "/acct" "$PuntArrel/acct" ; fi
+
  if [ -d /acct ] ; then mount -o bind "/acct" "$PuntoRaiz/acct" ; fi
  if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntArrel/dev/cpuctl" ; fi
+
  if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntoRaiz/dev/cpuctl" ; fi
  mount -o bind "/mnt/sdcard" "$PuntArrel/mnt/sdcard"
+
  mount -o bind "/mnt/sdcard" "$PuntoRaiz/mnt/sdcard"
  chroot "$PuntArrel" /bin/su
+
  chroot "$PuntoRaiz" /bin/su
 
  mount -a
 
  mount -a
 
  if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi
 
  if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi
 
  DbusPid="$(dbus-daemon --system --print-pid --fork)"
 
  DbusPid="$(dbus-daemon --system --print-pid --fork)"
  NomUsuari=usuari
+
  NombreUsuaria=usuari
 
  if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
 
  if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
  MesOpcions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
+
  MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
  echo "x11vnc $MesOpcions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
+
  echo "x11vnc $MoreOptions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
 
  chmod a+rx /tmp/xvnc.sh
 
  chmod a+rx /tmp/xvnc.sh
  su -l $NomUsuari -c /tmp/xvnc.sh
+
  su -l $NombreUsuaria -c /tmp/xvnc.sh
Connectar amb l'aplicació-client de VNC a l'adreça '''localhost''' i amb el port normal '''5900'''. Sense usuari ni tampoc contrasenya.
+
Conectar con la aplicación-cliente de VNC a la dirección '''localhost''' y con el puerto normal '''5900'''. Sin usuario ni tampoco contraseña.
  
Evidentment el millor és tenir les instruccions scripts (fitxers de text executables): del primer «mount» fins al «chroot» en un script a Android (per exemple /system/bin/m) i la resta en un script a Ubuntu (per exemple /usr/local/bin/x). D'aquesta manera, en un terminal ja només caldria fer:
+
Evidentemente lo mejor es tener las instrucciones en scripts (ficheros de texto ejecutables): del primer «mount» hasta el «chroot» en un script en Android (por ejemplo /system/bin/m) y el resto en un script en Ubuntu (por ejemplo /usr/local/bin/x). De esta forma, en un terminal ya sólo habría que hacer:
 
  su
 
  su
 
  m
 
  m
 
  x
 
  x
I per fer-ho en una sola instrucció, podeu canviar la instrucció '''chroot "$PuntArrel" /bin/su''' per '''chroot "$PuntArrel" /bin/su -c /usr/local/bin/x''', i aleshores també un script a Android (/system/bin/u) que contingui una sola línia amb '''su -c m'''. Amb això, engegueu el servei amb una sola instrucció al terminal:
+
Y para hacerlo en una sola instrucción, puede cambiar la instrucción '''chroot "$PuntoRaiz" /bin/su''' por '''chroot "$PuntoRaiz" /bin/su -c /usr/local/bin/x''' , y entonces tambien un script en Android (/system/bin/u) que contenga una sola línea con '''su -c m''' . Con esto, inicia el servicio con una sola instrucción en el terminal:
 
  u
 
  u
(recordeu-vos de donar permís d'execució als scripts, per exemple amb: chmod 755 /system/bin/u )
+
(recuerde a dar permiso de ejecución a los scripts, por ejemplo con: chmod 755 /system/bin/u )
  
==== Llançadors a l'escriptori ====
+
==== Lanzadores en el escritorio de Android ====
Amb el [http://code.google.com/p/android-scripting/ SL4A] podeu preparar un programet Bash (''Shell script'') que també es pot executar sense mostrar la finestra de terminal (background). Amb això podeu substituïr «u» que hem posat d'exemple, creant un ''script'' anomenat per exemple '''Ubuntu.sh''' i amb contingut '''su -c m'''.
+
Con el [http://code.google.com/p/android-scripting/ SL4A] puede preparar un programillo Bash (''Shell script'') que tambien se puede ejecutar con mostrar la ventana de terminal (background). Con esto puede sustituir «u» que hemos puesto de ejemplo, creando un ''script'' llamado por ejemplo '''Ubuntu.sh''' y con contenido '''su -c m'''
  
 
Per crear una icona a l'escriptori (Home) que llanci l'Ubuntu de fons, premeu el fons de l'escriptori durant una estona fins que us obri un menú d'opcions, i trieu crear una drecera/llançadora personalitzada (''Custom shortcut''). Seleccioneu l'activitat "Scripts" que porta la icona dels ulls iluminats (SL4A), seleccioneu el vostre programet "Ubuntu.sh" i trieu que s'inicii de rerefons/background (botó amb engranatge). Li podeu acabar personalitzant el títol com «Ubuntu 0» i accepteu.
 
Per crear una icona a l'escriptori (Home) que llanci l'Ubuntu de fons, premeu el fons de l'escriptori durant una estona fins que us obri un menú d'opcions, i trieu crear una drecera/llançadora personalitzada (''Custom shortcut''). Seleccioneu l'activitat "Scripts" que porta la icona dels ulls iluminats (SL4A), seleccioneu el vostre programet "Ubuntu.sh" i trieu que s'inicii de rerefons/background (botó amb engranatge). Li podeu acabar personalitzant el títol com «Ubuntu 0» i accepteu.
Línia 288: Línia 289:
  
 
Si amb l'exemple d'aquesta guia volem veure les coses el ''doble'' de grans, canviem la resolució de 1280x720 per 640x360, i l'escala de 1/1 per 2/1. Això significa dividir per 2 la resolució i augmentar la petita imatge al doble per a què igualment empleni la pantalla. L'operació es pot fer en qualsevol proporció; aquí un exemple per per-ho a dos terços (que implica un 50% d'augment):
 
Si amb l'exemple d'aquesta guia volem veure les coses el ''doble'' de grans, canviem la resolució de 1280x720 per 640x360, i l'escala de 1/1 per 2/1. Això significa dividir per 2 la resolució i augmentar la petita imatge al doble per a què igualment empleni la pantalla. L'operació es pot fer en qualsevol proporció; aquí un exemple per per-ho a dos terços (que implica un 50% d'augment):
  MesOpcions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 3/2"
+
  MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 3/2"
  echo "x11vnc $MesOpcions -env FD_GEOM=${1:-853x480x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
+
  echo "x11vnc $MoreOptions -env FD_GEOM=${1:-853x480x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
 
1280/3x2 = 853 ; 720/3x2 = 480 ; escala 3/2
 
1280/3x2 = 853 ; 720/3x2 = 480 ; escala 3/2

Revisió de 19:50, 5 gen 2013

Català - Castellano - English


Introducción: Esta es una guia para hacer funcionar un contenedor de Ubuntu GNU/Linux dentro de una sesión del sistema operativo Android, y así tener la funcionalidad de un ordenador de escritorio sin perder rendimiento. Es una guia muy detallada, tambien útil para quien quiera crear un asistente o mejorar el procedimiento.

Notas:

  • En el momento de escribir esta guía (noviembre del 2011), Canonical todavía no tiene lista su propia solución. La versión con que el escritorio predeterminado (Unity) funciona mejor es la 12.04 (Precise)
  • El total de descargas que se propone puede llegar a 1GiB de datos; si las hace todas desde el aparato tome en cuenta la tarifa de datos que le aplica el proveedor de acceso a internet.
  • Se ha explorado la posibilidad de utilizar un contenedor LXC para tener un contenedor completamente normal, pero no ha funcionado por el uso que hace Android de bionic lic en lugar de GNU libc.

Permisos de superusuario (root)

Es un requisito tener acceso "su" para administrar el sistema operativo. Puede ver la guia Abrir permisos en Android

Acceso por terminal

Terminal local

Siempre es recomendable tener una aplicación de Terminal (que se puede obtener libremente con F-Droid) disponible para poder hacer gestiones con movilidad, pero las preparaciones largas y complejas es más comodo hacerlas desde un ordenador de escritorio controlando el aparato conectado por USB.

Control remoto

En la distribución Ubuntu GNU/Linux, a partir de la versión 12.10 en el repositorio universal hay disponible el paquete android-tools-adb que permite el control remoto a un aparato con Android en modo de depuración USB. Tambien hay un repositorio independiente que proporciona android-tools para anteriores versiones.

Para utilizar el Android Debug Bridge (ADB) debe tener el aparato en marcha, conectado por USB, y con el modo de «Depuración USB» habilitado en las opciones del desarrollador (developer) de Android

ADB por USB
  • Para comprobar la conectividad:
adb devices

(debe mostrar una «lista» con un identificador raro que diga que es un dispositivo; device)

  • Para abrir una sesión de terminal en el aparato:
adb shell
  • Para iniciar una sesión como superusuario (root), y tener permisos de administración de Android:
su
  • Para finalizar como superusuario y después tambien cerrar la sesión de terminal:
exit
exit
ADB por red

Muchas conexiones por USB son poco estables (se cortan muy a menudo y te das cuenta de que escribes en tu ordenador), y en estos casos se resuelve por red (wifi). Cuando se hace esto es importante que el aparato no tenga conesión directa a internet (por ejemplo con el operador telefónico) y se trate de una comunicación por el Wifi local.

  • Desde Android, para ver los dispositivos de red que tiene activados (default... dev -->):
ip route list
  • Desde Android, para ver la dirección IP de un dispositivo de red (por ejemplo wlan0):
ifconfig wlan0
  • Para establecer desde el ordenador que la comunicación será via red (por ejemplo a la IP 192.168.1.122):
adb connect 192.168.1.122
  • Para abrir una sesión de terminal en el aparato:
adb shell
  • Para iniciar una sesión como superusuario (root) y tener permisos de administración de Android:
su
  • Para finalizar como superusuario y tambien cerrar la sesión de terminal:
exit
exit
Notas adicionales
  • En esta guia, en donde se indican instrucciones escritas es para ejecutar en una ventana de terminal local o remoto.
  • Si obtiene mensajes de tipo «Operation not permitted» suele ser porque no ha iniciado como superusuario (su)

Comprobar las herramientas disponibles

En un terminal compruebe esta instrucción:

chroot

Le puede decir dos cosas: o bien la presentación de ayuda (con «usage: chroot...») o bien el mensahe de error «chroot: not found». En este último caso (not found) tiene una variante de Android muy recortada, y necesita reemplazarla por otra más libre como CyanogenMod o Replicant. Otras alternativas más técnicas son: Superponer directorios sobre Android o Formatear una targeta de memoria.

Anotar la arquitectura

Se puede mirar qué generación de procesador utiliza Android con una de las siguientes instrucciones:

uname -m
cat /proc/cpuinfo

Si el procesador ARM del aparato soporta coma flotante (ARMv7 o superior, por ejemplo armv7l seria el caso), entonces se pueden utilizar paquetes «armhf» en lugar de «armel». Esto mejora la velocidad de algunos procesos.

Preparar el espacio

Para que funcionen los enlaces y accesos a dispositivo hace falta que el nuevo contenedor esté en una partición apropiada para GNU/Linux, como por ejemplo Ext3 o Ext4. Con la instrucción mount se puede ver el formato de cada volumen, y con esta sintaxis se ve muy claro:

mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' '

Y se puede filtrar para ver sólo lo que nos interesa:

mount | cut -f 1-5 -d ' ' | sed -e 's/ on / /g' | sed -e 's/ type / /g' | cut -f 2-3 -d ' ' | sed -e '/ext.$/!d'

Una vez vistas las rutas compatibles, debe valorar el espacio libre que hay con esta instrucción:

df

Si en el espacio libre (Free) no se menciona la unidad de medida (100K, 100M, 100G), significa que se expresa en K (KiB). A tener en cuenta tambien que la ruta /cache funciona «como una papelera interna» y que su contenido puede ser borrado automáticamente.

Necesita almenos 100MiB para una instalación elemental (core solo), o hacia los 250MiB para un debootstrap, pero se puede llegar a utilizar 2 o 3GiB si instala todas las grandes aplicaciones de escritorio de uso común, aparte de contyar con un poco de espacio de trabajo. Igualmente se pueden hacer instalaciones «para todos los bolsillos».

Para el resto de guía supondremos que ha escogido la partición /data, y entonces el nuevo sistema operativo lo pone en /data/ubuntu. Debe habilitar entonces los permisos de escritura, ejecución, dispositivos y superusuario en la partición, y crear el subdirectorio::

mount -o remount,rw,dev,exec,suid,noatime /data
PuntoRaiz="/data/ubuntu"
mkdir "$PuntoRaiz"
cd "$PuntoRaiz"

Obtener una base de sistema operativo

Esta sería la manera de construirlo desde otro ordenador (suponiendo arquitectura para armhf) en una partición Ext2/Ext3:

sudo debootstrap --verbose --arch=armhf --foreign precise precise-armhf
  • Para transportar el arbol de directorios de un dispositivo a otro, hay que copiarlo con permisos de superusuario, para que los atributos y propietarios de ficheros y directorios no se pierdan por el camino. Para abrir así un explorador de carpetas con Ubuntu, se puede ejecutar (Alt+F2) «gksudo nautilus».

Pero aqui tambien proponemos la manera de hacerlo completamente desde el aparato con Android: descargando una base preparada (del web oficial) con sólo una de estas instrucciones, según la versión y variante que necesite (se publicaran más versiones en cdimage.ubuntu.com):

wget http://cdimage.ubuntu.com/ubuntu-core/releases/precise/release/ubuntu-core-12.04.1-core-armhf.tar.gz
wget http://cdimage.ubuntu.com/ubuntu-core/releases/oneiric/release/ubuntu-core-11.10-core-armel.tar.gz
wget http://cdimage.ubuntu.com/ubuntu-core/releases/quantal/release/ubuntu-core-12.10-core-armhf.tar.gz
wget http://cdimage.ubuntu.com/releases/precise/release/ubuntu-12.04-preinstalled-desktop-armhf+ac100.tar.gz
wget http://cdimage.ubuntu.com/releases/oneiric/release/ubuntu-11.10-preinstalled-desktop-armel+ac100.tar.gz

Nota: Las «preinstaled» traen todo el software de una instalación típica, pero tambien elementos que hay que limpiar para arrancar el contenedor.

Con el fichero descargado, toca desempaquetarlo:

tar -xzf ubuntu-core-12.04.1-core-armhf.tar.gz
rm ubuntu-core-12.04.1-core-armhf.tar.gz

Adaptar la base

Corrija algunos enlaces dentro del directorio de la base, para adecuarlos más a la situación:

chmod 755 "$PuntoRaiz"
if [ -d /acct ] ; then mkdir -p acct ; fi
cd var
if [ -L run ] ; then rm run ; ln -s ../run run ; fi
if [ -L lock ] ; then rm lock ; ln -s ../run/lock lock ; fi
cd "$PuntoRaiz"

Limpie directorios que a veces vienen con contenido para una instalación nativa:

if [ -d proc ] ; then rm -R proc/* ; fi
if [ -d dev ] ; then rm -R dev/* ; fi
if [ -d sys ] ; then rm -R sys/* ; fi
if [ -d var/run/dbus ] ; then rm -R var/run/dbus/* ; fi

Montar recursos de Android

mount -o bind "/proc" "$PuntoRaiz/proc"
mount -o bind "/dev" "$PuntoRaiz/dev"
mount -o bind "/dev/pts" "$PuntoRaiz/dev/pts"
mount -o bind "/sys" "$PuntoRaiz/sys"
if [ -d /acct ] ; then mount -o bind "/acct" "$PuntoRaiz/acct" ; fi
if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntoRaiz/dev/cpuctl" ; fi

Si quiere hacer disponibles las carpetas de Android, se debe que mirar qué particiones hay montadas. Se puede hacer con un simple mount o con esta instrucción que simplifica la información:

mount | sed -e '/ \/mnt\//!d' | sed -e '/^\//!d' | cut -f 2,3 -d ' ' | cut -f 2- -d '/' | cut -f 1 -d ' ' | sed -e 's/^/\//g'

Si por ejemplo queremos montar /mnt/sdcard hacemos:

mkdir -p "$PuntoRaiz/mnt/sdcard"
mount -o bind "/mnt/sdcard" "$PuntoRaiz/mnt/sdcard"

Entrar en el nuevo sistema y establecer servicios elementales

Desde la incorporación del sistema de inicio de servicios Upstart, los contenedores Chroot no inician los servicios como una instalación normal, y hay que hacerlo manualmente.

chroot "$PuntoRaiz" /bin/su
mount -a

Asegúrese de que figure alguna cosa montada, para que no fallen algunas utilidades:

if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi

Complete el debootstrap si es el caso, en la misma arquitectura:

if [ -x /debootstrap/debootstrap ] ; then /debootstrap/debootstrap --second-stage ; fi

Parche para evitar error de inicio de servicios Upstart:

dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

Configure la red:

echo "nameserver 4.2.2.2" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf
echo "127.0.0.1 localhost" > /etc/hosts

Compruebe si hay repositorios establecidos:

cat /etc/apt/sources.list

Si no había nada, o los «universe» estan deshabilitados con #, escribalos con las siguientes instrucciones (ejemplo para Ubuntu 12.04, llamado «precise»):

Version="precise"
echo "deb http://ports.ubuntu.com/ ${Version} main universe" > /etc/apt/sources.list
echo "# deb-src http://ports.ubuntu.com/ ${Version} main universe" >> /etc/apt/sources.list
echo "" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com/ ${Version}-updates main universe" >> /etc/apt/sources.list
echo "# deb-src http://ports.ubuntu.com/ ${Version}-updates main universe" >> /etc/apt/sources.list
echo "" >> /etc/apt/sources.list
echo "deb http://ports.ubuntu.com/ ${Version}-security main universe" >> /etc/apt/sources.list
echo "# deb-src http://ports.ubuntu.com/ ${Version}-security main universe" >> /etc/apt/sources.list
apt-get update

Instale servicios y herramientas para evitar quejas (los paquetes -es son para el idioma castellano):

Nota: si aparece algún recuadro de pregunta o mensaje, se cambia de opción con el TABulador, y se pulsan los botones con el espacio, lo cual es fácil de hacer si se está trabajando con ADB desde un ordenador.
apt-get install dbus dbus-x11
mkdir -p /var/run/dbus
apt-get install language-pack-es
update-locale
IdiomaPredeterminado="es_ES.UTF-8"
export LANG="$IdiomaPredeterminado"
export LANGUAGE="$IdiomaPredeterminado"
echo "LANG=\"$IdiomaPredeterminado\"" >> /etc/default/locale
echo "LANGUAGE=\"$IdiomaPredeterminado\"" >> /etc/default/locale

Inicie el servicio DBus del cual dependen muchas aplicaciones (no se puede aprovechar el de Android):

DbusPid="$(dbus-daemon --system --print-pid --fork)"

Instale la parte básica de Ubuntu y aplique actualizaciones. Este proceso tarda bastante:

apt-get install ubuntu-minimal ubuntu-standard
apt-get upgrade

Instale escritorio y aplicaciones que le interese. Este proceso puede tardar MUCHO:

apt-get install sudo ubuntu-desktop libreoffice libreoffice-l10n-es language-pack-gnome-es

(si aparece un recuadro de mensaje o pregunta, se desplaza con el TABulador, y se pulsa con el espacio).

Abrir una cuenta de usuario normal

Utilizando el escritorio y aplicaciones como usuario normal (no root) mejora la seguridad y la admisión por parte de algunos elementos que lo requieren.

cp -a /etc/adduser.conf /etc/adduser.conf.bak
cat /etc/adduser.conf.bak | sed -e 's/^#EXTRA_GROUPS=/EXTRA_GROUPS=/g' > /etc/adduser.conf
NombreUsuaria=usuario
adduser --add_extra_groups --gecos "" $NombreUsuaria

Incluir la nueva cuenta ($NombreUsuaria) en el grupo común de usuarios y grupos de administración que haya:

usermod --append --groups users $NombreUsuaria
usermod --append --groups sudo $NombreUsuaria
usermod --append --groups adm $NombreUsuaria
usermod --append --groups admin $NombreUsuaria

Crear un grupo especial en donde incluir el usuario, para que pueda abrir puertos de entrada

addgroup --gid 3003 sockets
usermod --append --groups sockets $NombreUsuaria

Habilitar interfaz gráfica

Aunque ya ha aparecido alguna herramienta X-Server para utilizar aplicaciones en pantalla directamente sin control remoto, de momento exponemos el método tradicional 2011-2012 (suponiendo como ejemplo que la pantalla del aparato tiene una resolución de 1280x720):

apt-get install xvfb x11vnc xtightvncviewer
if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
echo "x11vnc $MoreOptions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
chmod a+rx /tmp/xvnc.sh
su -l $NombreUsuaria -c /tmp/xvnc.sh

Se quedará esperando conexiones (verá PORT=5900). Es necesario no cerrar este terminal mientras se quiera tener Ubuntu disponible.

Abrir el escritorio de Ubuntu desde Android

Se puede utilizar cualquier programa de control remot per VNC, que se puede encontrar fácilmente con el Gestor de paquetes F-Droid.

Se conecta a la dirección localhost y con el puerto normal 5900. Sin usuario (nickname) ni tampoco contraseña (password). Tiene un acceso suficientemente seguro porque sólo admitirá conexiones desde el mismo aparato (-localhost).

Salida

Si quiere volver a utilizar Android es suficiente con cerrar el VNC, o símplemente minimizarlo para hacer otras cosas. Si detiene el aparato con Android no pasa nada; es como si tambien detuviera el escritorio de Ubuntu como si fuera un ordenador.

Si quiere detener el sistema Ubuntu sin detener ni reiniciar Android, debe salir de la sesión por el mismo escritorio de Ubuntu, igual como si lo hiciera de un ordenador normal: con el botón gráfico de detener el ordenador, pero la opción de salir como usuario. Si ve una ventana de terminal tambien cerrándola se finaliza la sesión. Con las siguientes indicaciones hará una salida completamente limpia del contenedor.

Detener servicios: En la ventana de Terminal en donde tenía el x11vnc esperando conexiones, si este todavía espera, lo puede interrumpir con {Control} + {C}. Después el resto:

kill $DbusPid
rm -f /var/run/dbus/pid
if [ "$(mount | grep -e "/selinux")" != "" ] ; then umount /selinux ; fi
umount -a
exit

Si por ejemplo ha montado la carpeta de Android /mnt/sdcard :

umount "$PuntoRaiz/mnt/sdcard"
if [ -d /dev/cpuctl ] ; then umount "$PuntoRaiz/dev/cpuctl" ; fi
if [ -d /acct ] ; then umount "$PuntoRaiz/acct" ; fi
umount "$PuntoRaiz/sys"
umount "$PuntoRaiz/dev/pts"
umount "$PuntoRaiz/dev"
umount "$PuntoRaiz/proc"
exit
exit

Para repetir la experiencia

  • Si no ha finalizado la sesión dentro de Ubuntu, símplemente puede volver a conectar con el programa-cliente de VNC.
  • Lo mejor, está claro, es poder tener iconos directos en el escritorio de Android, tanto para montar el contenedor como para conectar con el escritorio por VNC. Este wiki agradecerá mucho las aportaciones sobre este tema.

En otros casos, como por ejemplo que haya detenido el aparato o finalizado el contenedor Ubuntu completamente, escriba estas instrucciones en una ventana de Terminal (datos del mismo ejemplo de esta página, que hay que personalizar):

su
mount -o remount,rw,dev,exec,suid,noatime /data
PuntoRaiz="/data/ubuntu"
mount -o bind "/proc" "$PuntoRaiz/proc"
mount -o bind "/dev" "$PuntoRaiz/dev"
mount -o bind "/dev/pts" "$PuntoRaiz/dev/pts"
mount -o bind "/sys" "$PuntoRaiz/sys"
if [ -d /acct ] ; then mount -o bind "/acct" "$PuntoRaiz/acct" ; fi
if [ -d /dev/cpuctl ] ; then mount -o bind "/dev/cpuctl" "$PuntoRaiz/dev/cpuctl" ; fi
mount -o bind "/mnt/sdcard" "$PuntoRaiz/mnt/sdcard"
chroot "$PuntoRaiz" /bin/su
mount -a
if [ "$(mount)" = "" ] ; then mount -o bind /selinux /selinux ; fi
DbusPid="$(dbus-daemon --system --print-pid --fork)"
NombreUsuaria=usuari
if [ "$Copyrect" = "" ] ; then CrOptions="-nowirecopyrect -noscrollcopyrect" ; else CrOptions="-ncache" ; fi
MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 1/1"
echo "x11vnc $MoreOptions -env FD_GEOM=${1:-1280x720x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh
chmod a+rx /tmp/xvnc.sh
su -l $NombreUsuaria -c /tmp/xvnc.sh

Conectar con la aplicación-cliente de VNC a la dirección localhost y con el puerto normal 5900. Sin usuario ni tampoco contraseña.

Evidentemente lo mejor es tener las instrucciones en scripts (ficheros de texto ejecutables): del primer «mount» hasta el «chroot» en un script en Android (por ejemplo /system/bin/m) y el resto en un script en Ubuntu (por ejemplo /usr/local/bin/x). De esta forma, en un terminal ya sólo habría que hacer:

su
m
x

Y para hacerlo en una sola instrucción, puede cambiar la instrucción chroot "$PuntoRaiz" /bin/su por chroot "$PuntoRaiz" /bin/su -c /usr/local/bin/x , y entonces tambien un script en Android (/system/bin/u) que contenga una sola línea con su -c m . Con esto, inicia el servicio con una sola instrucción en el terminal:

u

(recuerde a dar permiso de ejecución a los scripts, por ejemplo con: chmod 755 /system/bin/u )

Lanzadores en el escritorio de Android

Con el SL4A puede preparar un programillo Bash (Shell script) que tambien se puede ejecutar con mostrar la ventana de terminal (background). Con esto puede sustituir «u» que hemos puesto de ejemplo, creando un script llamado por ejemplo Ubuntu.sh y con contenido su -c m

Per crear una icona a l'escriptori (Home) que llanci l'Ubuntu de fons, premeu el fons de l'escriptori durant una estona fins que us obri un menú d'opcions, i trieu crear una drecera/llançadora personalitzada (Custom shortcut). Seleccioneu l'activitat "Scripts" que porta la icona dels ulls iluminats (SL4A), seleccioneu el vostre programet "Ubuntu.sh" i trieu que s'inicii de rerefons/background (botó amb engranatge). Li podeu acabar personalitzant el títol com «Ubuntu 0» i accepteu.

La mateixa tècnica podeu emprar per crear una llançadora que connecti directament per VNC: polsar llargament al fons de l'escriptori, Llançadora personalitzada (Custom shortcut), escollir activitat (Pick your activity), Connexió VNC, escolliu la de «localhost:5900», poseu-li un títol com «Ubuntu 1» i accepteu.

Amb aquestes dues llançadores, ja teniu l'Ubuntu amb 2 pulsacions: primer a la icona SL4A que treballa de rerefons, i després a la icona de VNC que us hi connecta. No llanceu novament la icona de SL4A si no us heu assegurat de què està aturat. Podeu connectar i desconnectar tantes vegades com voleu mentre l'Ubuntu estigui engegat de rerefons amb SL4A.

Un problema detectat: Si se us obre el menú però no us apareix l'opció de crear llançadora/drecera/shortcut a l'escriptori (només ofereix canviar fons), segurament esteu utilitzant l'escriptori «Trebuchet» que té alguna mancança. Podeu instal·lar el gestor d'escriptori AnDerWeb per arreglar-ho, però no aprofita les icones que tinguessiu col·locades amb l'anterior.

Com veure les coses més grans

Hi ha aparells de butxaca que tenen una gran densitat de punts en una pantalla tàctil, és a dir, molta resolució en una pantalla tant petita. Aprofitar tota la resolució en aquestes situacions fa difícil encertar els elements de l'escriptori amb el dit.

Si amb l'exemple d'aquesta guia volem veure les coses el doble de grans, canviem la resolució de 1280x720 per 640x360, i l'escala de 1/1 per 2/1. Això significa dividir per 2 la resolució i augmentar la petita imatge al doble per a què igualment empleni la pantalla. L'operació es pot fer en qualsevol proporció; aquí un exemple per per-ho a dos terços (que implica un 50% d'augment):

MoreOptions="-create -localhost -xrandr $CrOptions -rfbport 5900 -nopw -forever -permitfiletransfer -nevershared -scale 3/2"
echo "x11vnc $MoreOptions -env FD_GEOM=${1:-853x480x16} -afteraccept 'x-session-manager &' -logfile '.x11vnc.log'" > /tmp/xvnc.sh

1280/3x2 = 853 ; 720/3x2 = 480 ; escala 3/2