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

5 comentarios:

  1. Gracias por todo Pablo. No veas cuanta ayuda desinteresada. Un abrazo.

    ResponderEliminar
  2. después de modificar el archivo sudoers ya no puedo entrar como super usuario. Es decir, estoy completamente atrapado en Ubuntustudio, porque como no tengo permiso de superusuario ahora, tampoco puedo volver a modificar el archivo sudoers

    tampoco puedo modificarlo desde un livecd: dice que solo es un archivo de lectura! (teniendo ya privilegios de root!)
    haz podido alguna vez salir de este problema tan extraño?
    este error me da al digitar 'sudo su'
    Sorry, user Felix is not allowed to execute '/bin/su' as root on ubuntustudio.

    pero lo peor de todo es que tampoco puedo entrar a root con 'su root' ninguna de mis contraseñas corresponde a esta cuenta
    =(

    ResponderEliminar
  3. LA SOLUCIÓN ESTA AQUÌ:

    http://www.psychocats.net/ubuntu/fixsudo

    =) ufff...que susto!

    ResponderEliminar
  4. Gracias desesperado! Vaya susto. Bueno, he revisado la entrada para poner una advertencia. La verdad que es una jugada un tanto peligrosa y tenía que haberlo advertido antes. De todas formas, ¿La modificación que hiciste fue exactamente la misma que yo propuse, o borraste alguna línea sin querer?

    ResponderEliminar
  5. desesperado pero mucho mas tranquilo ahora que tengo el poder nuevamente17 de octubre de 2010, 5:39

    muy buena pregunta Pablo, muy buena pregunta. Me parece que hice exactamente lo que dice tu entrada, pero no estoy seguro. Vi es muy nuevo para mi, de modo que tal vez sin querer borré algo importante. Pero en modo de recuperación pude ser root y desde ahí modifiqué el archivo para dejarlo tal como estaba antes. Muchísimas gracias por tu tiempo y conocimiento

    ResponderEliminar