Delirios de un Informático

Delirando sobre informática, fotografía, programación, móviles y mucho más desde 2003

Ejecución directa de “comandos stream” via SSH

votar
Archivado en Software con fecha 10/Mar/2010 - 0 comentarios
Ver en Bitacoras.com - Etiquetado con: , ,

Con comandos stream me refiero a comandos que muestran información dinámica por pantalla, como cualquier aplicación de monitorización como htop o apachetop. Estos comandos, al ejecutarlos directamente a través de OpenSSH contra un servidor remoto devuelven el siguiente error:

ssh david@host htop
Error opening terminal: unknown.

Esto ocurre con cualquier comando que no muestre directamente información por pantalla y luego termine. Curioseando en la documentación de OpenSSH me topé con la opción -t:

Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Es decir, que simula un terminal permitiendo mostrar en el terminal local la salida dinámica del comando remoto. El comando a ejecutar quedaría:

ssh -t david@host htop

Es una tontería que resulta de lo más útil, y lo mejor es que no requiere de ningún ajuste en la configuración del servidor SSH.

Notificador para Spotify en Linux sobre Wine

votar
Archivado en Linux con fecha 4/Mar/2010 - 3 comentarios

En mi anterior anotación hablé de cómo definir teclas de acceso globales para Spotify sobre Wine y aprovechando el script he añadido también la posibilidad de mostrar notificaciones al estilo de Rhythmbox o Banshee:

Los comandos son sencillos, y la única modificación es el valor int:x para colocarlo más o menos en la posición en donde está la barra de tareas, ya que no he logrado detectar en qué posición está exactamente el icono de Spotify:

export SPTF=`wine "$HOME/.wine/drive_c/Python26/python.exe" "$HOME/ruta-al-script/spotify.py" curr`
notify-send -i /usr/share/pixmaps/spotify.png -t 3000 "Spotify" "$SPTF" -h int:x:1355 -h int:y:20

El icono para Spotify debe tener un tamaño de 48×48 píxeles, y puede extraerse del propio ejecutable del programa o de internet…

Global hotkeys para Spotify en Linux sobre Wine

votar
Archivado en Linux con fecha 3/Mar/2010 - 14 comentarios

Hace semanas que cada día estoy más enganchado a Spotify. Es un servicio muy bueno pero que como no, se ha olvidado de Linux, por lo que hay que utilizar Wine para ejecutar el cliente oficial. Al ser algo emulado tiene sus problemas y para mi el mayor es que no responda a las teclas multimedia para saltar a la siguiente canción o para pausar la reproducción. Tras trastear un rato y probar un par de plugins que requieren librerías que no funcionan sobre Wine, me topé con pytify, una pequeña librería en Python para Windows que permite controlar la reproducción y obtener los datos de la canción actual.

Para hacerla funcionar se necesita Python for Windows, Python for Windows Extensions y pytify. Este último ha de instalarse con el comando C:\Python26\python.exe setup.py install. El proceso sobre Wine me ha dado más de un problema (sobre todo al instalar las extensiones) por lo que al final he probado a instalarlo y probarlo todo en un Windows virtualizado y luego transferir los archivos a wine. Hay que transferir la carpeta C:\Python26 al directorio $HOME/.wine/drive_c/ y después enlazar dos librerías:

cd $HOME/.wine/drive_c/windows/system32
ln -s ../../Python26/Lib/site-packages/pywin32_system32/pythoncom26.dll .
ln -s ../../Python26/Lib/site-packages/pywin32_system32/pywintypes26.dll .

Con todas las librerías instaladas, ya se puede hacer uso del API de pytify con el siguiente script en Python:

import sys
from pytify import Spotify

spotify = Spotify()

if 'next' in sys.argv:
	spotify.next()
elif 'prev' in sys.argv:
	spotify.previous()
elif 'stop' in sys.argv:
	spotify.stop()
elif 'play' in sys.argv:
	spotify.playpause()
elif 'curr' in sys.argv:
	print spotify.getCurrentArtist() + ' - ' + spotify.getCurrentTrack()

El script debe llamarse del siguiente modo:

wine "$HOME/.wine/drive_c/Python26/python.exe" "$HOME/ruta-al-script/spotify.py" next

Luego sólo queda asignar las combinaciones de teclas para llamar al script, que con xbindkeys puede hacerse interceptando las teclas del siguiente modo (no se detectan con xbindkeys -k):

# Multimedia Play/Pause
"wine '/home/usuario/.wine/drive_c/Python26/python.exe' '/ruta-a-script/spotify.py' play"
	XF86AudioPlay

# Multimedia Stop
"wine '/home/usuario/.wine/drive_c/Python26/python.exe' '/ruta-a-script/spotify.py' stop"
	XF86AudioStop

# Multimedia Next
"wine '/home/usuario/.wine/drive_c/Python26/python.exe' '/ruta-a-script/spotify.py' next"
	XF86AudioNext

# Multimedia Previous
"wine '/home/usuario/.wine/drive_c/Python26/python.exe' '/ruta-a-script/spotify.py' prev"
	XF86AudioPrev

Es un poco enrevesado, pero funciona…

NOTA: es necesario tener instalado el paquete vcrun2008 que se puede instalar fácilmente con winetricks.

Actualizador alternativo para Google Crome

votar
Archivado en Software con fecha 27/Feb/2010 - 0 comentarios

Hace tiempo que hablé de un modo alternativo de instalación para Google Chrome para los que no nos gusta el modo en que Google hace los paquetes para Debian/Ubuntu. El problema es que requiere actualizar a mano descargando el paquete y reemplazando la versión anterior, algo bastante latoso teniendo en cuenta la frecuencia de actualización de Google Ghome. Por eso, he programado este pequeño script para realizar la actualización automática y que también sirve como lanzador:

#!/bin/bash

CHROME_HOME="$HOME/Applications/chrome"
ARCH="i386"

if [ "$1x" == "updatex" ]; then
	cd /tmp
	mkdir google-chrome
	cd google-chrome
	echo "Descargando el paquete..."
	wget -q "http://dl.google.com/linux/direct/google-chrome-unstable_current_$ARCH.deb"
	echo "Extrayendo los archivos del paquete..."
	ar x "google-chrome-unstable_current_$ARCH.deb" data.tar.lzma
	lzma -d data.tar.lzma
	tar xf data.tar
	echo "Reemplazando la version actual..."
	cd opt/google
	mv "$CHROME_HOME/plugins" chrome
	rm -rf $CHROME_HOME
	mv chrome $CHROME_HOME
	echo "Eliminando archivos temporales..."
	cd /tmp
	rm -rf google-chrome
	echo "Google Chrome actualizado..."
else
	if [ "$1x" == "x" ]; then
		$CHROME_HOME/google-chrome --enable-plugins --homepage
	else
		$CHROME_HOME/google-chrome --enable-plugins "$@"
	fi
fi

Para actualizar, basta con ejecutar ./chrome.sh update y esperar :)

Script para mostrar y ocultar Getting Things GNOME!

votar
Archivado en Gnome con fecha 23/Feb/2010 - 0 comentarios
Ver en Bitacoras.com - Etiquetado con: , , ,

Ayer hablé de Getting Things GNOME!, que está muy bien pero tiene un pequeño inconveniente: la extensión para integrarlo en la bandeja del sistema no hace que al pulsar el botón de cerrar la ventana, ésta se oculte en vez de cerrarse ni tampoco permite asignar teclas de acceso rápido para mostrar/ocultar. Como tiene una interfaz dbus es sencillo programar un script para que lo haga, y he optado por Python con el único requisto de python-dbus:

#!/usr/bin/env python

import os
import dbus

bus = dbus.SessionBus()
obj = bus.get_object("org.GTG", "/org/GTG")
gtg = dbus.Interface(obj, "org.GTG")

cmd = 'wmctrl -l -p | grep -c "Getting Things"'
if float(os.popen(cmd).read()) > 0:
	gtg.hide_task_browser()
else:
	gtg.show_task_browser()

Luego basta con asignar este comando a una combinación de teclas :)

elementary Project en Debian

votar
Archivado en Gnome con fecha 23/Feb/2010 - 0 comentarios

Parece mentira que haya tardado tanto en dar con elementary Project, un proyecto bastante conocido que intenta darle un estilo Mac a Gnome con un tema para Metacity, un tema de iconos y un tema para el login con GDM. Todo es descargable desde la página de descargas del proyecto, pero necesita un par de ajustes para funcionar correctamente en Debian (y supongo que otras distros) ya que los archivos descargables son un poco peculiares.

El tema para Metacity:

sudo apt-get install gtk2-engines-aurora gtk2-engines-murrine
wget http://www.deviantart.com/download/83104033/Elementary_GTK_by_DanRabbit.zip
unzip Elementary_GTK_by_DanRabbit.zip
tar xvf eGTK_by_DanRabbit
sudo mv eGTK /usr/share/themes/elementary

El tema de iconos:

wget http://www.deviantart.com/download/65437279/elementary_Icons_by_DanRabbit.zip
unzip elementary_Icons_by_DanRabbit.zip
cd elementary_2.3
tar xzvf elementary.tar.gz
sudo mv elementary /usr/share/icons
tar xzvf elementary-monochrome.tar.gz
sudo mv elementary-monochrome /usr/share/icons

Por último, el tema para GDM basta con importarlo desde el gestor de temas de GDM, ya que tiene el formato adecuado.

Getting Things GNOME!, un excelente organizador GTD

votar
Archivado en Gnome con fecha 22/Feb/2010 - 1 comentario
Ver en Bitacoras.com - Etiquetado con: , , ,

Hacía tiempo que buscaba un gestor de tareas sencillo pero con lo mínimo para no desesperarme. Como no había nada que me convenciera y tenía que conformarme con Tomboy. Hoy por casualidad me topé con Getting things done with Linux to-do list programs en ars tecnica que habla de Getting Things GNOME!, un programa sencillo, completo y extensible que tiene bastante parecido con Tomboy pero bastante mejorado. Permite crear tareas y subtareas con fecha de inicio, fecha de fin, prioridad, etiquetas. Además, tiene interesantes plugins para integrarse con Bugzilla e incluso con Remember The Milk.

Veremos qué tal va en el uso diario y a fondo, pero por ahora ya digo adiós a Tomboy :)

Detector de idioma con PHP

votar
Archivado en PHP con fecha 21/Feb/2010 - 0 comentarios

Ya lo comenté via Twitter hace unos días, pero creo que merece un post entero porque me ha resultado más que útil. Es más sencillo de lo que pueda parecer, basta con instalar el paquete PEAR::Text_LanguageDetect (bien con instalación normal, bien descargando todo lo necesario) y un poco de código:

function get_language($text)
	{
	$lang = false;

	require_once 'Text/LanguageDetect.php';
	$l = new Text_LanguageDetect();

	$result = $l->detect($text, 3);
	if(PEAR::isError($result) == false && is_array($result))
		$lang = key($result);

	return $lang;
	}

El detector devuelve un vector tipo idioma => aproximacion donde idioma es el nombre del idioma (en inglés), aproximacion es un flotante que indica la probabilidad y el primer elemento será el mas aproximado. Por ejemplo:

Array
(
    [german] => 0.407037037037
    [dutch] => 0.288065843621
    [english] => 0.283333333333
    [danish] => 0.234526748971
)

¿Y qué utilidad puede tener esto?. Por ejemplo, para detectar el idioma de comentarios o correos electrónicos y poder filtrarlos (una interesante medida antispam).

Hacía tiempo que buscaba estoy y hoy lo he encontrado en Linwind (gracias a las alertas de Bitacoras.com). Se trata de Keryx, un programa que permite descargarse a una unidad de almacenamiento externo todos los paquetes necesarios para luego instalarlos en un equipo sin conexion. Es ideal para cuando se tiene un portátil sin los paquetes que permiten conectarse via wifi…

19/Feb/2010 | 0 comentarios | En Bitacoras.com

Cómo limpiar el menú “Abrir con” de Gnome

votar
Archivado en Gnome con fecha 17/Feb/2010 - 0 comentarios

Al instalar aplicaciones, especialmente las que tienen instalador propio y no se descargan de los repositorios (software de Google, Adobe y casi todo lo instalado con Wine), se van creando entradas en la lista de Abrir con de Gnome que luego no se borran al desinstalarlos, lo que al cabo del tiempo puede ser molesto ya que la mitad de las aplicaciones en la lista ya no están instaladas.

Las especificaciones de FreeDesktop indican de guarda la lista de aplicaciones en /usr/share/applications y ~/.local/share/applications, donde se verán archivos .desktop que son los que generan esa lista. Para eliminar elementos, será necesario eliminar estos archivos, así como editar los archivos mimeapps.list y mimeinfo.cache eliminando todas las entradas no deseadas. En caso de eliminar elementos de /usr/share/applications será necesario ejecutar sudo update-desktop-database, ya que afecta no sólo al usuario actual.

Delirios de un Informático :: Gestionado con WordPress :: Alojado en Bitacoras.com :: Licenciado bajo Creative Commons