Archivo de la etiqueta: script

Fallos en una unidad USB después de hibernar/suspender mi ordenador

Si usas hibernar / suspender en tu ordenador y tienes unidades USB montadas habitualmente, es posible que cuando vuelva a despertar no reconozca las unidades USB y te de algún tipo de error.

La forma más rápida de evitar problemas es desmontar todas las unidades USB justo antes de hibernar y volver a montarlas después de despertar. Podemos automatizarlo todo para que ocurra sin tener que hacer nada, solo hay que añadir un script en el directorio /etc/pm/sleep.d/ (suponiendo que usas un sistema Debian o Ubuntu). Observa el script, es muy sencillo, y cámbialo según tus necesidades. Recuerda que, como cualquier script, debe tener permisos de ejecución.

#!/bin/sh
case "$1" in
       hibernate|suspend)
             umount /media/LinBkp1
             umount /media/LinBkp2
             ;;
       thaw|resume)
             mount /media/LinBkp1
             mount /media/LinBkp2
             ;;
       *)
             exit 0
             ;;
esac

Notas sobre la actualización de Ubuntu 11.10 (Oneiric Ocelot) a 12.04 (Precise Pengolin)

En la actualización, se desactivan automáticamente todos los repositorios de terceros, por lo que habrá que reactivarlos o actualizarlos posteriormente.

Hay determinado software que te dará algún problema extra.

Dropbox

Dropbox no consigue reiniciarse una vez actualizado el sistema a 12.04.

Este problema me surgió en la actualización de Cecile, pero no es una instalación fresca en Sophie. Para imitar una instalación fresca:

  1. Ejecuta el comando «echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches». Sio no lo haces, te lo pedirá él de todas formas en cuanto lo inicies.
  2. Borra tu carpeta Dropbox (haz antes una copia de seguridad, claro).
  3. Borra la configuración (es decir, el directorio «.dropbox» de tu Home)
  4. Ahora inicia de nuevo dropbox.

Con esto, en mi sistema funcionó y empezó a sincronizar de nuevo. Eso si, preparate para esperar un buen rato, porque tendrá que bajarse de nuevo todos los ficheros desde la nube. Curiosamente no funcionó a la primera sino al segundo o tercer intento.

Curioso, muy curioso.

VMware

O VMplayer, da igual. No funcionan en Ubuntu 12.04. El problema es que fallará la compilación de los módulos vmnet debido a cambios en el kernel 3.2 que usa esta versión de Ubuntu.

Afortunadamente, hasta que los chicos de VMware se den por aludidos y saquen una versión corregida compatible con Ubuntu 12.04, hay disponible un parche creado por la comunidad. Bájatelo a tu ordenador. Descomprimelo. Vete a la carpeta donde se ha descomprimido, y ejecuta el script «patch-modules_3.2.0.sh» como root. Deja que el script trabaje y parchee las fuentes. Cuando termine (no tardará mucho), arranca de nuevo VMware.

Esto funciona para la versión de VMware 8.0.2. Si quieres instalar la nueva versión VMware 8.0.3 volverá a fallar la compilación, así que tendrás que ejecutar de nuevo el script. Pero antes tienes que editarlo y cambiar la línea donde pone «vmreqver=8.0.2» por «vmreqver=8.0.3» para después ejecutar el script.

Si aplicas el parche a VMware 8.0.2 y después actualizas a 8.0.3 el parche no dejará que lo vuelvas a ejecutar. Para que funcione, tendrás que borrar el fichero /usr/lib/vmware/modules/source/.patched como root.

El fichero .xsession-errors crece sin control en Ubuntu 11.10

En Ubuntu 11.10 (Oneiric  Ocelot), me he encontrado conque con cierta frecuencia el /home se queda sin espacio. El motivo es que hay un fichero que crece exponencialmente ocupándolo todo. Me refiero, claro, al fichero .xsession-errors de tu Home. Si borras el fichero con «rm» te encuentras conque no liberas espacio en absoluto y, aunque el fichero no existe, el espacio sigue constando como ocupado. Solo después de resetear el sistema volverás a tener ese espacio libre.

Se trata de un bug conocido. La nueva distribución Ubuntu 12.04 (Precise Pangolin) lo soluciona (más bien lo parchea) volcando los errores del subsistema gráfico a un fichero de /tmp con lo que los logs son borrados en cada reseteo del sistema. Pero si eres como yo y tu ordenador está siempre encendido, los logs nunca serán borrados y el fichero seguirá creciendo exponencialmente aunque esté en /tmp.

La solución definitiva es decirle al sistema de log que ese registro de errores se vaya directamente al agujero negro. Para ello edita el fichero /etc/X11/Xsession, edítalo como root, y en él verás una linea que dice:

ERRFILE=$HOME/.xsession-errors


Cambia esa entrada para que diga:

ERRFILE=/dev/null


Resetea el sistema. Ya está. Ahora el fichero de errores no ocupará espacio porque se irá a carajo según se vaya creando.

Muchas gracias a los miembros de Ubuntu Forums, como siempre ahí, al rescate.

Teclado inalámbrico Logitech K350 en Ubuntu

Funciona «out of the box». Vamos, enchufar y listo.

Magnífico teclado. Pero algunas teclas multimedia (cinco, para ser más exactos) no hay forma de que funcionen en Linux. Las demás, o funcionan «out of the box» o lo hacen con una pequeña configuración extra.

No voy a inventar la pólvora. Daniel Klaffenbach ya te lo explica todo muy bien y bastante masticadito para que no te estreses. ¡Gracias, Daniel!.

El teclado hace cosas muy raras en TightVNC

Pongamos que tienes un ordenador con Linux que usa habitualmente otro miembro de tu familia. Pero pongamos que quieres poder logarte de vez en cuando en esa máquina de forma remota, desde otro ordenador de tu intranet, y sin tener que darle un codazo a tu familiar, al grito de «Quita, que siempre lo tienes tu…«.

Obviamente, ya te habrás dado cuenta de que estoy hablando de mi santa. Es muy duro administrar un sistema si nunca consigues ponerte tu al teclado… :-D

Bien, si. Has mencionado SSH y tienes razón. Listo, que eres un listo.

No, yo me refería a un login gráfico.

Bueno, hay mil formas. Yo la que uso ahora mismo es VNC, concretamente vnc4server. Si usas Ubuntu, o cualquier otra variante de Linux basada en Debian, puedes configurar un script de inicio en la máquina que va a hacer de servidor. Pero no voy a desgañitarme en contártelo, porque ese trabajo ya lo ha hecho a la perfección nuestro amigo Andrew Berry. Así que vas, y te lo lees.

Luego vas a la máquina que va a hacer de cliente, instalas el paquete xtightvncviewer, y ejecutas un «vncviewer ip_del_servidor:1» para logarte. Y ya está.

Bueno, no. Puede que no esté. Yo lo hice y me encontré con que todo funcionaba de maravilla, a no ser que usara el teclado. Cuando tecleabas algo (por ejemplo una contraseña, o un comando, da igual) el resultado de lo que tecleas no tiene nada que ver con las teclas que apretabas. Y de forma bastante absurda, además. Al pulsar «q» aparece «c». Al pulsar «5» es como si pulsaras «retroceso». Cuando digo «cosas raras» quiero decir «cosas raras».

Afortunadamente, otro amigo que se llama Bassu Khan ha encontrado el origen del problema y la solución.

El problema surge solo si el servidor carga Gnome como escritorio. No ocurre con otros gestores de ventanas. Y la solución que propone Bassu Khan es editar el fichero $HOME/.vnc/xstartup (en el ordenador que hace de servidor) y, al final, justo antes de la linea que pone «/etc/X11/Xsession» añadir otra línea que ponga «export XKL_XMODMAP_DISABLE=1». Y ya está. Reinicia TightVNC en el servidor y vuelve a logarte con el cliente.

Yo apliqué esta solución y oye, como la seda.

No, no me des las gracias. Dáselas a ellos.

Script perl para editar listas mp3

El teléfono Nokia n900 maneja bien las listas m3u, así que hago uso intensivo de ellas para organizar mis temas favoritos de cada album.

Si necesitas usar listas m3u de ficheros de audio mp3, tienes muchas formas de crearlas. Por ejemplo a mano, puesto que son ficheros de texto puro y duro. Muchos players permiten también exportar las listas de reproducción a formato m3u, como ocurre por ejemplo con Rhythmbox, así que no deberías tener problemas.

Pero si usas la línea de comandos, quizás te interese algo más directo y rápido, que te permita editar una lista ya construida, y añadir o quitar música de forma rápida y cómoda.

Te pongo un enlace a un programilla en Perl hecho por mi, sencillito, que te permite hacerlo desde la línea de comandos.

Para que te funcione, tendrás que instalar los módulos Text::CSV_XS y MP3::Tag de Perl (en Ubuntu son las librerías libtext-csv-perl y libmp3-tag-perl, de nada).

El programita, básicamente hace esto:

  1. Busca todos los ficheros mp3 que encuentre, en el directorio actual o cualquiera de sus subdirectorios.
  2. Lee las etiquetas ID3 de todos los mp3 y cataloga los temas por álbumes.
  3. Muestra una lista en pantalla, numerada, con los temas encontrados y organizados por álbumes.
  4. Si ha encontrado también un fichero m3u en el directorio actual cuyo nombre empiece por «Favoritas» (por ejemplo «Favoritas Beyonce.m3u», entonces lo lee e ilumina con un asterisco y en verde, qué temas están ya en la lista. Si encuentra varios ficheros distintos, te los ofrece para que elijas uno.
  5. Si tu fichero m3u tiene otro nombre que no empiece por «Favoritas» puedes especificar el fichero en línea de comandos. Si pones un fichero que no existe, el script lo creará y no iluminará ninguna canción.
  6. Con la lista en pantalla, teclea el número de cualquier canción. Si está iluminada, la desilumina. Si no está iluminada, la ilumina. Cuando termines de seleccionar canciones, teclea «w» para salir (se grabarán todos los cambios en el fichero m3u), o «q» (se cancelarán todos los cambios).
  7. Si en línea de comandos pones la opción «–ayuda» te muestra una pequeña ayudita con lo que hace el programa.
  8. Si en línea de comandos pones la opción «–simulacro» el programa funciona por completo, pero no grabará los cambios aunque así se lo pidas después.

Puedes modificar el script como quieras, o adaptarlos a tus necesidades, tu mismo.

Script mp3edit

Script para editar listas m3u

Normalmente organizo mi biblioteca de mp3 en carpetas por autores, y dentro de ellas subcarpetas por álbumes. De todas formas el script no se fía de la distribución por carpetas, y lee las etiquetas ID3 para deducir los álbumes. Si hay etiquetas Versión 2, las usará. Si no, usará las etiquetas Versión 1.

El script está diseñado para MI distribución de disco duro. Eso significa que casi nunca hay más de tres o cuatro álbumes en una carpeta. Si tienes por ejemplo metidos todos tus mp3 en único directorio, el script quizás no te resulte  a ti tan cómodo porque te saldrá un listado gigantesco en pantalla y tardará un huevo. Tu mismo.

Lo disfrutes.

Mi prompt

El inductor del sistema o prompt es una de las personalizaciones más habituales, especialmente para los que usamos mucho la línea de comandos.

En el prompt se puede meter una gran cantidad de información. De hecho, podemos hacerlo todo lo sencillo o complicado que queramos adaptándolo a nuestra forma de trabajar.

No voy a contarte cómo se personaliza un prompt. Para eso tienes Google donde encontrarás mil sitios que te lo explican con todo el lujo de detalles. Pero sí te voy a poner mi prompt, y el código que lo hace todo posible, por si te aporta alguna idea o te gusta lo bastante para usarlo o modificarlo y adaptarlo para tí.

Prompt
El prompt de mi sistema funcionando normalmente.

Muchas veces pongo trabajos en segundo plano o uso screen directamente. Así que como es lógico mi prompt da información sobre ambas cosas. Por ejemplo, si entramos en screen veríamos el prompt así:

Prompt screen
El prompt funcionando en una sesión screen.

De izquierda a derecha, la información del prompt es la siguiente:

  • Si estamos en screen, aparecerá la leyenda SCR para que el usuario lo sepa.
  • El número de sesiones screen disponibles en esa máquina. Si son cero, no aparece nada.
  • El número de jobs en segundo plano activos.
  • El login y la máquina.
  • El directorio actual.
  • El código de error del último comando. Si hubo error, sale en rojo, si no en verde.
  • Los colores no son al azar. Cada usuario del sistema tiene un color característico distinto a los demás: yo soy cian, el usuario maria es amarillo, root es rojo. Además, cada ordenador tiene tonalidades distintas: la máquina sophie es brillante, la máquina selene es atenuada.

Con este prompt, es virtualmente imposible que se te pasen desapercibidas cosas como el usuario que eres, la máquina en la que estás, si estás en sesión screen o tienes algún screen colgando, si eres root, si hay trabajos en segundo plano… bonito, ¿no?.

El código que lo hace es éste:

function kalimero {
	salida="$?"
	ini="\[\033["
	fin="\]"
	reset="0m"
	negro="0;30m"
	rojo="0;31m"
	verde="0;32m"
	marron="0;33m"
	azul="0;34m"
	purpura="0;35m"
	cyan="0;36m"
	grisclaro="0;37m"
	grisoscuro="1;30m"
	rojoclaro="1;31m"
	verdeclaro="1;32m"
	amarillo="1;33m"
	azulclaro="1;34m"
	purpuraclaro="1;35m"
	cyanclaro="1;36m"
	blanco="1;37m"

	zombies=`screen -ls | grep "tached" | wc -l`
	if [ "$zombies" -eq 0 ]; then
		zombies=""
	fi

	case $UID in # Patron de colores para Sophie
		1000)
			# color=$azulclaro
			color=$cyanclaro
			;;
		1001)
			# color=$marron
			color=$amarillo
			;;
		0)
			# color=$rojo
			color=$rojoclaro
			;;
		*)
			# $color=$grisclaro
			color=$blanco
			;;
	esac

	inigris="\[\033[1;30m\]"
	fingris="\[\033[$color\]"

	if [ "$TERM" = screen ]; then
                screen="SCR$inigris,$fingris"
        else
                screen=""
        fi

	on="$ini$color$fin"
	scr="$ini$verdeclaro${fin}$screen$ini$color$fin"
	off="$ini$reset$fin"

	if [ "$salida" -eq 0 ]; then
		codigo="$ini$verdeclaro$fin$salida$ini$color$fin"
	else
		codigo="$ini$rojoclaro$fin$salida$ini$color$fin"
	fi

	PS1="$on$inigris[$fingris$scr$zombies$inigris:$fingris\j$inigris]$fingris $inigris[$fingris\u@\h $inigris($fingris\W$inigris)$fingris $inigris<$fingris$codigo$inigris>]-> $fingris$off"
}

Este código hay que meterlo en un script bash (yo lo llamo /etc/funciones). Después ese script tienen que llamarlo todos los usuarios desde el fichero .bashrc de su home mediante «source /etc/funciones». El prompt se activará entonces con «PROMPT_COMMAND=kalimero» que puedes meterlo también en .bashrc.

Script para crear un documento djvu

A veces le echo un vistazo a las estadísticas de este sitio Web, para ver qué es lo que busca la gente por este antro de perdición.

Lo cierto es que la inmensa mayoría de los usuarios sois sin duda gente que le ha preguntado a Google cosas sobre el hardware o sobre Linux (y siempre hay unas cuantas preguntas también sobre OS/2). Pero dentro de los linuxeros, hay un porcentaje no pequeño de gente que viene buscando cómo crear ficheros djvu o interesados en la gestión documental en general. Y es un porcentaje lo bastante alto como para llamarme la atención. Y ahí es donde quería yo llegar.

Bueno, la verdad es que también me sorprende ver siempre una cierta cantidad de gente preguntándole a Google por mí, con nombre y apellidos. Supongo que son todo aficionados a la Ciencia Ficción en busca de su autor favorito. Así que un saludo, ¿ein?. ;-)

Vale, pues al grano. El caso es que en su dia dejé un artículo en el que hablaba de la creación de ficheros djvu, pero lo que contaba estaba muy personalizado para mi uso y disfrute y dudo mucho de que le resulte útil a nadie, más que como una aportación general de ideas. Así que, dado que hay mucho interés por vuestra parte, y como soy así de majete, pues os he hecho justo lo que estabais buscando: un programilla script escrito en Perl que escanea un documento y lo convierte enterito a formato djvu multipágina. De nada. Ha sido divertidísimo escribirlo. :-)

Os lo podeis bajar pulsando con el botón derecho del ratón aquí, y para ser sinceros, la verdad es que tampoco inventa la rueda: echa mano de lo que hay disponible en casi todas las distribuciones Linux y se limita a servir de front end, de tal forma que se haga todo de la manera más automática posible y sin complicaciones, sea cual sea el ordenador en que se ejecuta. Obviamente, para que funcione debereis tener instalado SANE y DJVU, pero eso ya lo suponíais, ¿verdad?.

La primera vez que se ejecuta, el script buscará qué escaners hay disponibles. Si teneis más de uno os preguntará cual quereis usar para gestión documental. En cualquier caso, la configuración solo se necesita la primera vez, porque el programa recordará todos los ajustes y no volverá a preguntaros. Aún así, si ejecutais la opción «–ajuste», podeis reconfigurarlo todo de nuevo si os apetece o si cambia vuestro hardware. También teneis una opción «–ayuda» que os mostrará la sintaxis del comando, y algún detalle relevante.

Y alguna que otra virguería que me he permitido el lujo de meter. Por ejemplo, si creais un fichero que ya existe, el escaneo no destruye nada sino que añade nuevas páginas a lo ya existente. O por ejemplo, que utilizará el ADF, en caso de que tengáis un escaner con alimentador automático de hojas (lo que es bastante fundamental para hacer gestión documental en serio).

Y más cosillas que dejo que descubrais por vosotros mismos. El script, por supuesto, ha de considerarse bajo Dominio Público, así que es un regalo que os hago. ;-)

Eso sí, un consejo: quizás tengais la tentación de escanearlo todo en color. No lo hagais. La mejor forma es usar Lineart (blanco y negro puro) porque, en gestión documental, lo que interesa es casi siempre el texto puro, no las fotos ni los gráficos complejos. Muy raramente necesitareis algo más complicado que eso, pero si lo necesitais bastará con escanear en escala de grises. Nunca o casi nunca he usado color. Os lo digo porque en Lineart el escaneo es rapidísimo y los ficheros ocuparán solo un puñado de Kb. Aún así, el programa admite la opción de escanear en grises y en color, todo el documento o también solo algunas páginas concretas, aunque esta opción solo está disponible si escaneais sin ADF (lógicamente: con el ADF os irá tragando todas las páginas una tras otra).

Estoy depurando errores y metiendo algunas opciones más. Consulta la ayuda con «escaneo –ayuda». Versión actualizada a fecha 29/01/2009. Si te lo bajaste antes de esa fecha, vuelve a bajártelo, anda.

Disfrutadlo mucho. ;-)

Me gustaría lanzar scripts para hacer cosas extra con Nautilus

Quizás no sepas que Nautilus tiene una función poco utilizada que se llama «nautilus-scripts». Verás, en tu directorio «home» hay un subdirectorio oculto que se llama «.gnome2/nautilus-scripts». Bien, pues cualquier script bash que metas ahí, aparecerá automáticamente en el menú de contexto que aparece en Nautilus. Si seleccionas unos cuantos ficheros y despliegas el menú con el botón derecho del ratón, puedes ejecutar cualquiera de esos scripts con solo hacer click, y la ejecución se aplicará precisamente a los ficheros que has seleccionado. Muy útil ¿verdad?, pero es un poco peñazo tener que escribir scripts a estas alturas, precisamente tú, que no te gusta teclear comandos. ;-)

Afortunadamente, alguien ha hecho ese trabajo por tí. Vete a la página Nautilus File Manager Scripts y encontrarás una buena colección. Puedes bajártelos todos, si quieres, o solo algunos. Los más interesantes, para mí son:

  1. archiver-unarchiver: Comprime y descomprime en múltiples formatos, los ficheros seleccionados (o todo un directorio).
  2. chmod: Interfaz gráfica para modificar los permisos de los ficheros seleccionados.
  3. copyhome: Copia los ficheros seleccionados a tu $HOME.
  4. filetype: Informa del tipo de fichero.
  5. gedit: Edita el fichero seleccionado con gedit. Puede modificarse fácilmente para que edite con gvim, por ejemplo. ;-)
  6. ggrep: Interfaz gráfico para grep.
  7. gtk2-du: Informa de cuanto ocupan los ficheros seleccionados.
  8. mail_in_evolution: Envia los ficheros seleccionados por correo electrónico, usando Evolution, como archivos adjuntos.
  9. moveup: Mueve los ficheros seleccionados al directorio padre.
  10. open_terminal_here: Abre un gnome-terminal justo en ese directorio. Por si quieres teclear, después de todo. ;)
  11. play_in_xmms: Toma los ficheros seleccionados y los reproduce uno a uno en el XMMS.
  12. print: Imprime los ficheros seleccionados.
  13. rotate_jpg_left: Gira esa foto a la izquierda.
  14. rotate_jpg_right: Gira esa foto a la derecha.
  15. scp_to_host: Abre una conexión segura con otro ordenador y transfiere los ficheros seleccionados.
  16. Unexec: Elimina el bit de ejecutable en los ficheros de ese directorio y todos sus subdirectorios. Pero solo en los ficheros, no toca los propios directorios. Parece una chorrada, pero si tienes un CD grabado en formato Joliet (el que usa Windows) verás que TODOS los ficheros tienen ese bit, lo que es bastante molesto, si tu interfaz es coloreada.
  17. xine: Ejecuta los ficheros seleccionados en Xine, como video digital.

Estos son los que yo encontré más interesantes, pero hay más, muchos más. :-)

Arrancar una segunda sesión gráfica

Este truco también está obsoleto. La mayoría de las grandes distribuciones Linux incluyen por defecto en el menú principal alguna forma de abrir una segunda sesión gráfica. Pero siempre hay excepciones, claro.

Supongamos que tenemos nuestro escritorio favorito abierto y que hay un programa corriendo que no queremos detener (por ejemplo, estamos bajando un fichero muy grande que no nos interesa cortar). Pero alguien (por ejemplo María) necesita el ordenador precisamente ahora. ¿Podemos iniciar un segundo login gráfico para que pueda entrar en su escritorio?.

Hay muchar formas, por ejemplo ésta: Pulsamos Ctrl-Alt-F1, con lo que nos salimos a una consola. Ahora nos logamos y tecleamos el siguiente comando:

Debian GNU/Linux 3.0 claudia tty1

claudia login: lacofi
Password:
Last login: Wed Sep 10 02:53:12 2003 on :0
Linux claudia 2.4.18 #1 Son Apr 14 09:53 CEST 2002 i686 unknown
You have new mail.
[lacofi@claudia lacofi]$ xinit /usr/bin/wmaker -- :1

Pues ya está. Es así de tonto. Ahora arrancará un segundo escritorio gráfico, y podemos cambiar de uno a otro pulsando Ctrl-Alt-F7 o Ctrl-Alt-F8. Cuando terminemos, solo tenemos que salir del escritorio o, si queremos matarlo, salir a la primera consola (Ctrl-Alt-F1) y pulsar Ctrl-C.

Y si quereis rizar el rizo, podeis automatizarlo todo con este script:

-----------Inicio del script "entrada" -------------
#!/bin/sh

if tty | grep "/dev/tty" ; then
   	ejecuta="si"
else
   	ejecuta="no"
fi

if [ "$1" = "" ]; then
   	case "$UID" in
      	501)
         	escritorio="/usr/bin/wmaker"
         	;;
      	502)
         	escritorio="/usr/bin/startkde"
         	;;
      	0)
         	escritorio="/usr/bin/blackbox"
         	;;
      	*)
         	echo "No se quién eres, no deberias usarme. ;-)"
		ejecuta="no"
         	;;
   	esac
else
   	escritorio="$1"
fi
if [ "$ejecuta" = "si" ]; then
	xinit $escritorio -- :1
   else
   	 echo "Esta función solo arrancará desde una consola,"
	 echo "y solo por lacofi, maria o root."
	 echo "Abortado"
   fi
-----------Final del script "entrada" -------------

Ahora, una vez logados en la consola, solo tenemos que ejecutar el script «entrada». Si no especificamos nada más, el script decidirá, según quién lo ejecute, con qué escritorio arranca. Cada usuario, con su escritorio favorito: por ejemplo yo con Window Maker, María con KDE, y root con Blackbox.