17 noviembre, 2005

Herramientas para la consola (I)

Hoy en día lo que más utilizo es la consola (terminal, línea de comandos,... o como queráis llamarlo). Por eso se me hace imprescindible tener herramientas que me puedan resolver ciertos problemas en un momento dado.

En esta ocasión voy a explicar cómo utilizar una serie de herramientas para poder leer documentos en consola. Los documentos que vamos a poder leer son los que tengan formato Doc (.doc, formato cerrado propiedad de Microsoft) y formato Pdf (.pdf, formato abierto propiedad de Adobe). Hay muchas herramientas que convierten distintos tipos de archivos a texto plano (catdoc, pdftotext, ...). Pero la navegación por ellos se hace compleja (pierden la estructura) e incluso se pierden los enlaces que pueda contener el documento. Por estas razones nosotros vamos a convertir estos archivos a Html, formato con el que, en la mayoría de los casos, mantienen la estructura y los enlaces.

Para conseguir nuestro propósito necesitaremos las siguientes herramientas:

  • wvWare: Biblioteca para convertir documentos de Word. Nos facilita una serie de herramientas para convertir dicho formato en otros más accesibles: Html, Latex, Ps, Pdf, Dvi, Text, Abiword, Rtf, ... Sus librerías las utilizan entre otros AbiWord para abrir documentos de Word. Para instalarlo en Gnu/Debian:
    $ apt-get install wv
  • pdftohtml: Utilidad que convierte archivos Pdf en html. Para instalarlo en Gnu/Debian:
    $ apt-get install pdftohtml
  • w3m: Navegador web en modo texto. Este navegador tiene la particularidad de que sirve también como paginador, y tiene extensiones para mostrar las imágenes en framebuffer (para lo que tienes que configurar la consola para utilizar framebuffer). Para instalarlo en Gnu/Debian:
    $ apt-get install w3m
    Para poder ver imágenes en consola:
    $ apt-get install w3m-img
Como casi siempre en Linux tenemos varias alternativas para realizar cualquier tarea. Así, para poder visualizar los documentos serviría cualquier navegador en modo texto: lynx, links, ...

wvWare muestra el resultado de convertir el documento en formato Doc por la salida estándar. Los diferentes sabores de wv (wvPdf, wvHtml, ...) no lo hacen así, por lo que habría que pasarles el archivo donde queremos escribir el resultado. Lo único que le tenemos que decir a wvWare es la plantilla a utilizar para realizar la conversión, que se encuentran (en Gnu/Debian) en '/usr/share/wv/', y no son más que archivos xml. Para nuestros propósitos utilizaremos la plantilla que convierte a Html: '/usr/share/wv/wvHtml.xml' (leyendo el man nos damos cuenta de que es la plantilla por defecto). Para conseguir el resultado de la conversión por la salida estándar el comando sería el siguiente:
$ wvWare -x /usr/share/wv/wvHtml.xml nombreArchivo.doc

pdftohtml, si no se le dice lo contrario guarda el resultado en un fichero, pero con la opción '-stdout' le diremos que lo muestre por la salida estándar. Además le pasaremos la opción '-p' para que cambie los enlaces Pdf a enlaces Html. Así, el comando a utilizar sería el siguiente:
$ pdftohtml -p -stdout nombreArchivo.pdf

Ahora que tenemos en la salida estándar un archivo Html lo único que hay que hacer es redirigir esa salida a la entrada estándar de nuestro navegador preferido. En el caso de ser w3m habría que decirle que la entrada que le va a llegar es un Html. Para ello le pasamos el parámetro '-T' diciéndole el tipo del que se trata: 'text/html':
w3m -T text/html
En el caso de ser links, el comando quedaría:
links -force-html

Juntando todo lo que hemos dicho quedarían unas líneas como las siguientes:

  • Para documentos Doc:
    $ wvWare -x /usr/share/wv/wvHtml.xml nombreArchivo.doc | w3m -T text/html
  • Para documentos Pdf:
    $ pdftohtml -p -stdout nombreArchivo.pdf | w3m -T text/html

Si queremos automatizar los procesos simplemente deberíamos crearnos unos scripts. Nada más fácil:

  • viewDoc.sh:
    #!/bin/bash
    wvWare -x /usr/share/wv/wvHtml.xml $1 2>/dev/null | w3m -T text/html
  • viewPdf.sh:
    #!/bin/bash
    pdftohtml -p -stdout $1 2>/dev/null | w3m -T text/html

TODO Hacer un único script que muestre un archivo a partir de su extensión.

Espero que este post os sirva de ayuda. En posteriores envíos explicaré otras herramientas de consola. Para la mentes inquietas es todo un reto realizar las tareas más cotidianas en consola y produce fuertes dosis de satisfacción. Además esto sirve para que se le pueda dar un uso, aunque sea didáctico, a nuestros viejos equipos que no pueden con las X.

Un saludo a todos

P.D. Las herramientas wvWare y w3m las descubrí un día navegando por las páginas de LinuxDevCenter de O'Reilly, exactamente en las páginas de ejemplo de uno de sus libros. Curiosamente es lo mismo que yo hacía con los Pdf (formato que utilizo más a menudo) pero que no encontraba cómo hacerlo con los Doc.

03 octubre, 2005

Vendí mi alma al diablo por los años de los años

Pues eso, que acabo de comprarme mi primera (y con una probabilidad del 99,999999% única) vivienda. Y además en un pueblo algo alejado del mío (emigrante/inmigrante?).

Para hacer memoria, actualmente vivo en Elda (Alicante). Me he comprado un piso en San Vicente (Alicante), bastante más caro de lo que están actualmente en mi pueblo (argh!!). Pero tras meditarlo mucho mi novia y yo lo decidimos así, ya que ambos trabajamos en Alicante. Para más señas se encuentra cerca de la iglesia "nosétodavíasunombre", al lado del ayuntamiento. Cerca de La Casa del Café, donde quedamos hace ya unos cuantos meses, y cerca de la cementera.

De momento no nos vamos a mudar, ya que primero realizaremos unas cuantas reformas. Pero si terminamos de limpiarlo pronto puede ser que nos quedemos a dormir más de un fin de semana en él. ¡Ya no hay excusas para no ir a las reuniones del GULA!.

P.D. Me parece inconcedible que uno tenga que hipotecar su vida por tantos años (30 en mi caso, snif!), a este paso, ¿dónde vamos a llegar?

16 septiembre, 2005

Devil's Pie 0.11

Ha salido la versión de Devil's Pie 0.11, que arregla un bug que afectaba al archivo de configuración del terminal como fondo de escritorio. En especial a la acción sobre el tipo de ventana, que causaba una 'Violación de segmento'.

Esta misma mañana le envié un correo a Ross Burton, el autor de la aplicación comentándole el bug (en un pésimo inglés). En apenas una hora me ha respondido, diciéndome que habíamos sido dos personas los que habíamos reportado el error en menos de dos horas y que ya estaba solucionado, indicándome de dónde podía descargar el parche. He abierto la página de Devil's Pie cuando he podido y ya había sacado una nueva versión, la 0.11, que arregla este fallo, aparte de algún otro.

Menos mal, ya que mi escritorio no era el mismo sin mi terminal tan a mano, sin tener que buscarlo por el panel de aplicaciones. Cuando te acostumbras a algo no lo echas en falta hasta que no lo tienes.

Gracias Ross Burton.

02 septiembre, 2005

Terminal como fondo de pantalla

Esta es una pequeña guía que escribí en la web anterior de Gula. La he modificado (más bien poco) y la publico aquí, ya que en estos momentos no está en ningún sitio (creo).

Un día me dije: "si lo que más uso es la consola, pero me gusta acceder a los menús de los escritorios para lanzar aplicaciones de X... ¿Por qué no tener las dos cosas?". Dicho y hecho, utilizo Gnome, pero mi fondo de pantalla es un terminal. Tanto si pulso en "mostrar escritorio", como si accedo al escritorio con combinación de teclas, tengo un terminal esperando que teclee comandos. Además no aparece en la barra de tareas ni tabulando entre ventanas. Podéis ver una muestra de un terminal como fondo de pantalla.

Probablemente habrá una forma más fácil (no la he encontrado, pero se aceptan ideas), y como me costó encontrar esta solución se me ocurrió hacer una guía.

¿Qué necesitamos?

  1. Gnu/Linux - Indudablemente.
  2. Escritorio Gnome- Es el que utilizo desde hace tiempo, no sé si funcionará en otros ya que depende del manejador de ventanas metacity; aunque creo que utiliza especificaciones de freedesktop, por lo que debería funcionar en todos los manejadores de ventanas que las cumplan.
  3. devilspie - Después de conocer esta aplicación mi vida cambió radicalmente. Está diseñada para metacity, actualmente va por la versión 0.10.
  4. Terminal x preferido, preferible que pueda tener fondo transparente. Teóricamente sirve cualquiera del tipo Eterm, aterm, ... aunque el elegido ha sido gnome-terminal (ya que estamos con Gnome).
  5. Un empujoncito brindado por el foro de Mandrake, que me guiaron por el buen camino, es el único sitio donde encontré información: Entrada en el foro de Mandrake.

En primer lugar creamos un perfil del gnome-terminal: Abrimos un terminal. En el menú Editar elegimos Perfiles... Creamos uno nuevo, por ejemplo de nombre "terminal-desktop". A este perfil le damos los valores que deseemos: tipo de letra, tamaño de fuente, color de fuente, color de fondo (en mi caso fondo transparente), etc. En el campo "Título inicial" le daremos el nombre por el que luego reconoceremos el terminal que ejecutemos con este perfil; en un alarde de ingenio yo lo llamé "terminal-desktop". Lo guardamos y vamos al siguiente paso.

El principal artífice de nuestro terminal como fondo es la aplicación devilspie. Esta herramienta sirve para manipular ventanas del gestor de ventanas metacity (en el que yo lo he probado). Así que básicamente, lo que hacemos es lanzar esta herramienta, previamente configurada. Devilspie detecta cuando se lanza una aplicación, examina los parámetros de la ventana según unas reglas que le damos y le cambia unos parámetros que le definimos.

La documentación sobre devilspie es un poco pobre, como ejemplo visualizad el man. Así que tuve que buscar bastante para encontrar cómo funciona el archivo de configuración. Si queréis una lista de las propiedades que se pueden cambiar con devilspie buscad en el README que viene con el código fuente, que fue el último sitio donde miré :'(. Leyendo esta documentación, que es suficiente una vez entiendes el funcionamiento, escribí mi archivo de configuración (basado también en el foro de Mandrake). Este archivo de configuración se llama .devilspie.xml y debe estar en vuestro $HOME:

Código:


<?xml version="1.0"?>
<!DOCTYPE devilspie SYSTEM "devilspie.dtd">
<!-- Archivo: .devilspie.xml -->
<!-- The root element is devilspie -->
<devilspie>
    <flurb name="Terminal in desktop">
        <matchers>
            <!-- Este matcher busca en el titulo de la ventana -->
            <matcher name="DevilsPieMatcherWindowName">
                <property name="window_title" value="terminal-desktop"/>
                <!-- mismo nombre que le hemos dado al titulo en el perfil -->
                <!-- para utilizar Eterm -->
                <!--
                    <property name="application_name" value="Eterm"/>
                -->
            </matcher>
        </matchers>
        <actions>
            <!-- Esta accion sirve para esconder la ventana -->
            <action name="DevilsPieActionHide">
                <!-- Esta propiedad esconde la ventana de la barra de tareas -->
                <property name="skip_tasklist" value="TRUE"/>

                <!-- Esta propiedad esconde la ventana de las 
                    areas de trabajo -->
                <property name="skip_pager" value="TRUE"/>
            </action>

            <!-- Esta accion mueve la ventana delante o detras, 
                solamente tiene la propiedad above -->
            <action name="DevilsPieActionLayer">
                <property name="above" value="FALSE"/>
            </action>

            <!-- Esta accion coloca la ventana en un espacio de trabajo -->
            <action name="DevilsPieActionSetWorkspace">
                <!-- Esta propiedad pone la ventana en 
                    todos los espacios de trabajo -->
                <property name="pinned" value="TRUE"/>
            </action>

            <!-- Esta accion cambia el tipo de ventana -->
            <action name="DevilsPieActionSetWintype">
                <!-- ESTA ES LA PROPIEDAD QUE PONE EL 
                    TERMINAL COMO FONDO DE ESCRITORIO -->
                <property name="wintype" value="DESKTOP"/>
            </action>

            <!-- Esta accion cambia la geometria de la ventana -->
            <action name="DevilsPieActionSetGeometry">
                <property name="width" value="xxx" />
                <property name="height" value="yyy" />
                <property name="xoffset" value="x0" />
                <property name="yoffset" value="y0" />
            </action>
        </actions>
    </flurb>
</devilspie>

Después de configurarlo simplemente debemos añadir devilspie al principio de la sesión. En Gnome se consigue buscando el menú 'Preferencias del escritorio -> Sesiones' (o ejecutáis el comando 'gnome-session-properties'). Allí escribimos devilspie en 'Programas al inicio'.

Ahora ponemos también en sesiones el terminal, que se ejecute después de devilspie, el comando es tan sencillo como: gnome-terminal --window-with-profile=terminal-desktop

Y ya está, tenemos nuestro terminal en el fondo de pantalla. Aunque cambiemos de espacio de trabajo tendremos los comandos que estemos ejecutando (esto se puede configurar). También podemos comprobar cómo, al pulsar en el icono de ver escritorio tendremos allí nuestro terminal, sin ventanas que estorben ni tener que buscarlo. Podéis probar distintas configuraciones, hasta encontrar la que más os agrade.

Alternativa a gnome-terminal: Eterm, terminal muy configurable que acepta temas (man Eterm para más señas).

Espero que esta guía le sirva a alguien. Esta es una pequeña demostración de la potencia de devilspie, se deja a cargo del lector buscar cualquier otro uso. No se explica cómo instalar cada uno de los programas, ya que para cada distribución es diferente y no es el objetivo de esta guía explicar cómo se instalan. Si tenéis cualquier duda intentad contactar conmigo y, si puedo, os la resolveré.

16 agosto, 2005

Compartir teclado y ratón

En el trabajo dispongo de mesa con ordenador y además me prestaron un portátil. En ambos tengo y utilizo linux como sistema operativo principal. Pero no tengo buena ubicación para el portátil, así que no podía trabajar con los dos equipos al mismo tiempo. Así que busqué soluciones y las encontré [1]. Lo pongo en mi blog resumido para tener centralizados mis apuntes.

En este artículo de Bulma [2], cuentan cómo compartir el teclado y el ratón entre dos equipos. Básicamente se hace a través de un túnel ssh y con la herramienta x2x [3]. Aunque en el artículo cuentan varias formas yo he encontrado esta forma especialmente útil, ya que además comparte el portapapeles (imaginad todas las posibilidades que abre).

Por pasos:

  1. En el portátil se instala x2x:
    apt-get install x2x
  2. Se configura el servidor ssh para aceptar X11 Forwarding; en el archivo /etc/ssh/sshd_config:
    X11Forwarding yes
  3. En el sobremesa se ejecuta el siguiente comando:
    ssh -X usuario@host /usr/bin/x2x -east -to :0.
    Donde:
    • usuario, host: son el usuario y el nombre/ip del portátil (en mi caso).
    • -east: significa que el portátil se encuentra en el este (derecha).
    • -to: significa el display que se está utilizando.

Y ya está. Así de simple. Con unos simples pasos tenemos compartidos nuestro ratón y teclado. Si configuramos ssh para que no utilice contraseñas no tendremos que escribirla cada vez que conectemos los equipos.

Espero que le sirva a alguien. Nos leemos.

Nota: Mantener abierta la ventana de terminal sobre el que se ejecuta el comando ssh, no seais tan tontos como yo...

[1] Artículo de Bulma
[2] Bulma
[3] Página del proyecto x2x

01 agosto, 2005

Nuevo avatar

Este es mi nuevo avatar. Para quién no lo conozca se trata de una ilustración de Frank Frazetta, maestro de maestros.


Vradick

28 julio, 2005

Comenzando a escribir

Esta es la primera vez que escribo una bitácora, y la verdad, no sé durante cuánto tiempo lo haré o si lo haré de continuo.

Espero que ahora que me he decidido tenga algunas ideas interesantes...