domingo, 22 de agosto de 2010

Scripts en Jack Control

Aquí tenemos el índice general de entradas de semicorchux

#########################
Notas de revisiones:
Revisión 0: 22 agosto 2010. Publicado.
Revisión 1: 16 octubre 2010. Corregido error en línea marcada con Rev. 1. Añadida advertencia respecto a /etc/sudoers

#########################

Qjackctl tiene una opción muy útil para ejecutar scripts en 4 momentos diferentes alrededor del servidor de audio jack; antes de iniciarlo, después de iniciarlo, antes de detenerlo y después de detenerlo.



Veis que he preparado 4 scripts. Vamos a verlos, pero antes recomiendo lo siguiente:

Evitar la resurrección de pulseaudio

En distribuciones más especializadas, pulseaudio no es el servidor por defecto y algunos recomiendan desinstalarlo del todo en ubuntu. Otros consiguen que aplicaciones no jackificadas que suenan a través de pulseaudio se puedan conectar con clientes de jack por medio del plugin pulse-jack. Yo actualmente prefiero que todo vaya a través de jack cuando estoy con jack y a través de pulseaudio cuando no estoy con jack.

En ubuntu, al menos en karmic, cuando se lanza qjackctl (Jack Control) pulseaudio se suspende (pasuspender). Esto funciona bien en muchos casos pero no es lo ideal y además la coexistencia de pulseaudio y jack es aún problemática en ordenadores con poca memoria RAM. Creo que es mejor matarlo y limpiar algo de basura, como vemos más adelante. El caso es que si matamos pulseaudio, éste se relanza automáticamente a los pocos segundos si no lo impedimos.

Veamos cómo evitar la resurrección de pulseaudio.

En una terminal de usuario en la localización por defecto:

Rev. 1
$ gedit .pulse/client.conf

Copiamos las líneas:

#pulseaudio, no resucites:
autospawn = no

Y guardamos el archivo.

Así podremos matar pulseaudio sin remordimientos y para toda la sesión, sin necesidad de desinstalar nada.

Comprobar que tenemos una versión reciente de patchage

Hacer las conexiones a través de Jack Control puede llegar a aburrir bastante. Mucho mejor un patchbay cómodo e intuitivo como es Patchage. Las versiones en karmic y en lucid están anticuadas. Recomiendo la versión 0.4.4 que se puede conseguir tanto en lucid como en karmic desde el repositorio ppa:philip5/extra. De paso, (re)instalamos a2jmidid, gracias al cual se pueden hacer conexiones entre puertos alsa midi y jack midi, incluido el hardware midi (opción -e).

$ sudo add-apt-repository ppa:philip5/extra
$ sudo apt-get update
$ sudo apt-get install patchage a2jmidid

En esta entrada hablamos de los PPA's y del repositorio de Philip Johnson, tres hurras por él.

Permitir la selección de la frecuencia de la cpu sin necesidad de contraseña

Resulta que si ponemos la frecuencia de la cpu a "ondemand" (comportamiento por defecto) ésta cambia repentinamente según la carga que tenga el ordenador. Esto es motivo de xruns y hay que evitarlo. Cuando trabajamos con jackd, la recomendación es ponerla a "performance" o al menos fijarla en un valor más bajo pero evitar que salte.

Se puede hacer de varias maneras, incluido añadir un applet en el panel de gnome, que nos exige contraseña.

Lo incluyo como propuesta en el script de "antes de iniciar jackd" pero para ello hay que hacer que el sistema nos permita lanzar el comando "sudo cpufreq-set" sin contraseña. (Ojo con esto. Es peligroso. Ver los comentarios de desesperado. Si no estás seguro, mejor déjalo y ya usarás el applet de gnome para cambiar el modo de frecuencia de la CPU).

Para ello, en una terminal lanzamos:

$ sudo visudo

Esto edita el archivo /etc/sudoers. El editor es vi y no se puede editar de otra forma, que yo sepa. Si no estamos familiarizados con vi, lo mejor es darle a la tecla i, y se comportará más o menos como lo que esperamos. Nos movemos con los cursores y al final del archivo escribimos la siguiente línea, cambiando "usuario" por vuestro nombre de usuario:

usuario ALL=NOPASSWD: /usr/bin/cpufreq-set

Ahora damos a escape y guardamos con:

:wq

Los scripts

Son archivos de texto sencillo que coloco en el directorio /home/usuario/bin. Por supuesto, después de crearlos y guardarlos, hay que darles permiso de ejecución. Lo podemos hacer de forma gráfica, con botón derecho, propiedades, pestaña permisos.

Estos son:

/home/pablo/bin/antes-de-iniciar-jackd

#!/bin/bash
#Obligo mis dos cpus a modo performance
#Tu caso puede ser diferente. Mira "cat /proc/cpuinfo |grep processor"
#para ver cuantas CPU's tienes o mejor, mira las posibilidades que
#te da el applet de monitor de frecuencia de CPU
#Borrar estas líneas si no modificamos el archivo /etc/sudoers
sudo cpufreq-set -c 0 -g performance
sudo cpufreq-set -c 1 -g performance
#mato pulseaudio y espero un segundo
pulseaudio -k
sleep 1
#limpio /dev/shm
rm -f /dev/shm/pulse*

Lo de limpiar /dev/shm de la porquería que haya podido dejar pulseaudio es muy importante para ordenadores de poca memoria RAM pues a veces se dan problemas por causa de este bug:

https://bugs.launchpad.net/ubuntu/+source/jack-audio-connection-kit/+bug/491329

/home/pablo/bin/despues-de-iniciar-jackd

#!/bin/bash
#Lanzo a2jmidid con la opción -e para poder conectar mi teclado midi a clientes jack midi
a2jmidid -e &
sleep 1
#Lanzo patchage para hacer las conexiones entre los puertos de clientes de jack
patchage &

/home/pablo/bin/antes-de-detener-jackd

#!/bin/bash
# mato todos los clientes de jack. Ampliar/Modificar lista en caso necesario.
killall mplayer gmplayer vlc amarok ardour-2.8.11 hydrogen qsynth stretchplayer tuneit fst.exe.so guitarix rakarrack patchage a2jmidid

De esta forma, con el botón "Detener" de Jack Control se matan todos los clientes de jack. Al menos, esta es la idea. Ampliar la lista según necesidades. Para ver los nombres de los procesos de los clientes de jack, podemos usar top o htop. No pasa nada porque sobren entradas.

/home/pablo/bin/despues-de-detener-jackd

#!/bin/bash
# mato jackd
killall jackd
sleep 1
# vuelvo a poner las dos cpus a "ondemand"
#Borrar estas líneas si no modificamos /etc/sudoers
sudo cpufreq-set -c 0 -g ondemand
sudo cpufreq-set -c 1 -g ondemand
sleep 1
# arranco pulseaudio
pulseaudio --start


A tener en cuenta:

1) Si en el setup de qjackctl, pestaña "Otras", marcamos "Iniciar el sevidor JACK al cargar qjackctl", nos ahorramos un click.

2) En este caso, hay que evitar a toda costa que si alsa ve más de un interface de audio pueda hacer que jack se equivoque de tarjeta. Para esto, la mejor forma que conozco es empleando la identificación alfanumérica de la tarjeta de audio "buena". Es decir, en lugar de seleccionar el interface hw:0, por ejemplo, mejor escribir en el campo interface "hw:TARJETA" (como se llame, entre corchetes, según la salida de "cat /proc/asound/cards") como propusimos en esta entrada.

Créditos y para saber más

http://www.rncbc.org/drupal/
ubuntustudio forum
linuxmusicians.org

jueves, 19 de agosto de 2010

OT: Cómo personalizar los iconos de los lanzadores en gnome (Dedicado a David y a Noa)

En este sencillo tutorial explico la forma de crear tus propios iconos infantiles para los lanzadores gráficos. Es completamente off-topic, ya perdonaréis. Lo he escrito pensando en mis sobrinos. Aunque no creo que lo lean en poco tiempo, aquí queda, para cuando sean un poco más mayores y, con esperanza, estudien GNU/Linux en clases de iniciación a la informática.

Éste lo usaba hasta hace poco para lanzar a2jmidid (no interesante para no músicos):

Mi super-icono de a2jmidid

Éste para poner la frecuencia de la/s CPU/s en "performance" (interesante para otra entrada)

Tux con una mano señalando arriba

Éste para que vuelva a ajustarse automáticamente según la carga de trabajo, "ondemand":

Tux con una mano en puño

Éste para matar todos los procesos relacionados con jack (también para otra entrada). Es lo que hago cuando no estoy inspirado (la mayoría de las veces) y pienso que mejor me dedico a otra cosa:

Tux decepcionado consigo mismo

Y éste para apagar el ordenador inmediatamente con un click , cuando "ya huele" y me decido a levantarme de la silla. Lo usaré como ejemplo hasta el final.

Tux tapándose la nariz

Si no los tenemos instalados, instalamos Tuxpaint (más los sellos) y GIMP. En la terminal:

$ sudo apt-get install tuxpaint tuxpaint-stamp-defaults gimp

En Tuxpaint seleccionamos un fondo. Yo he elegido el blanco. Ahora vamos a herramientas, sellos, y entre éstos buscamos el que nos guste. O varios a la vez. O algo más sofisticado. Y después pulsamos guardar.

Ahora lanzamos el gimp y abrimos imagen con 'Ctrl+O'. Ahora, con 'Ctrl+H' mostramos los archivos ocultos y buscamos (en nuestro home) ".tuxpaint/saved".

Elegimos la imagen y la abrimos. Después recortamos la parte visible con el bisturí de la caja de herramientas.



Si estamos de acuerdo con el recorte, pulsamos con el ratón en dentro de el mismo y si no, fuera para empezar de nuevo y ajustarlo mejor. Dentro de nuestro home creamos un directorio llamado "iconos". Y desde el menú "Archivo" guardamos una copia, seleccionando el tipo de archivo por extensión (abajo a la izquierda), por ejemplo, PNG en:

/home/usuario/iconos

Ahora, con botón derecho sobre el panel de gnome, añadimos un lanzador de aplicación personalizado y en el campo "comando" pego el texto:

sudo shutdown -h now

Pulsamos el icono y navegamos a /home/usuario/iconos para elegir el nuevo.

Si no funciona, probar con otro comando que no necesite privilegios de administrador. El truco para que funcione un lanzador con sudo está en el archivo /etc/sudoers pero eso no forma parte de este tutorial.