Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

DNIe en Debian GNU/Linux Squeeze

Este artículo muestra cómo instalar el DNIe en Debian GNU/Linux Squeeze.

Para instalar el DNIe en Debian Lenny y en Ubuntu Karmic Koala visitar el siguiente artículo: DNIe en GNU/Linux.

Una vez instalado un lector de DNI-e, también nos sirve para utilizar tarjetas criptográficas CardOs M4 como las que utiliza por ejemplo la Comunidad Valenciana a través de la ACCV.

El DNI electónico o DNIe se puede hacer funcionar en GNU/Linux, tanto para identificarse en webs como para firmar documentos todo con plena validez legal. El problema es que a la hora de hacer los drivers hubo varias chapuzas, problemas con las licencias libres, utilización de librerías incorrectas… Así que para instalarlo en Debian Squeeze hace falta utilizar un poco de magia ;-) Que es un modo más bonito de decir que hay que parchear la instalación para que funcionen los paquetes.

DNIe DNIe

No hay que olvidar que el DNIe tiene sus limitaciones y pegas de seguridad. (Para los “paranoicos” se recomienda utilizar el DNIe únicamente desde sistemas de solo lectura como un CD con Knoppix).
Tampoco hay que olvidar que una firma “normal” es mucho más facil de falsificar que una firma electrónica, pese a que ninguna sea totalmente segura.
 
Las siguientes instrucciones se han probado en Debian Squeeze con un lector C3PO LTC31 (de venta en las oficinas de correos por 19,90 €), con un “miniLector Bit4id” del plan avanza2 (es un Advanced Card Systems ACR38-U pero con una caja blanca) y con un lector Omnikey 3021.
C3PO_LTC31 ACS_ACR38-U Omnikey 3021

 

INSTALACIÓN DEL LECTOR

Básicamente vamos a instalar los paquetes de Debian Lenny en nuestro Squeeze.

$ wget http://www.dnielectronico.es/descargas/PKCS11_para_Sistemas_Unix/1.4.6.Debian_Lenny_32/Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar

Para hacerlos funcionar necesitaremos un par de librerías del repositorio de Lenny:

$ wget http://ftp.es.debian.org/debian/pool/main/libt/libtool/libltdl3_1.5.26-4+lenny1_i386.deb
$ wget http://ftp.es.debian.org/debian/pool/main/o/openct/libopenct1_0.6.14-3_i386.deb

Instalamos los paquetes:

$ tar xvf Debian_Lenny_opensc-dnie_1.4.6-2_i386.deb.tar
libopensc2_0.11.7-7_i386.deb
opensc-dnie_1.4.6-2_i386.deb
opensc_0.11.7-7_i386.deb
# dpkg -i libltdl3_1.5.26-4+lenny1_i386.deb
# dpkg -i libopenct1_0.6.14-3_i386.deb
# dpkg -i libopensc2_0.11.7-7_i386.deb
# dpkg -i opensc_0.11.7-7_i386.deb
# aptitude install pinentry-gtk2
# dpkg -i opensc-dnie_1.4.6-2_i386.deb
# Bloqueamos los paquetes
#+ para que no se actualicen, ya que los de la distribución son
#+ más modernos pero el DNIe no funciona con ellos
# aptitude hold libltdl3 libopenct1 libopensc2 opensc opensc-dnie

 
Nos indica que hemos de registrar el módulo PKCS#11 en iceweasel/firefox utilizando el enlace que nos crea en el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“.
Indicamos que confiamos en la nueva Autoridad Certificadora (CA) para las tres posibilidades.
 
Podemos comprobar si el sistema reconoce correctamente el lector con el comando “pcsc_scan” y probando a introducir y sacar el DNIe (u otras tarjetas similares):

# aptitude install pcscd pcsc-tools
$ pcsc_scan
PC/SC device scanner
[...]
Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card inserted,
[...]
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
	DNI electronico (Spanish electronic ID card)

http://www.dnielectronico.es

 Reader 0: ACS ACR 38U-CCID 00 00
  Card state: Card removed,

 
Otras pruebas que podemos hacer son (estas con una tarjeta CardOs M4):

$ opensc-tool -l
Readers known about:
Nr.    Driver     Name
0      pcsc       C3PO LTC31 (00426664) 00 00
$ opensc-tool -a
Using reader with a card: C3PO LTC31 (00426664) 00 00
3b:f2:98:00:ff:c1:10:31:fe:55:c8:04:12
$ opensc-tool -n
Using reader with a card: C3PO LTC31 (00426664) 00 00
CardOS M4

 
Para que funcione bien iceweasel/firefox y detecte el módulo sin problemas es necesario reiniciar el navegador.
 
 

USO Y DISFRUTE

Lo primero que hay que saber es que en el DNIe tenemos a nuestra disposición dos certificados, uno para identificarnos (certificado de autenticación) y otro para firmar (certificado de firma), lo que son los dos principales usos del DNIe.

También es importante saber que cada aplicación que utiliza el DNIe establece una “sesión” con el lector de tarjetas y que no puede haber dos sesiones abiertas a la vez. Es decir no podemos usar el DNIe en dos aplicaciones a la vez. Sin embargo muchas aplicaciones no indican adecuadamente esta circunstancia y simplemente parece que no funcionan.
Así por ejemplo si iniciamos sesión en iceweasel/firefox para acceder a una web, no podemos firmar un archivo pdf con sinadura hasta cerrar sesión. Y al revés, tras firmar un fichero con sinadura no nos deja validarnos con iceweasel.
Ante la duda basta con extraer y volver a introducir el DNIe en el lector para asegurarse que está disponible el acceso.
 
Un último recordatorio, si se introduce el PIN del DNIe erróneamente tres veces seguidas, éste se bloquea. Así que al hacer pruebas con los programas y sus configuraciones hay que tener cuidado. A mí se me bloqueó haciendo pruebas con Sinadura (para desbloquearlo hay que pasar 5 minutos por una comisaria), así que después cada vez que hacía una prueba con un programa si no funcionaba perfectamente iniciaba sesión en iceweasel/firefox.
 

Identificarse en sitios web con iceweasel/firefox

El DNIe se puede utilizar al navegar para identificarse en un sitio web. Así por ejemplo si nos identificamos en la web de la seguridad social podremos descargarnos al instante nuestra vida laboral.

Primero debemos asegurarnos que hemos registrado en iceweasel/firefox el módulo de DNIe PKCS#11 (usando el menú principal del escritorio en “Oficina-> Registrar módulo DNIe PKCS#11“).
En caso contrario podemos registrarlo a mano desde “Editar -> Preferencias -> Avanzado -> Cifrado -> Dispositivos de seguridad“. Seleccionamos “Cargar”, indicamos un nombre, por ejemplo “DNIe – OpenSC PKCS#11″, y la ruta del módulo “/usr/lib/opensc-pkcs11.so”.
DNIe
 
Si la instalación ha sido correcta y tenemos el lector conectado con un DNIe introducido, nos habilitará la opción “Iniciar sesión” (¡bien!). Si iniciamos sesión nos pedirá el PIN, pero antes es mejor reiniciar el navegador para que nos pida instalar el certificado de la DGP (Dirección General de la Policia).
 
Comprobaciones
Podemos probar nuestro DNIe en el navegador en la página de verificación del portal oficial (el enlace para la verificación está al final de esa página).

Si todo ha ido bien el navegador nos pide nuestro PIN para iniciar sesión (si no lo hemos introducido antes):
PIN DNIe

Cuando conectamos con una web en la que debemos identificarnos nos pregunta cuál de los dos certificados (el de firma o el de autenticación) queremos utilizar. Para identificarnos usamos el de autenticación.
Certificado DNIe

Si el navegador nos indica:

El otro extremo de la conexión SSL no puede verificar su certificado.
(Código de error: ssl_error_bad_cert_alert)

Es porque no hemos iniciado sesión correctamente (hemos fallado el PIN 3 veces, no lo hemos puesto, no está bien instalado el lector…).
 
Lo recomendado es “Iniciar sesión” en el navegador solo cuando se necesita y “Terminar sesión” lo antes posible. Si visitamos una página que requiere certificado sin haber iniciado sesión, el navegador nos solicitará el PIN automáticamente, pero para cerrar sesión hay que ir “a mano” a la opción “Dispositivos de seguridad” del menú.
 

Firmar archivos PDF con Sinadura

Otro uso interesante del DNIe es firmar un archivo PDF. Esta firma tiene plena validez legal. Es decir, hasta ahora había que hacer un documento, imprimirlo y después firmarlo a mano. Ahora podemos hacer un documento, guardarlo como PDF (por ejemplo con OpenOffice Writer) y después firmarlo con nuestro DNIe.
Hay que insistir en que tiene plena validez legal. Sirve para hacer contratos, compra ventas, reclamaciones…

Primero descargamos Sinadura, en mi caso he descargado la versión 2.0.0 para GNU/Linux de 32 bits.

Su instalación es muy sencilla, basta con hacer:

$ java -jar  sinadura-2.0.0-unix32-installer.jar

y seguir el típico asistente de “siguiente”, “siguiente”, “siguiente”…

Para configurarlo vamos a “Sinadura -> Preferencias -> Certificados“, y elegir “Tarjeta Criptográfica“.
También recomiendo ir a “Sinadura -> Preferencias -> Firma” y seleccionar otra imagen ya que la que viene por omisión (el logo de Sinadura) apenas permite leer el texto insertado. Yo me he creado una imagen muy clarita del DNIe en grises.
 

Utilizamos el botón “Añadir documentos” para seleccionar el documento pdf a firmar, en mi caso “prueba.pdf” y pulsamos “Firmar“.
DNIe

El programa carga el certificado (la primera vez tarda un poco, si se cuelga probablemente sea por el problema de las sesiones que comentabamos al principio) y después nos pide el PIN del DNIe.
DNIe

Después elegimos el certificado a utilizar, en este caso el certificado de firma:
DNIe

Nos solicita una confirmación:
DNIe

Y ya está. Podemos verificar cualquier documento firmado también desde Sinadura. Primero lo seleccionamos y después utilizamos el botón “Validar
DNIe
 

Más posibilidades

Una de las posibilidades que la gente busca es firmar y/o cifrar correos electrónicos con el DNIe.
Hay que decir que técnicamente se puede pero que su validez legal es cuanto menos dudosa, y como lo que se busca con el DNIe es tener validez legal no es muy práctico. Siempre se puede enviar un correo-e “normal” con un pdf firmado como adjunto, por ejemplo un contrato.

Esto es porque técnicamente para firmar y/o cifrar basta con tener un par de claves pública/privada, pero el estándar internacional PKI requiere, para firmar un correo-e, que el certificado de la clave indique una dirección de correo-e, que será la única que se “certificará”. Sin embargo en el DNIe no se indica ninguna dirección de correo-e, por lo que no se puede utilizar las firmas del DNIe para este fin.
Lo más recomendado es firmar y cifrar con claves GPG, u obtener firmas de la FNMT, que sí están preparadas para este propósito.
En todo caso hay buenas y sencillas guías en internet sobre cómo conseguir, técnicamente, firmar correos-e con el DNIe (GMail+DNIe; Thunderbird+DNIe).

Para consultar otras posibilidades tenemos el oráculo, la página de Servicios Disponibles o la web Kriptopolis.
 
 

dnie, dni electrónico, linux, debian, squeeze, C3PO LTC31, miniLector Bit4id, ACS ACR38-U

Tuxguitar

Hoy he descubierto tuxguitar, software libre con todo lo que un guitarrista necesita… cuando funciona, claro.
Como es de esperar, un simple # aptitude install tuxguitar nos deja el programa instalado y funcionando… a medias. Lo normal es que el sonido no funcione, y claro, en un programa de música eso no es muy útil ;-).
El programa está realizado en Java y nos faltan unos módulos de sonido (algunos se instalan por defecto, otros no):

  • tuxguitar-alsa

  • tuxguitar-fluidsynth
  • tuxguitar-jsa
  • tuxguitar-oss

Y con eso… todavía no funciona en muchos casos. Porque como la salida del sonido es Midi necesitamos:
# aptitude install timidity
Una vez instalado timidity… no funciona, porque hay que configurarlo:
# vi /etc/default/timidity
# Enable MIDI sequencer (ALSA), default is disabled
TIM_ALSASEQ=true

Ya casi estamos. Solo falta abrir tuxguitar e ir a Herramientas -> Preferencias -> Sonido y elegir un puerto midi de Timidity.

Ahora sí ¡a disfrutar!

Resumen de instalación:
# aptitude install tuxguitar tuxguitar-alsa tuxguitar-fluidsynth tuxguitar-jsa tuxguitar-oss timidity
# vi /etc/default/timidity

tuxguitar, musica, tab, chords, guitarra, multimedia

Posterazor

Tengo algunas fotos que me gustan mucho y de las cuales quería hacer un poster mayor que un A4. Pero mi impresora no imprime nada más grande que un A4.
La solución: Posterazor.
Este programa te guía en un breve y sencillo asistente para poder imprimir la imágen repartida en tantos papeles como quieras, generando un PDF que puedes imprimir de manera sencilla en cualquier impresora.
Posterazor
Utiliza el sorprendente FLTK, por lo que el paquete que descargas de la web es directamente ejecutable, sin instalaciones, con un solo fichero.
Y funciona bien y a la primera en Debian Lenny.

Solo una cosa: es mejor no poner márgenes para obtener los mejores resultados a la hora de cortar.

posterazor, poster, split image

Convertir archivos Open XML (DOCX) a Open Document Format (ODF) y viceversa

Antes o después nos encontramos con el momento desagradable en que nos envían un documento en el formato “Open XML”, un formato cerrado de Microsoft que utiliza a partir de Office 2007 (archivos docx, xlsx, pptx…).

En este caso lo primero que hay que hacer es explicar al remitente que es mejor no utilizar esa engañifa y solicitarle de nuevo el documento en otro formato. Una opción es instalar odf-converter en Windows que permite a Microsoft Office guardar documentos en ODF.

Lo segundo, si lo primero falla, es convertir el documento al formato estándar y abierto ODF, mediante una herramienta en línea de comandos de Go-OO.org basada siempre en odf-converter (la pista es de OOONinja).

Para ello descargamos el fichero rpm desde el repositorio de go-oo.org.
$ wget http://download.go-oo.org/tstnvl/odf-converter/RPMS/i586/odf-converter-3.0.5273-1.i586.rpm

Instalamos herramientas necesarias:
$ sudo aptitude install rpm libgif4

Extraemos los ficheros, bien mediante el gestor de archivadores (doble click sobre el rpm), bien mediante:
$ rpm2cpio odf-converter*rpm | cpio -ivd

Y copiamos los binarios:
$ sudo cp usr/lib/ooo-2.0/program/OdfConverter /usr/bin/odfconverter-2.0
$ sudo cp usr/lib/ooo3/program/OdfConverter /usr/bin/odfconverter-3

El uso es muy sencillo. Por ejemplo para convertir un fichero XLSX hacemos:
$ odfconverter-2.0 fichero.xlsx
Y nos genera (tarda un poco) fichero.ods.

También se puede utilizar para convertir ficheros ODF a DOCX, pero no veo el interés o beneficio. En un momento dado es mejor convertir al formato anterior de Microsoft (doc, xls, ppt…).

ODF, DOCX, Open XML, convertir

tsclient y rdesktop “recv:Connection Reset by Peer”

El cliente de Terminal Services más utilizado en GNU/Linux es tsclient.
Este programa es solo un “front-end” o interfaz gráfica de otros programas.

Para conectar con un servidor Windows de Terminal Services utiliza rdesktop.

Puede ocurrir que tras llevar un tiempo funcionando un día deje de funcionar y arroje el siguiente error:
recv:Connection Reset by Peer

Hay que tener en cuenta que generalmente antes del error indica:
Autoselected keyboard map xx
Esto es solo una indicación de que se ha seleccionado el teclado, pero no tiene nada que ver con el error.

El error que nos ocupa puede deberse a varias cosas, pero básicamente indica que el servidor ha rechazado la conexión.
Para conocer la causa de este rechazo hay que acudir al visualizador de eventos del servidor, ya que no es el cliente el que no ha podido conectar.

En todo caso la causa más habitual es que la licencia otorgada al cliente ha caducado (en principio dura 90 días).
Desinstalar tsclient (y rdesktop) no sirve de mucho, ni siquiera purgando y borrando los directorios de configuración (.tsclient y .rdesktop).

La solución pasa por decirle al servidor que somos otro cliente diferente y que nos otorgue una nueva licencia.
Con rdesktop se puede hacer con el parámetro -n . Con tsclient se puede indicar en una casilla al efecto que aparece en la pestaña principal (“General”) y se llama “Nombre del ordenador Cliente” (o similar según la traducción).

Otro error común, pero totalmente diferente del que nos ocupa en este artículo, tiene que ver con el sonido (basta ir a “Recursos locales” y marcar “No reproducir” en “Sonido del ordenador remoto”).

terminal server, tsclient, rdesktop

 

Ordenar archivos en sistemas de ficheros FAT

El sistema de ficheros FAT es uno de lo más antiguos todavía en uso. Su actual popularidad se debe a que la mayoría de teléfonos móviles, lectores de MP3, cámaras de fotos, radios, etc. solo reconocen este sistema, por lo que las memorias USB, las tarjetas SD, MMC, etc. vienen formateadas con FAT.

El problema es que estos dispositivos no suelen ordenar los ficheros y directorios que encuentran, sino que muesrtan los archivos tal y como están grabados. Esto hace que muchas veces, tras pasar varias horas ordenando tu colección de música, molestándote en ponerles nombres tipo “01-titulo-artista.mp3″ y demás, te encuentras con que el reproductor lista las canciones aleatoriamente.

Para evitar esto basta con “ordenar” los ficheros en el sistema FAT. En GNU/Linux, como es habitual, es muy sencillo hacerlo (el dispositivo debe estar desmontado):
sudo fatsort (dispositivo)

Para que esto funcione bien, primero hay que instalar fatsort, lo que a su vez tambien es muy sencillo:
sudo aptitude install fatsort
Se puede obtener información sobre la patición con:
sudo fatsort -i (dispositivo)

FAT, sort, fatsort, ordenar ficheros, sort files

Poner imagen en GRUB

Si queremos que nuestro GRUB tenga una imagen de fondo basta con indicarlo en /boot/grub/menu.lst mediante:

# Splash Image
splashimage=(hd0,0)/grub/imagen.xpm.gz
# Sustituir hd0,0 según la partición en que se encuentre el archivo
#+ También es habitual (hd0,0)/boot/grub/imagen.xpm.gz

La imagen debe ser tipo xpm, con una resolución de 640×480 y 14 colores, comprimida con gzip.

Con GIMP podemos indicar el número de colores de una imagen en “Imagen -> Modo -> Indexado”.

GRUB, imagen, splashimage

Postinstalación de Ubuntu 9.04 Jaunty Jackalope

Hay múltiples recetas de qué hacer tras instalar Ubuntu 9.04 Jaunty Jackalope (por ejemplo esta receta de “Cosas a hacer despues de instalar Ubuntu 9.04 Jaunty Jackalope“).
Hay que decir que ha día de hoy ya ha salido la nueva versión (Karmic Koala).

Tras consultar varias de esas guías para instalar Ubuntu a un amigo, me he quedado con esto:

sudo wget http://www.medibuntu.org/sources.list.d/jaunty.list --output-document=/etc/apt/sources.list.d/medibuntu.list
sudo aptitude update && sudo aptitude install medibuntu-keyring && sudo aptitude update && sudo aptitude upgrade
sudo aptitude install build-essential linux-headers-`uname -r`
sudo aptitude install gparted scribus blender inkscape gthumb
sudo aptitude install k3b kde-i18n-es k3b-i18n
sudo aptitude install dia gftp
sudo aptitude install gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-ffmpeg
sudo aptitude install virtualbox-ose wine
sudo aptitude install ubuntu-restricted-extras
sudo aptitude install unrar rar p7zip-full unace unzip msttcorefonts
sudo aptitude install libdvdcss2 libdvdread4
sudo aptitude install w32codecs non-free-codecs flashplugin-nonfree-extrasound

Después configuré Firefox y el explorador de archivos (Nautilus) para que se comportase más a mi gusto y en las propiedades de las imágenes indiqué “Abrir con” gthumb.

Postinstalación, instalación, Ubuntu, Jaunty Jackalope

Cuadrar cierre y apertura de ejercicio en AbanQ

AbanQ es un ERP publicado como Software Libre que funciona bastante bien regularcete para PyMES.
Sin embargo cuando se intenta hacer un movimiento automático de cierra y apertura de ejercicio, a veces da un desagradable mensaje que dice que la contabilidad no cuadra -siendo que está perfectamente cuadrada-.
Esto ocurre porque algunas de las cuentas no tienen un código de balance asociado.

Para averiguar qué cuentas no tienen código de balance asociado basta hacer la siguiente consulta (por ejemplo usando pgAdmin III):

SELECT DISTINCT c.codcuenta, cb.codcuenta, cs.saldo
	FROM co_cuentascb cb
	  RIGHT JOIN co_cuentas c ON cb.codcuenta = c.codcuenta
	  LEFT JOIN co_subcuentas cs ON c.idcuenta = cs.idcuenta
	WHERE cb.codcuenta IS NULL
	  AND cs.saldo <> 0

Consulta enviada por Alberto García al foro de AbanQ.
 
Una vez detectadas las cuentas sin código de balance asociado, hay que ir al Área Contable y Financiera (puede tener otro nombre similar) -> Principal. El botón “Códigos de balance 08″ nos abre el formulario con los diferentes códigos de balance.
Para cada cuenta sin código de balance asociado (las que nos devuelve la consulta SQL) seleccionamos el código de balance adecuado, hacemos doble click e insertamos la cuenta.

Por ejemplo se puede ver que el programa asocia inicialmente el código de balance “PG-A-7-a” con el grupo de cuentas “62″, por lo que podremos asociar las cuentas 62x en ese mismo código de balance.
Para ello abrimos el código de balance “PG-A-7-a”, hacemos doble click e insertamos las cuentas 62x.

Una vez no queden cuentas sin código de balance asociado, el programa debe hacer correctamente el asiento de cierre y apertura (se recomienda tener ya creado el nuevo ejercicio para poder hacer esta apertura).
…pero el siguiente año generará el mismo error!!
Por eso lo ideal es realizar la consulta ANTES de hacer el cierre y apertura. Si no lo hemos hecho podemos borrar el nuevo ejercicio (si lo acabábamos de abrir) y lo regeneramos para que las cuentas “hereden” los códigos de balance.

abanq, cierre y apertura, códigos de balance

Edición de ficheros odf desde prompt (línea de comandos)

Me encuentro con que tengo un conjunto de documentos en formato odf, concretamente odt y ods, en los que me gustaría hacer una simple modificación: pongamos que quiero cambiar en todos ellos “NOMBRE_CLIENTE” por “El Cliente”.
Para ello basta con utilizar un simple script que dice así:

#!/bin/bash
#
# modifica_odf 0.1 - GPL
# (c) Guimi
# http://guimi.net
#
# Ult. mod: Guimi 2009-06
#

####################################
tmpdir="tmp.$$"

# Hacemos un bucle para tratar todos los odf del directorio
for x in `ls *.od?`
do
  # Mostramos info
  echo "Modificando $x..."

  # Descomprimimos el odf en un directorio temporal
  unzip -q $x -d $tmpdir
  cd $tmpdir

  # Realizamos las modificaciones necesarias en styles.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' styles.xml > tmp.xml
  mv tmp.xml styles.xml

  # Realizamos las modificaciones necesarias en content.xml
  sed 's/NOMBRE_CLIENTE/El Cliente/g' content.xml > tmp.xml
  mv tmp.xml content.xml

  # Borramos el fichero temporal tmp.xml
  rm tmp.xml

  # Regeneramos el odf
  zip -rq9 ../$x *

  # Salimos y borramos el directorio temporal
  cd ..
  rm -r $tmpdir
done

edición de ficheros odf desde prompt, edición masiva de ficheros odf, modificar ficheros odt ods odp odf