Acceder al escritorio remoto de GNU/Linux Ubuntu 10.04 utilizando FreeNX

Introducción.

Después de experimentar el acceso al escritorio remoto de GNU/Linux a través de XDMCP (con Xephyr y como una terminal) encontré que los resultados fueron satisfactorios pero con algunas desventajas: la seguridad y la velocidad.  En pocas palabras no es prudente utilizar XDMCP en un ambiente diferente a LAN ya que su tráfico no está encriptado y el puerto abierto puede convertirse en un problema de seguridad.

Por esta razón decidí probar un software muy conocido pero que nunca utilizado.  FreeNX es la versión libre del NXServer de NoMachine, el cual es descrito de la siguiente manera en su sitio de Launchpad.

NX technology is a computer program that handles remote X Window System connections, and attempts to greatly improve on the performance of the native X11 protocol to the point that it can be usable over a slow link such as a dial-up modem … The open source alternative to NoMachines’s commercial NX Server.

En términos generales me gustaron mucho los resultados, es rápido y aparentemente seguro (su tráfico se envía a través de SSH). El servidor inclusive puede servir de proxy para acceder a servidores RDP (Windows), VNC o de impresoras mediante los paquetes freenx-rdp, freenx-vnc y freenx-smb respectivamente.

En la instalación, a pesar de no ser compleja, encontré un par de bugs para Ubuntu 10.04 que fueron resueltos.  Este procedimiento se describe a continuación.

Instalar el servidor.

Instalar los paquetes.

$ sudo aptitude install python-software-properties

$ sudo add-apt-repository ppa:freenx-team

$ sudo aptitude update

$ sudo aptitude install freenx-server

Crear las llaves de acceso (opcional).

Como mencioné inicialmente, FreeNX utiliza el protocolo SSH para su transporte, por este motivo puede aprovechar la riqueza de opciones de autenticación que provee este servicio.  Por defecto el servidor instala una pareja de llaves por defecto, utilizarlas constituye un riesgo de seguridad.  Por este motivo se sugiere que se creen y popularicen las llaves propias.  Si la seguridad no es una preocupación, puede obviar este paso y continuar con la instalación del cliente.

Si recibe un mensaje de error al ejecutar nxsetup indicándole que el comando no fue encontrado, realice primero los pasos descritos en la sección de solución de problemas.

$ sudo sudo /usr/lib/nx/nxsetup –install

——> It is recommended that you use the NoMachine key for
easier setup. If you answer “y”, FreeNX creates a custom
KeyPair and expects you to setup your clients manually.
“N” is default and uses the NoMachine key for installation.

Do you want to use your own custom KeyPair? [y/N] y
Setting up /etc/nxserver …done
Generating public/private dsa key pair.
Your identification has been saved in /etc/nxserver/users.id_dsa.
Your public key has been saved in /etc/nxserver/users.id_dsa.pub.
The key fingerprint is:
90:d2:6b:93:58:35:09:7b:e4:cd:43:db:83:9b:e2:bf root@jimezam-notebook
The key’s randomart image is:
+–[ DSA 1024]—-+
|      ..+..      |
|     . *.= +     |
|    . * o * o    |
|     + =   + .   |
|    . = S o      |
|     . o .       |
|        .        |
|         .       |
|          E.     |
+—————–+
Setting up /var/lib/nxserver/db …done
Setting up /var/log/nxserver.log …done
Adding user “nx” to group “utmp” …done
Setting up known_hosts and authorized_keys2 …Unique key generated; your users must install

/var/lib/nxserver/home/.ssh/client.id_dsa.key

on their computers.
done
Setting up permissions …done
Setting up cups nxipp backend …
cp: `/usr/lib/cups/backend/ipp’ and `/usr/lib/cups/backend/ipp’ are the same file

Copie la llave a los equipos cliente, la cual posteriormente podrá ser importada desde el cliente de NX.

$ sudo scp /var/lib/nxserver/home/.ssh/client.id_dsa.key usuario@mi-cliente:~/client.id_dsa.key

Después de importada la llave en el cliente de NX de mi-cliente, se recomienda que remueva el archivo ~/client.id_dsa.key.

Crear nuevas llaves (Servidor)

Es posible que por motivos de seguridad posteriormente desee crear nuevas llaves para reemplazar las existentes después de una cierta cantidad de tiempo.  Para hacer esto ejecute el siguiente comando.

$ sudo dpkg-reconfigure freenx-server

Seleccione el tipo de llaves a utilizarse, utilice la opción Create new custom keys para crear un nuevo par.

Selección del tipo de llaves
Selección del tipo de llaves

Seleccione el tipo de autenticación a utilizarse, en este caso se utilizará el servicio SSH.

Selección del tipo de autenticación
Selección del tipo de autenticación

Finalmente transmita la nueva llave a los clientes para permitirles acceder nuevamente al servidor.

Instalar el cliente.

Instalar el paquete.

Descargue el paquete correspondiente a su sistema operativo de la siguiente dirección.

http://www.nomachine.com/select-package-client.php

Para este caso, Ubuntu 10.04 de 64 bits, se descargo el paquete NX Client DEB for Linux – x86_64.  A continuación se instala el paquete recién descargado.

$ sudo dpkg -i nxclient_3.4.0-7_x86_64.deb

CUPS Printing Backend

The NX Client set-up procedure detected that your “IPP CUPS” printing
backend doesn’t allow printing from the NX session. In order to have
printing support in your NX system, you need to set proper permissions
on the IPP backend. Please execute:

chmod 755 /usr/lib/cups/backend/ipp

$ sudo chmod 755 /usr/lib/cups/backend/ipp

Ejecutar el cliente.

$ /usr/NX/bin/nxclient &

Crear una nueva cuenta de conexión con el asistente (cliente).

Presione el botón Next para iniciar el asistente de creación de cuentas.

Iniciar el asistente de creación de cuentas
Iniciar el asistente de creación de cuentas

Especifique la siguiente información relacionada con la conexión al servidor.

  • Session: nombre de la sesión (a gusto del usuario).
  • Host: dirección IP o nombre del servidor FreeNX.
  • Port: puerto donde se está ejecutando el servicio SSH.
  • Connection Type: tipo de acceso a la red, en este caso es una red LAN.
Información de conexión al sevidor
Información de conexión al sevidor

Especifique la siguiente información relacionada con el administrador de ventanas a ejecutarse en el servidor.

  • Tipo: en este caso será una conexión nativa (Unix) y se ejecutará GNOME.
  • Size: se permite utilizar el máximo tamaño disponible.
Información del escritorio
Información del escritorio

Presione el botón Finish para terminar el asistente.

Finalizar la instalación
Finalizar la instalación

Realizar una conexión con el servidor.

Registro de usuarios
Registro de usuarios

Seleccione el tipo de sesión (Session) que se creó anteriormente a través del asistente y especifique su información de autenticación (Login y Password) para acceder al servidor.  Presione el botón Login para iniciar la sesión.

Si el servidor cuenta con sus propias llaves personalizadas (ver proceso de instalación) será necesario importarlas en el cliente para poder registrarse exitosamente (ver siguiente apartado).

Importar las llaves del servidor en el cliente.

Si el servidor cuenta con sus propias llaves personalizadas (que es lo mas conveniente) es necesario importarlas en el cliente para que se realice exitosamente la conexión al mismo.  Para esto es necesario transferir la llave (client.id_dsa.key) de manera segura desde el servidor hasta el cliente (ver comando scp en la instalación del servidor).

Para importar el archivo de llave seleccione editar la configuración de la sesión presionando el botón Configure del diálogo de registro (ver anterior).

Configuración de sesión
Configuración de sesión

Presione el botón Key… e importe o pegue la llave proveniente del archivo client.id_dsa.key traído desde el servidor.  Después de importado se recomienda que remueva de manera segura este archivo.

Importar llave
Importar llave

Solución de problemas.

No existe la aplicación nxsetup.

Si obtiene el siguiente mensaje de error, el paquete de freenx-server no incluyó erróneamente la aplicación nxsetup la cual es necesaria para realizar su instalación completa.

nxsetup: command not found

Para corregir este problema realice los pasos descritos a continuación.

$ cd /usr/lib/nx

$ sudo wget “https://help.ubuntu.com/community/FreeNX?action=AttachFile&do=get&target=nxsetup.tar.gz”

$ sudo mv “FreeNX?action=AttachFile&do=get&target=nxsetup.tar.gz” nxsetup.tar.gz

$ sudo tar zxvf nxsetup.tar.gz

$ sudo rm nxsetup.tar.gz

Enlaces.

Recuperar el GRUB de GNU/Linux Ubuntu 10.04 después de instalar Windows

Introducción.

Después de instalar Windows sucedió lo que se esperaba, el MBR del disco duro fue sobreescrito por el instalador y el GRUB fue removido.  Como consecuencia de esto ya no es posible acceder a Linux, únicamente a Windows.

Este es el procedimiento necesario para recuperar el GRUB de un GNU/Linux Ubuntu 10.04 instalado previamente a la instalación de Windows 7.

Recuperar el GRUB.

Para hacer esto es necesario iniciar el equipo con una versión en vivo de GNU/Linux Ubuntu 10.04, esto se logra con el CD de instalación o con su respectiva LiveUSB.  Se debe especificar durante su inicio que la intención es la de probar el sistema operativo mas no de instalarlo nuevamente.

A continuación es necsario identificar cual es el disco y la partición raíz (donde se encuentre /boot) de GNU/Linux. La forma mas simple de hacer esto es utilizando el administrador de unidades y medios (Disk Utility) ejecutando el siguiente comando o seleccionando el menú System > Administration > Disk Utility.

$ /usr/bin/palimpsest

Particiones del disco duro
Particiones del disco duro

En este caso, el directorio raíz se encuentra en la partición 5 del primer disco duro, es decir, su dispositivo es /dev/sda5.

Desde una terminal se procede a montar la partición mencionada anteriormente con mediante als siguientes instrucciones.

$ mkdir /tmp/raiz

$ sudo mount /dev/sda5 /tmp/raiz

Finalmente se solicita que se recree el GRUB en el MBR basado en la información encontrada.

$ sudo grub-install –root-directory=/tmp/raiz /dev/sda

Importante: es necesario tener en cuenta que el GRUB se crea sobre el disco duro elegido (sda), no sobre una partición específica (sda5).

Al reiniciar el sistema operativo ya deberá aparecer el GRUB permitiéndole elegir cual de los sitemas operativos registrados iniciar.

Agregar Windows a la lista de selección.

En este caso primero instalé Ubuntu y después instalé Windows lo que motivó en primera instancia que se perdiera el MBR.  Esto trae consigo un problema secundario: al recuperar el GRUB este no contiene una referencia a Windows ya que cuando fue creado aún no se había instalado el segundo sistema operativo.

Para solucionar este problema se deben instalar las herramientas del GRUB de la siguiente manera.

$ sudo aptitude install grub-pc

Con ellas, cada vez que se actualice su información se revisarán las particiones existentes en búsqueda de nuevos sistemas operativos que se configurarán automáticamente para aparecer en el GRUB la próxima vez que se reinicie el sistema.

$ sudo update-grub2

Para este caso específico, la partición de Windows 7 (NTFS) corresponde con el dispositivo /dev/sda2 motivo por el cual se agrega automáticamente la siguiente opción en el archivo /boot/grub/grub.cfg.

menuentry “Windows 7 (loader) (on /dev/sda2)” {
insmod ntfs
set root='(hd0,2)’
search –no-floppy –fs-uuid –set 4a3c22f43c22db29
chainloader +1
}

Preparar una unidad USB de instalación de Windows 7 utilizando GNU/Linux

Introducción.

En algunos casos se necesita instalar Windows como sistema operativo en máquinas que no disponen de una unidad lectora de CD/DVD, tal es el caso de los netbooks actuales.  Windows a diferencia de algunas versiones de Linux como Ubuntu, no incluye una herramienta para crear instaladores del sistema operativo en memorias USB, sin embargo los pasos que se deben seguir para crearlas no son complejos.

A continuación se detalla el procedimiento necesario para crear unidades USB con los instaladores de Windows utilizando un equipo con GNU/Linux Ubuntu 10.04 (en general, cualquier distribución de Linux servirá).

Requerimientos.

  • Un computador con GNU/Linux.
  • Una unidad de DVD.
  • Una memoria USB de por lo menos 3GB.
  • Un DVD de instalación de Windows 7 (probablemente funcionen también otras versiones).

Procedimiento.

Determinar el dispositivo que corresponde a la memoria USB.

Insertar la memoria en un puerto USB libre y ejecutar el siguiente comando.

$ dmesg | tail -20

[16590.915054] scsi10 : SCSI emulation for USB Mass Storage devices
[16590.915460] usb-storage: device found at 7
[16590.915466] usb-storage: waiting for device to settle before scanning
[16592.371732] usb 2-1: USB disconnect, address 7
[16603.750099] usb 2-2: new high speed USB device using ehci_hcd and address 8
[16603.902794] usb 2-2: configuration #1 chosen from 1 choice
[16603.913861] scsi11 : SCSI emulation for USB Mass Storage devices
[16603.922229] usb-storage: device found at 8
[16603.922232] usb-storage: waiting for device to settle before scanning
[16608.923049] usb-storage: device scan complete
[16608.923986] scsi 11:0:0:0: Direct-Access              MIMOBOT          0.00 PQ: 0 ANSI: 2
[16608.927668] sd 11:0:0:0: Attached scsi generic sg2 type 0
[16608.929715] sd 11:0:0:0: [sdb] 7892087 512-byte logical blocks: (4.04 GB/3.76 GiB)
[16608.936095] sd 11:0:0:0: [sdb] Write Protect is off
[16608.936106] sd 11:0:0:0: [sdb] Mode Sense: 00 00 00 00
[16608.936113] sd 11:0:0:0: [sdb] Assuming drive cache: write through
[16608.941652] sd 11:0:0:0: [sdb] Assuming drive cache: write through
[16608.941659]  sdb: sdb1
[16609.210304] sd 11:0:0:0: [sdb] Assuming drive cache: write through
[16609.210316] sd 11:0:0:0: [sdb] Attached SCSI removable disk

Desomntar el dispositivo que referencia a la unidad USB.

$ umount /dev/sdb1

Crear una partición para los archivos de instalación.

$ sudo fdisk /dev/sdb

Verificar si existen particiones previas en la unidad.

Command (m for help): p

Disk /dev/sdb: 4040 MB, 4040748544 bytes
125 heads, 62 sectors/track, 1018 cylinders
Units = cylinders of 7750 * 512 = 3968000 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006a77a

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            1        1018     3944719   83  Linux

En este caso existe una partición previa (sdb1), se procede a removerla.

Remover las particiones existentes.

Command (m for help): d
Selected partition 1

Crear una nueva partición para los archivos de instalación.

Se procede a crear una nueva partición que ocupe la totalidad del espacio de la unidad USB, en este caso 4GB.

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1018, default 1): [Enter]
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1018, default 1018):
[Enter]
Using default value 1018

Cambiar el tipo de la partición a NTFS.

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 7
Changed system type of partition 1 to 7 (HPFS/NTFS)

Permitir que la partición sea activa (bootable).

Command (m for help): a
Partition number (1-4): 1

Guardar los cambios y salir de fdisk.

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

Limpiar la información del MBR.

$ sudo dd if=/dev/zero of=/dev/sdb bs=446 count=1

1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.00288829 s, 154 kB/s

Crear el sistema de archivos en la unidad con NTFS.

$ sudo mkfs.ntfs /dev/sdb1

Cluster size has been automatically set to 4096 bytes.
Initializing device with zeroes: 100% – Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.

Modificar la etiqueta de la unidad (opcional).

$ sudo ntfslabel /dev/sdb1 “JimezamLabs”

Copiar los archivos de instalación.

Retirar y volver a conectar la unidad USB para que el sistema operativo la reconozca nuevamente, ahora vacía y con la etiqueta que se eligió en el paso anterior.

$ cp -rf /media/Windows7/* /media/JimezamLabs/

Deben actualizarse los nombres de los puntos de montaje según su propio contexto.  /media/Windows7 representa el punto de montaje del DVD de Windows mientras que /media/JimezamLabs representa al punto de montaje de la unidad USB que se está preparando.

Instalación de Windows.

Para instalar Windows en un equipo a partir de la memoria USB recién preparada, inserte esta en un puerto USB libre y reinicie el computador.  Configure la BIOS del equipo para que inicie a partir del dispositivo USB y prosiga con la instalación normalmente.

The falling things: jugando con Processing

Introducción.

Processing es en muy pocas palabras un lenguaje multiplataforma (Linux, MacOS y Windows) basado en Java muy interesante que permite desarrollar rápida y fácilmente pequeñas aplicaciones (o sketches) que incluso personas con pocos conocimientos en desarrollo de software pueden implementar.

Por ahora mi experiencia con el lenguaje es muy limitada, sin embargo después de instalarlo he estado un poco con él.  Para esto decidí hacer un sketch muy sencillo en el que se controla mediante el teclado una base que tiene como misión recoger las cosas que caen.

Sketch.

The Falling Things, versión 0.1

Enlaces.

Habilitar en Word el control de cambios de un documento de texto generado con OpenOffice

Introducción.

Extrañamente los documentos de texto generados con OpenOffice (3.2.0 m12 en mi caso) y exportados en el formato doc aparecen con la opción de control de cambios deshabilitada cuando son abiertos con Microsoft Word lo cual me parece extraño ya que durante su edición en OpenOffice esta característica parece estar siempre habilitada.  Supongo entonces que sucede por un malentendido en la exportación del documento.

A continuación se enuncian los pasos necesarios para habilitar el control de cambios en un documento utilizando Word 2007.

Procedimiento.

Abra el documento utilizando Word 2007.

Seleccione el panel Revisar.  Note como el ícono de Control de cambios aparece deshabilitado.

Bajo la opción Proteger documento seleccione el item Restringir formato y edición.

En el panel que aparece en el lado derecho presione el botón Suspender la protección.

Grabe el archivo y listo!

Crear un tunel SSH para la conexión a un servidor MySQL detrás de un firewall con Windows utilizando Putty

Introducción.

De manera análoga a como se realizó el tunel SSH utilizando Linux, también es posible implementarlo en Windows gracias al uso de herramientas de terceros como Putty.

Para la verificación de la conexión a la base de datos en lugar de la herramienta básica de línea de comando (que también debe funcionar normalmente) se utilizará MySQL Workbench que es la herramienta de administración gráfica que provee el motor de bases de datos.

Implementación de la solución.

Crear la especificación del tunel en Putty.

Este paso sólo es necesario realizarlo una única vez mientras se configura el perfil en Putty, en ocasiones posteriores sólo será necesario invocarlo.

Ejecute Putty.exe.

Session en Putty.exe
Session en Putty.exe

En la Session (lado izquierdo) especifique la siguiente información.

1. Nombre del servidor SSH.  desarrollo.com para este ejemplo.

2. Puerto del servicio SSH.  Es el puerto 22 por defecto.  Elija además el tipo de conexión (Connection type) SSH.

3. Especifique un nombre para almacenar la sesión (Saved Sessions).  MiTunel para este ejemplo.

4. Presione el botón guardar (Save) para almacenar la configuración recién especificada.

Connection > SSH en Putty.exe
Connection > SSH en Putty.exe

En las opciones de Connection > SSH elija la casilla de verificación Don’t start a shell para evitar que se cree una consola de comandos interactiva ya que sólo se desea crear el tunel.

Connection > SSH > Tunnels en Putty.exe
Connection > SSH > Tunnels en Putty.exe

Determine la información relacionada con los lados del tunel.

5. Especifique el puerto local desde el cual se iniciará el tunel.  3307 en este caso.

6. Especifique el destino y su puerto donde terminará el tunel.  localhost:3306 para este ejemplo.

Presione el botón agregar (Add) para almacenar los extremos del tunel.

Finalmente almacena la configuración establecida regresando a la sección de Session y presionando el botón de guardar (Save).

Establecer un tunel previamente especificado.

Esto se puede hacer de dos maneras, una desde la interfaz gráfica de Putty seleccionando MiTunel en la lista de las sesiones guardadas (Saved Sessions), presionando el botón cargar (Load) y abriendo la sesión presionando el botón (Open).

Una segunda alternativa es desde la línea de comando ejecutando la siguiente instrucción.

C:rutaaputty.exe -load MiTunel

En ambos casos el resultado es el mismo, aparecerá una ventana de login para realizar la autenticación con el servidor remoto (6).

Autenticación de usuario con SSH.
Autenticación de usuario con SSH.

Realizar la conexión a MySQL a través del tunel SSH.

Como se mencionó inicialmente para la verificación de la conexión se utilizará MySQL Workbench.

Connect to database
Connect to database

Debe tenerse muy en cuenta que gracias al tunel recién creado, la aplicación cliente de la base de datos interpretará que el motor de base de datos se encuentra ubicado localmente (9) y que su puerto es el 3307 (10) -ver 5 y 6-.

Integrar el ServicePack 3 en Windows XP y crear un CDROM de instalación a partir de él utilizando Linux Ubuntu 9.10

Introducción.

Windows XP después de 8 años de su introducción es la versión mas utilizada de este sistema operativo.  Con la liberación de sus service packs que solucionan problemas de seguridad y errores del sistema, es bastante estable e incluye todo lo que un usuario realmente necesita para utilizar su computador día a día.  Su sucesor Windows Vista no nos agradó mucho que digamos y Windows 7, la versión que salió a finales del año pasado promete bastante.

Como decía, aún es muy frecuente encontrarnos con equipos basados en Windows XP en empresas y en nuestras casas, incluyendo a los ahora en apogeo netbooks.

Las actualizaciones de Windows XP, mientras el producto se encuentre aún bajo soporte de Microsoft, se pueden descargar de manera individual para ser instaladas manualmente o pueden ser instaladas en línea mediante el sitio de WindowsUpdate.  A medida que estas actualizaciones crecen y se generalizan son agrupadas en grupos llamados paquetes de servicios (o service packs), estos son incluídos en los CDROMs del sistema operativo para los equipos nuevos.

El problema radica cuando el CDROM de instalación del sistema operativo que venía con el equipo que se va a instalar es muy antígüo y no incluye los service packs mas recientes.  En este caso es necesario descargarlos o instalarlos en línea como se mencionó anteriormente, sin embargo esta es una tarea tediosa debido a los tamaños de los archivos y a que si se utiliza WU aparentemente es necesario instalar el SP2 antes del SP3 a pesar de que estos son acumulativos y uno incluye al otro.  Lo dispendioso de las instalaciones en estas condiciones se hacen mas visibles si es necesario instalar varios computadores y frecuentemente.

Lo ideal es obtener un CDROM de distribución de Windows XP que ya incluya el service pack mas reciente (SP3), el cual en caso de no encontrarse es posible construírlo, es decir, basados en uno antígüo (SP1 en mi caso) es posible crear un CDROM con los instaladores de Windows XP y SP3, este procedimiento es conocido como slipstreaming.  Supuestamente esto sólo es posible hacerlo a partir del SP1 y no desde la versión inicial.

A continuación se exponen los pasos necesarios para la integración del SP3 en disco de instalación de Windows XP SP1 utilizando las herramientas disponibles en Linux Ubuntu 9.10.

Integración del SP3.

Requisitos.

  • Disco de instalación de Windows XP SP1 (o posterior).
  • Un equipo con Linux Ubuntu 9.10.
    • wine 1.1.31 o posterior.
    • cabextract 1.2 o posterior.

Instalación del software requerido.

$ sudo aptitude install cabextract

$ sudo aptitude install wine

Copia de los archivos de Windows.

Crear el directorio donde se almacenarán los archivos necesarios para el proceso de slipstreaming.

$ mkdir ~/slipstream/

Insertar el CDROM de Windows XP SP1.

Desmontar el CDROM recién instalado tan pronto como el sistema operativo lo monte automáticamente.

$ umount /media/X1AHOEM_ES

Montar el CDROM con opciones que preserven el estilo original de los nombres de archivo (mayúsculas).

$ mkdir /tmp/xp

$ sudo mount -t iso9660 -o map=off /dev/cdrom /tmp/xp

Copiar los archivos del CDROM al disco duro.

$ mkdir ~/slipstream/WindowsXP

$ cp -afr /tmp/xp/* ~/slipstream/WindowsXP/

$ chmod -R 777 ~/slipstream/WindowsXP

Desmontar el CDROM y remover el punto de montaje temporal.

$ sudo umount /tmp/xp

$ rmdir /tmp/xp

Obtener el Service Pack 3 de la siguiente ubicación.

http://www.microsoft.com/downloads/details.aspx?displaylang=es&FamilyID=5b33b5a8-5e76-401f-be08-1e1555d4f3d4

Descomprimir los archivos del SP3.

$ mkdir ~/slipstream/SP3 && cd ~/slipstream/SP3

$ cabextract ~/slipstream/WindowsXP-KB936929-SP3-x86-ESN.exe

$ chmod -R 777 ~/slipstream/SP3

Integrar el contenido del SP3 al árbol de la distribución antígüa.

$ cd ~/slipstream/SP3/i386/update

$ wine update.exe /integrate:Z:/home/jimezam/slipstream/WindowsXP

Generación de la nueva imagen del CDROM.

Obtener la imagen del sector de inicio.

$ geteltorito -o ~/slipstream/bootsect.img /dev/cdrom

$ cp ~/slipstream/bootsect.img ~/slipstream/WindowsXP/

Generar la imagen ISO.

$ genisoimage -b ~/slipstream/bootsect.img -no-emul-boot -c BOOT.CAT -D –max-iso9660-filenames -relaxed-filenames -o ~/slipstream/WindowsXP_SP3.iso ~/slipstream/WindowsXP

Enlaces.

Controlar presentaciones con el wiimote en Windows utilizando GlovePIE

Introducción.

De manera análoga a como hace un tiempo expliqué como manipular las presentaciones de OpenOffice Impress con el wiimote desde Linux utilizando CWiid, ahora el turno es hacerlo desde Windows, en este caso la prueba la realicé utilizando Windows 7 RC1 y su funcionamiento puede ser igualmente personalizado según los requerimientos de la presentación y por ende es totalmente compatible con Microsoft PowerPoint.

Hay varias formas de implementar este tipo de solución con el wiimote para este artículo preferí la mas “universal”, es decir, una en la que se utilizara el software mas difundido posible.

Al igual que con la versión de Linux lo que se busca es emular la presión de teclas específicas según el botón del control presionado.  Para este artículo se utiliza entonces GlovePie que es una herramienta muy útil que nos permite implementar lo que requerimos e incluso más aún al incluír un lenguaje elaborado para la preparación de scripts.

Implementación.

1. Descargue GlovePie de la siguiente ubicación.

http://carl.kenner.googlepages.com/glovepie_download

Para este caso se utilizó la versión 0.29.

2. Descomprima el archivo descargado y ubíquelo en su ruta destino.

3. Con un editor de texto (Bloc de notas) edite el siguiente contenido según sus necesidades.  Verifique que el archivo guardado tenga efectivamente la extensión .PIE y no la .txt que agrega automáticamente el editor de texto.  De ser así, corrija este problema antes de continuar.

PageDown = Wiimote.A
PageUp = Wiimote.B

up = Wiimote.Up
down = Wiimote.Down
left = Wiimote.Left
right = Wiimote.Right

Key.NumpadMinus = Wiimote.Minus
Key.NumpadPlus = Wiimote.Plus
Key.Home = wiimote.Home
Key.f5 = wiimote.One
Key.Esc = wiimote.Two

4. Grábelo con un nombre conocido, por ejemplo: Presentaciones.PIE y ubíquelo en una carpeta de su preferencia, que puede ser la misma <ruta>GlovePIEXXXWiimoteScripts.

5. Emparente su wiimote con el sistema operativo.  Para hacer esto haga click sobre el ícono de Bluetooth en su barra de tareas y elija la opción Agregar un nuevo dispositivo (Add a device).

6. Presione simultáneamente los botones 1 y 2 del wiimote para ponerlo en modo de descubrimiento.

7. En el computador seleccione el wiimote tan pronto como sea reconocido: Nintendo RVL-CNT-01.

8. Seleccione la opción de realizar el emparentamiento sin utilizar contraseña alguna (Pair without using a code).

9. Inicie GlovePIE: <ruta>GlovePIEXXXGlovePie.exe.

10. En GlovePIE seleccione el menú File > Open y elija el script recién creado.

11. Para verificar el script (opcional) seleccione el menú Run! > Check for errors.

12. Para ejecutar el script seleccione el menú Run! > Run!.

13. Abra una presentación y utilice el wiimote para manipularla.

Uso.

El script propuesto puede ser totalmente manipulado para ajustarse a los gustos y necesidades de la presentación, sin embargo esta es la funcionalidad básica que yo busco para realizar mis presentaciones.

  • Teclas del cursor: mover la diapositiva / opciones del menú.
  • Botón A: siguiente slide.
  • Botón B: slide anterior.
  • Botones + y –: aumentar y disminuír el acercamiento (no aplica para modo presentación -F5).
  • Botón home: ir al primer slide.
  • Botón 1: entrar en modo presentación.
  • Botón 2: salir del modo presentación / cancelar.

Enlaces.

Instalación de los diccionarios de corrección ortográfica para OpenOffice 3.x

Introducción.

Como actualización al procedimiento realizado hace un par de años de instalación de los diccionarios de corrección ortográfica en OpenOffice 2.x, ahora documentamos la instalación de dicionarios en la nueva versión, OpenOffice 3.x.

Este proceso es ahora mucho mas sencillo ya que no se realiza a través de un asistente (wizard) como se hacía anteriormente sino que ahora se hace a través de las extensiones de diccionario.

Procedimiento.

  1. Acceda al sitio web de las extensiones de diccionario.http://extensions.services.openoffice.org/dictionary
  2. Seleccione el idioma de su preferencia, por ejemplo Spanish/Español y haga clic sobre el enlace correspondiente.
  3. Haga clic sobre el enlace cuya etiqueta es Get It!.
  4. Cuando el navegador le pregunte si abrir o guardar el archivo (diccionario-es-*.oxt) elija abrirlo con la aplicación de OpenOffice.org (default).
  5. Cuando el Administrador de Extensiones de OpenOffice le pregunte si esta seguro que desea realizar la instalación del diccionario presione el botón de OK y posteriormente cierre el diálogo.
  6. A partir de este momento ya podrá utilizar el idioma en sus documentos modificándolo a través del siguiente menú.Herramientas > Opciones > Configuración del idioma > Idiomas > Idioma por defecto para los documentos.
    Tools > Options > Language Settings > Languages > Default languages for documents.

Enlaces.

strptime, "This function is not implemented on Windows platforms".

Hoy mi querido PHP me jugó una mala pasada.  Estaba haciendo un despliegue preliminar de uno de mis proyectos en el servidor del cliente, un Windows 2K3 con PHP 5.2.3 cuando durante las pruebas,  la ejecución de las series falló con un mensaje de error inesperado para mi: This function is not implemented on Windows platforms.  La función strptime que siendo muy útil ella, recibe una fecha en formato texto, el formato en que viene representada dicha fecha y retorna un arreglo con las secciones de la fecha.  El problema: no funciona en Windows!

Hasta ahora no se me había ocurrido que pudiera pasar este hecho trivial, que algo de PHP corra en una plataforma y no en otra.  Bueno, que el symlink no funcione en Windows no me extrañaría, y eso que veo que ya funciona en Windows Vista/8 Server y superiores; pero que no funcionen las funciones de conversión de fechas del API estándar me parece triste.  Tendré que dejar de creer en el write it once & run it everywhere para agregarle un test it forever everyplace.

Por suerte para mi, -hasta ahora- la única función que ha presentado este problema fue la mencionada.  Por mucha mas suerte para mi, un amigo francés llamado Lionel Sauron publicó una versión de reemplazo de strptime para Windows que funciona perfectamente para mis necesidades.

Gracias a este código la solución fue muy sencilla y con un mínimo impacto en mi proyecto.  Creé un método estático en la librería Fecha llamado strptime2($cadena, $formato) cuya implementación corresponde con la propuesta por Lionel y para su invocación verificó si está o no disponible la versión estándar de la función y utilizo la mas conveniente.

$f = null;

if(function_exists("strptime") === true)
    $f = strptime($cadena, $formato);
else
    $f = Fecha::strptime2($cadena, $formato);

Enlaces.