OSD, escribiendo en el escritorio
Llevo un par de tardes mirando qué alternativas hay en GNOME para pintar texto en pantalla, es decir OSD, y he pensado ponerlo aquí en plan receta por si a alguien le resulta de utilidad y sobre todo para tenerlo a mano cuando me haga falta.
Básicamente, he encontrado dos cosas que tienen buena pinta:
XOSD
Paquetes:
- libxosd2
- xosd-bin
Se trata de una librería para X con una buena documentación con ejemplos. Permite hacer cosas muy interesantes aparte de escribir texto:
- Elección de colores, fuentes, sombra
- Escribir en dos líneas
- Pintar barras horizontales (como las típicas de volumen) o sliders
- Se puede hacer scroll
- Tiene una utilidad para consola llamada
osd_cat
con la que puedes escribir en pantalla desde un script shell.
Y lo mejor de todo es que hay bindings para Python que se llaman PyOSD. El paquete Debian se llama python-osd
. Aquí pongo un ejemplo básico de uso de XOSD usando estos bindings:
Con pydoc pyosd
puedes ver algo de documentación sobre el módulo, escueta pero útil. De todos modos, la documentación de la librería C es perfectamente aplicable, salvando las distancias.
gnome-osd
Paquetes:
- gnome-osd
Es un componente GNOME muy inspirado en XOSD y por eso comparten algunas características:
- Color, fuente, sombra
- Se puede usar desde consola, con un programa llamado
gnome-osd-client
Aunque tiene algunas ventajas respecto a XOSD:
- Permite utilizar marcado Pango en el texto.
- Se pueden animar la entrada y salida del texto
- Tiene transparencias simuladas
- Color de fondo
También tiene algunas desventajas: no tiene scroll, varias lineas ni permite “pintar” barras.
El componente está escrito en Python, así que se puede utilizar como un módulo del siguiente modo:
Sin embargo, esta forma de usarlo es bastante precaria y se pierden muchas de sus posibilidades. Lo más adecuado es utilizar el componente mediante su interfaz bonobo o dbus, y eso tiene la ventaja de que el cliente puede estar escrito en varios lenguajes: C, Java, Ruby, C#, Python, etc. Este es un ejemplo para utilizarlo con Bonobo (el sistema de componentes de GNOME) desde un cliente Python:
En /usr/share/python-support/gnome-osd/gnomeosd/client.py
puedes encontrar la forma de hacerlo con DBUS.
El texto que se indica puede ser un XML que tiene algunos atributos adicionales a los de Pango. El formato del mensajes es:
Los atributos posibles son:
- id
- inherit
- animations
- avoid_panels
- drop_shadow
- ellipsize
- enable_sound
- hide_on_hover
- hide_timeout
- osd_fake_translucent_bg
- osd_font
- osd_halignment
- osd_vposition
- sound_sample
Cuando se utiliza este XML hay que invocar un función diferente llamada show-full
. El equivalente al ejemplo anterior sería:
Más información en “man gnome-osd-client
” y en el árbol /apps/gnome-osd
de gconf, accesible con:
Otros
Si conoces otra alternativa que cubra la funcionalidad básica de éstas, por favor, deja un comentario, gracias.