Una ssh no acaba, aunque sus comandos hayan finalizado

Si dentro de una conexión ssh algún comando hace referencia a la salida standard, OpenSSH no cierra la conexión.

Hay que ejecutar todo con >/dev/null

 

http://www.snailbook.com/faq/background-jobs.auto.html

 

Dejar “hueco” en un layout de Grails

Los layouts de grails vienen con tres “huecos” predefinidos, que rellenarán los gsps concretos:

  • Title
  • Head
  • Body

Pero es posible definir “huecos personalizados” de la siguiente forma.

En el layout, definir el “hueco mediante”:

<g:pageProperty name=”page.nombre-del-hueco”/>

 

Y en la gsp, definir el contenido mediante:

    <content tag=”nombre-del-hueco”>
        <h1>Menu</h1>
     </content>

Cómo desactivar el ajuste automático de volumen de micrófono en Skype y GTalk

Haciendo audioconferencia me he encontrado a menudo con que el volumen del micrófono se intenta ajustar automáticamente a un volumen óptimo según el nivel de la señal. Pero cuando hay una pausa en la conversación o se cuela algún ruidito leve, el volumen se sube muchísimo y produce un montón de ruido o satura la línea. Esto hace que esta feature se vuelva inusable, y la quiero desactivar.

Buscando en google he visto que esto no es algo del sistema, sino una función que hacen tanto Skype como Google Talk (uso ambos). Para desactivarlo en Skype basta con ir a Opciones / Dispositivos de sonido y desmarcar la casilla “Permitir que Skype ajuste automáticamente mis niveles de mezclado“.

En Google Talk, en cambio, no hay una opción de interfaz para desactivar esto. Pero se puede hacer editando el siguiente fichero (en Linux):

~/.config/google-googletalkplugin/options

y añadiendo (o modificando) la siguiente línea

audio-flags=1

Si el fichero options no existe, se puede crear nuevo y añadir esa línea dentro.

Fuente de la información: How to stop Google Talk Plugin auto adjust Microphone volume ?!

Hecho esto, ahora para cambiar el nivel del micro habrá que hacerlo a mano desde la herramienta de control de volumen que tenga nuestro sistema.

Instalar PIL en un virtualenv de python, y que importe correctamente las librerías de jpeg, png, etc.

PIL es una librería bastante útil en muchos casos. Se apoya en varias librerías externas para manejar diferentes formatos de imagen:

  • libjpeg para manejar imágenes JPEG (en Ubuntu 11.04 aptitude install libjpeg62 libjpeg62-dev).
  • zlib para manejar imágenes PNG (en Ubuntu 11.04 aptitude install zlib1g zlib1g-dev).
  • etc.

La manera más lógica de instalarlo debería ser instalar primero esas dependencias en el sistema, como explica aquí: http://www.eddiewelker.com/2010/03/31/installing-pil-virtualenv-ubuntu/, y luego instalar PIL con “pip install PIL”. Es necesario instalar la versión “-dev” para que incluya las cabeceras C. En una distribución tipo Debian sería:

$ sudo apt-get install libjpeg62 libjpeg62-dev
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libfreetype6 libfreetype6-dev

El problema es que el instalador tiene un algoritmo bastante cutre para localizar estas librerías en el sistema, y a menudo no las encuentra. Por ejemplo en Arch las encuentra bien, pero en Ubuntu no. Mi problema ahora mismo es instalarlo dentro de un virtualenv con pip install. El comando pip se descarga correctamente la librería y la compila bien, pero al no encontrar esas dependencias, me sale el siguiente mensaje:

--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------

He visto tres soluciones, de más complicada a menos:

    1. Descargar PIL de http://effbot.org/downloads/Imaging-1.1.7.tar.gz e instalarlo manualmente con python setup.py install. Si sigue sin encontrar las librerías, trucar el setup como se explica aquí: http://effbot.org/zone/pil-decoder-jpeg-not-available.htm.(esta no la recomiendo normalmente)
    2. Instalar PIL con pip pero diciéndole que no lo compile, y luego editar el setup y compilarlo a mano, tal como explica aquí: http://ubuntuforums.org/showpost.php?p=10804763&postcount=2.(esta es la más recomendable)
       1/ Find the path where libjpeg.so is installed, with
          dpkg -L libjpeg62
          dpkg -L zlib1g
          dpkg -L libfreetype6
       2/ Call 'pip install -I pil --no-install' to download and unpack the PIL source
          into your build directory;
       3/ Get into your build directory (<virtualenv_path>/build/pil) and edit setup.py;
       4/ Find a line that says 'add_directory(library_dirs, "/usr/lib")' (line 214 here)
       5/ Add the line 'add_directory(library_dirs, "<library_path>")' afterwards;
       6/ Call 'pip install -I pil --no-download' to finish the installation.
    3. Instalar PIL globalmente en el sistema con aptitude install python-imaging (al ser un paquete de Ubuntu ya sí que resuelve todas las dependencias) y luego copiarlo o enlazarlo al virtualenv, como explica éste: http://menudoproblema.es/blog/entries/2011/04/26/soporte-para-jpeg-zlib-y-freetype2-en-pil/.(esta es una opción rápida si no funciona la anterior)
      $ cd /path/to/virtualenv
      $ ln -s /usr/lib/python2.7/dist-packages/PIL/ lib/python2.7/site-packages/

Establecer el idioma para el cliente de test de Django

Si necesitas especificar un idioma para el cliente de test de Django (django.test.client.Client), puedes hacerlo especificandolo en el settings, mediante la variable:

LANGUAGE_CODE=”en-us”

Cortes de Spotify en Ubuntu (instalado por Wine)

A mí también se me bloqueaba Spotify después de un cierto tiempo funcionando con normalidad, hasta que cambié un ajuste sencillo de audio en Wine…

Desde Ubuntu aceder a la configuración de wine y cambiar lo que sigue:

Menu/Aplicaciones/Wine/Configurar Wine:

  • Pestaña “Audio”:  Controlador Alsa (Desactivado) y Conrolador EsounD (Activado.
  • Pestaña “Aplicaciones”: Versión a Imitar:  “Windows XP”
“Aplicar” y listo.

Espero que os sirva, hasta que Spotify se digne a sacar una versión para Linux, y usuarios “No premium”.

Referencias:

http://crashbit.homelinux.com/node/1756

http://www.ubuntu-es.org/node/124169

Openbravo + Apache con un bonito ProxyPass

Pongámonos en situación:

1.- Tenemos un openbravo accesible desde http://ip_interna_y_oculta:8080/openbravo

2.- Queremos que los usuarios accedan a través de http://mi_dominio_estupendo/openbravo

Los que hayáis usado apache en otras ocasiones estaréis tentados de utilizar el típico proxypass:

    ProxyPass /openbravo http://ip_de_la_maquina:8080/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8080/openbravo

Esto a primera vista funciona, el problema es que probando un poco resulta que sigue habiendo llamadas al tomcat que no se traducen internamente de manera correcta. La solución pasa por crear un nuevo conector para tomcat en el fichero /ruta_del_tomcat_de_openbravo/conf/server.xml añadiendo algo de la forma:

<Connector port="8081" proxyPort="80" proxyName="mi_dominio_estupendo" />

o

<Connector port="8081" proxyPort="443" scheme="https" proxyName="mi_dominio_estupendo" />

si se quiere usar https

Y hacemos que el proxypass utilice el nuevo conector del puerto 8081

    ProxyPass /openbravo http://ip_de_la_maquina:8081/openbravo
    ProxyPassReverse /openbravo http://ip_de_la_maquina:8081/openbravo

Reiniciamos el tomcat y el apache y listo! 🙂