Archivo

Entradas Etiquetadas ‘liviano’

Ver clima de nuestra ciudad II: usando conky

Sábado, 13 de Febrero de 2010

En la anterior entrada, vimos como añadir el tiempo de nuestra ciudad, al menú de openbox: http://behindopendoors.netne.net/blog/linux/ver-el-clima-de-nuestra-ciudad-en-openbox.

Ahora, vamos a visualizarlo, usando el mismo script pero mediante conky, por lo que lo podremos usar en cualquier distro y entorno de escritorio, solo tendremos que instalar previamente conky (lo encontraréis en repositorios).

Lo primero, tendremos que usar, el script escrito en python, que modificado un poco (copiad el texto, y pegarlo en un archivo). Yo lo guardo en la ruta ~/.config/openbox/scripts/gweather-conky2.py, pero podéis ponerlo donde queráis.

#!/usr/bin/python -o
# -*- coding: utf-8 -*-

from  urllib import urlopen, quote
from xml.etree.cElementTree import parse
from  datetime import datetime, timedelta
import os
from os.path import  join
from sys import argv
try:
import cPickle as pickle
except  ImportError:
import pickle

TRANSLATED_TEXT = {
'en': {
'current': 'Current conditions',
'weather': 'Weather',
'temp': 'Temperature',
'humidity': 'Humidity',
'wind': 'Wind',
'forecast': 'Forecast',
'mintemp': 'Minimun Temperature',
'maxtemp': 'Maximun Temperature'
},
'es': {
'current': u'Actualmente',
'weather': u'Tiempo',
'temp': u'Temperatura',
'humidity': u'Humedad',
'wind': u'Viento',
'forecast': u'Previsión',
'mintemp': u'Temperatura Mínima',
'maxtemp': u'Temperatura  Máxima'
},
'fr': {
'current': u'Actuel',
'weather': u'Météo',
'temp': u'Température',
'humidity': u'Humidité',
'wind': u'Vent',
'forecast': u'Prévision',
'mintemp': u'Température minimale',
'maxtemp': u'Température maximale'
},
'de': {
'current': u'Aktuell',
'weather': u'Wetter',
'temp': u'Temperatur',
'humidity': u'Luftfeuchtigkeit',
'wind': u'Wind',
'forecast': u'Prognostizieren',
'mintemp': u'Minimale Temperatur',
'maxtemp': u'Höchste  Temperatur'
}
}

if len(argv) != 3:
raise  Exception('Usage: gweather.py city language.')
else:
city =  argv[1]
lang = argv[2]

CACHE_HOURS = 1

WEATHER_URL  = 'http://www.google.com/ig/api?weather=%s&hl=%s&oe=UTF-8'

def  get_weather(city, lang):
url = WEATHER_URL % (quote(city),  quote(lang))
data = parse(urlopen(url))

forecasts =  []
for forecast in data.findall('weather/forecast_conditions'):
forecasts.append(
dict([(element.tag, element.get("data"))  for element in forecast.getchildren()]))

return {
'forecast_information': dict([(element.tag, element.get("data"))  for element in  data.find('weather/forecast_information').getchildren()]),
'current_conditions': dict([(element.tag, element.get("data")) for  element in data.find('weather/current_conditions').getchildren()]),
'forecasts': forecasts
}

def  get_openbox_pipe_menu(lang, forecast_information, current_conditions,  forecasts):
if lang == 'en-US':
lang = 'en'

tt = TRANSLATED_TEXT[lang]

temp_var, temp_unit =  ("temp_c", u"\u00b0C") if forecast_information['unit_system'] == "SI"  else ("temp_f", "F")

output = ''

output += '%s\n' % (current_conditions['condition'])
output += '%s: %s %s\n' % (tt['temp'], current_conditions[temp_var], temp_unit)
output += '%s\n' % (current_conditions['humidity'])
output += '%s' % (current_conditions['wind_condition'])return output.encode('utf-8')

cache_file =  join(os.getenv("HOME"), '.gweather-conky2.cache')

try:
f =  open(cache_file,'rb')
cache = pickle.load(f)
f.close()
except  IOError:
cache = None

if cache == None or (city, lang)  not in cache or (
cache[(city, lang)]['date'] +  timedelta(hours=CACHE_HOURS) < datetime.utcnow()):
# The cache  is outdated
weather = get_weather(city, lang)
ob_pipe_menu = get_openbox_pipe_menu(lang, **weather)
print  ob_pipe_menu
if cache == None:
cache = dict()
cache[(city, lang)] = {'date': datetime.utcnow(), 'ob_pipe_menu':  ob_pipe_menu}

#Save the data in the cache
try:
f = open(cache_file, 'wb')
cache = pickle.dump(cache,  f, -1)
f.close()
except IOError:
raise
else:
print cache[(city, lang)]['ob_pipe_menu']

Bien, ahora tenemos que crear el archivo de configuración de conky:

# set to yes if you want Conky to be forked in the background
background yes

# Use Xft?
use_xft yes
xftfont Dejavu Sans:pixelsize=11

# Update interval in seconds
update_interval 1

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window  yes
own_window_transparent yes
own_window_type normal
own_window_hints undecorate,below,sticky,skip_taskbar,skip_pager

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Minimum size of text area
minimum_size 160
maximum_width 200

# Draw shades?
draw_shades no

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders yes

# Stippled borders?
stippled_borders 0

# border margins
border_margin 3

# border width
border_width 0

# Default colors and also border colors
default_color 404040
#default_shade_color white
#default_outline_color black
own_window_colour 3c3c3c

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 15
gap_y 70

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase yes

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer right
TEXT
${color #000000}${execi 12 python ~/.config/openbox/scripts/gweather-conky2.py bilbao es;}

Este archivo, lo guardais con el nombre de .conkyrc, y lo ponéis en vuestra home. Si queréis, podéis usar más de un conky al mismo tiempo (este solo os dará el tiempo, a no ser que le añadáis código).

Tenéis que prestar especial atención a la última linea del conky: ${color #000000}${execi 12 python ~/.config/openbox/scripts/gweather-conky2.py bilbao es;} . Podéis cambiar el color, variando los números, la frecuencia con la que se ejecuta el script (12 segundos por defecto, aunque el script de python no se refresca con tanta frecuencia), la ruta donde dejasteis el script (editarla correctamente) y por último, el nombre de vuestra ciudad (si tiene espacios, poner un guión, por ejemplo: buenos-aires), y por el último, poned es, que es el idioma, no el país de vuestra ciudad.

Si todo ha ido bien, lograréis el siguiente efecto:

Se puede modificar el script de python, para que nos muestre otros datos, o los ordene de otra manera, si sabéis un poco de programación básica, no os será difícil. También podéis añadir datos de temperatura, voltaje y velocidad de los ventiladores: http://behindopendoors.netne.net/blog/linux/lm-sensors-monitoriza-la-temperatura-velocidad-de-los-ventiladores-y-sus-voltajes

Tepes General , , , , , , ,

Ver el clima de nuestra ciudad I: Menú de Openbox

Viernes, 12 de Febrero de 2010

Puede que algo tan sencillo como ver el clima de nuestra ciudad, en nuestro entorno de escritorio, se complique. Seguramente habrá un montón de opciones, yo os voy a ofrecer una liviana, fácil de configurar, y que a mí me parece elegante. Una imagen vale más que mil palabras, así que…

Para incluir el clima en el menú de openbox, usé un script escrito en python, que posteó un usuario en el foro de Arch: http://bbs.archlinux.org/viewtopic.php?id=43432.

El script:

#!/usr/bin/python -o
# -*- coding: utf-8 -*-

from urllib import urlopen, quote
from xml.etree.cElementTree import parse
from datetime import datetime, timedelta
import os
from os.path import join
from sys import argv
try:
import cPickle as pickle
except ImportError:
import pickle

TRANSLATED_TEXT = {
'en': {
'current': 'Current conditions',
'weather': 'Weather',
'temp': 'Temperature',
'humidity': 'Humidity',
'wind': 'Wind',
'forecast': 'Forecast',
'mintemp': 'Minimun Temperature',
'maxtemp': 'Maximun Temperature'
},
'es': {
'current': u'Actualmente',
'weather': u'Tiempo',
'temp': u'Temperatura',
'humidity': u'Humedad',
'wind': u'Viento',
'forecast': u'Previsión',
'mintemp': u'Temperatura Mínima',
'maxtemp': u'Temperatura Máxima'
},
'fr': {
'current': u'Actuel',
'weather': u'Météo',
'temp': u'Température',
'humidity': u'Humidité',
'wind': u'Vent',
'forecast': u'Prévision',
'mintemp': u'Température minimale',
'maxtemp': u'Température maximale'
},
'de': {
'current': u'Aktuell',
'weather': u'Wetter',
'temp': u'Temperatur',
'humidity': u'Luftfeuchtigkeit',
'wind': u'Wind',
'forecast': u'Prognostizieren',
'mintemp': u'Minimale Temperatur',
'maxtemp': u'Höchste Temperatur'
}
}

if len(argv) != 3:
raise Exception('Usage: gweather.py city language.')
else:
city = argv[1]
lang = argv[2]

CACHE_HOURS = 1

WEATHER_URL = 'http://www.google.com/ig/api?weather=%s&hl=%s&oe=UTF-8'

def get_weather(city, lang):
url = WEATHER_URL % (quote(city), quote(lang))
data = parse(urlopen(url))

forecasts = []
for forecast in data.findall('weather/forecast_conditions'):
forecasts.append(
dict([(element.tag, element.get("data")) for element in forecast.getchildren()]))

return {
'forecast_information': dict([(element.tag, element.get("data")) for element in data.find('weather/forecast_information').getchildren()]),
'current_conditions': dict([(element.tag, element.get("data")) for element in data.find('weather/current_conditions').getchildren()]),
'forecasts': forecasts
}

def get_openbox_pipe_menu(lang, forecast_information, current_conditions, forecasts):
if lang == 'en-US':
lang = 'en'

tt = TRANSLATED_TEXT[lang]

temp_var, temp_unit = ("temp_c", u"\u00b0C") if forecast_information['unit_system'] == "SI" else ("temp_f", "F")

output = ''
output += '\n' % (weather['forecast_information']['city'],forecast_information['forecast_date'])
output += '\n' % tt['current']
output += '' % (tt['weather'], current_conditions['condition'])
output += '' % (tt['temp'], current_conditions[temp_var], temp_unit)
output += '' % (tt['humidity'], current_conditions['humidity'])
output += '' % (tt['wind'], current_conditions['wind_condition'])
for forecast in forecasts:
output += '\n' % (tt['forecast'], forecast['day_of_week'])
output += '' % (tt['weather'], forecast['condition'])
output += '' % ( tt['mintemp'], forecast['low'], temp_unit )
output += '' % ( tt['maxtemp'], forecast['high'], temp_unit )
output += '\n'

return output.encode('utf-8')

cache_file = join(os.getenv("HOME"), '.gweather.cache')

try:
f = open(cache_file,'rb')
cache = pickle.load(f)
f.close()
except IOError:
cache = None

if cache == None or (city, lang) not in cache or (
cache[(city, lang)]['date'] + timedelta(hours=CACHE_HOURS) < datetime.utcnow()):
# The cache is outdated
weather = get_weather(city, lang)
ob_pipe_menu = get_openbox_pipe_menu(lang, **weather)
print ob_pipe_menu
if cache == None:
cache = dict()
cache[(city, lang)] = {'date': datetime.utcnow(), 'ob_pipe_menu': ob_pipe_menu}

#Save the data in the cache
try:
f = open(cache_file, 'wb')
cache = pickle.dump(cache, f, -1)
f.close()
except IOError:
raise
else:
print cache[(city, lang)]['ob_pipe_menu']

Lo guardamos en el directorio que queramos, yo lo dejé en ~/.config/openbox/scripts/gweather.py, pero da lo mismo. Para ejecutarlo:

python ~/.config/openbox/scripts/gweather.py YOURCITY IDIOMA

El idioma, podemos escoger entre es, de, fr, o de. Y el nombre de nuestra ciudad en minúsculas, si tiene espacios lo pondremos con un guión de la siguiente forma: buenos-aires.

Ahora vamos a insertar el script en el menú de openbox, de la siguiente manera, editando el archivo ~/.config/openbox/menu.xml:
añadimos la siguiente linea, donde queramos que aparezca en el menú (a nuestro gusto).

<menu id="pipe-weather" label="Weather" execute="python ~/.config/openbox/scripts/gweather.py bilbao es" />

Y ya está todo listo. Este script lo podemos usar con otras aplicaciones, modificando el output editando el codigo python, o con pipes, el único limite es nuestra imaginación (y los conocimientos de programación). En el proximo artículo, explicaré como usarlo conjuntamente con el monitor del sistema conky.

P.D: Agradecer al autor, o autores que se han currado el script, y espero que funcione por mucho tiempo y no cambien la web :) .

Tepes Archlinux, Linux , , , , , ,

Me paso a Openbox

Miércoles, 27 de Enero de 2010

Esto, no pretende ser un tutorial sobre openbox, solamente escribo una especie de notas para recordarme los programas que uso en openbox para futuras instalaciones (es lo que tiene tener un poco memoria pez).

Como veis, hace unos días, dí el salto a openbox, y deje atrás gnome. La idea era ganar algo de rendimiento (sobretodo en el netbook), aunque también, cambiar un poco la imágen de Arch, ya que llevo desde que empecé en linux usando Gnome.

Openbox me ha parecido la mejor opción después de probar varios entornos, gestores de ventanas etc. Es lígero, muy configurable y flexible, y no pierde funcionalidades frente a Gnome, siempre que se configure correctamente. Además, me parece muy estético. Bueno sin más dilación, os dejo un link, con una guía muy completa, de la mano de Xabz: http://archxz.wordpress.com/2009/09/12/guia-openbox/ . Con alguna manita extra de google, obtendremos información de todo lo que queramos. También tuve un problema con los pendrives, que lo relaté en este otro post: http://behindopendoors.netne.net/blog/linux/montar-pendrives-en-openbox.

Aplicaciones de configuración:
obconf (para configurar diversas opciones de openbox)
obkey-git(configura las convinaciones de teclas, "shortcuts")
openbox-themes (paquetes con temas de openbox)
lxappearance (configura los temas GTK)
obmenu (una forma sencilla de editar nuestro menú de openbox)
lx-randr (configura la resolución de pantalla)

Accesorios:
oblogout (pantalla para gestionar el apagado, reinicio...)
fb-panel (un panel ligero y configurable)

Otros:
sakura (terminal)
evince (visor de documentos, pdf)
scrot (capturador de pantalla, screenshots)
galcultator (calculadora)
gpicview (visor de imágenes
xscreensaver (salvapantallas)
slim (gestor de entrada)
pcmanfm (navegador de archivos)
xfburn (grabador de CD, DVD)
moc (reproductor de música muy ligero, para la terminal)
xmms2 (reproductor de música ligero)
midori (navegador web ligero)
notify-osd (muestra notificaciones con un aspecto elegante)

Estos son todos los programas de nueva adquisición. Todos los he elegido buscando que sean ligeros, pero sin perder usabilidad. De todas maneras, sigo usando otros programas, como emesene, deluge, vlc, firefox, amarok… que no son precisamente los más ligeros.

Actualización:

Añado unos links muy interesantes de la mano de Ramón:

http://www.glatelier.org/2010/01/escritorio-kiss/

http://urukrama.wordpress.com/openbox-guide/ (en inglés)

http://skinwalker.wordpress.com/ (en inglés, más que nada parte estética)

Tepes Archlinux, Linux , ,

Juntar varias páginas pdf en un solo archivo: pdftk

Sábado, 9 de Enero de 2010

He necesitado juntar unos cuantos archivos pdf, en uno solo, y la verdad es que nunca había indagado en el tema. Me suena que con la versión completa del Acrobat Reader (creo que se llama Acrobat Creator), se puede hacer esto y muchas más virguerías, pero no hace falta usar un programa privativo, y para otro sistema operativo (windows) para algo tan sencillo.

Entonces encontre pdftk en este blog: http://draxus.org/weblog/2007/06/14/juntar-o-separar-pdfs-en-gnulinux/. Un programa sencillo, que funciona por consola (para los que se asusten con los comandos, hay una insterface gráfica). Está en los repositorios de la mayoría de los distros (entre ellos Arch y Ubuntu), aunque para instalarlo en Arch, necesitaremos toquetear un par de cosas que explicaré en el próximo post: http://www.bizkaiaporelmilenio.com/es/prueba/66/democracia-con-todas-las-letras.html

Una vez instalado, vamos  a ver los comandos básicos. Para más opciones, consulad el man.

Para juntar varios archivos en uno, escribimos en consola:

pdftk archivo1.pdf archivo2.pdf archivo3.pdf cat output resultado.pdf

Los juntará en el orden que hayamos listado los archivos, y lo que viene después de catoutput, es el nombre del archivo que nos va a quedar.

Para separar de un archivo, todas sus hojas en diferentes archivos pdf, introducimos:

pdftk archivo.pdf burst

Si en cambio queremos extraer unas hojas específicas, y juntarlas en un solo pdf, le indicamos cuales queremos:

pdftk archivo.pdf cat 3-7 12-end output resultado.pdf

Si tenéis un buen dominio de la terminal, podréis hacer cosas muy comodas, por ejemplo:

pdftk $(ls -A) cat output resultado.pdf

Con este comando, le estamos indicando al programa, que coja el listado de documentos del comando “ls -A”, que listará todos los documentos que haya en el directorio en el que nos encontramos.  De esta manera, juntaremos en un archivo llamado resultado.pdf, todo lo que tengamos en el directorio. O si tenemos más cosas en el directorio, y queremos filtrar solo los archivos con estensión pdf, escribiriamos $(ls -A | grep .pdf)

Eso es todo por hoy. Si queréis usar la interface gráfica, el paquete se llama guipdftk, pero no la he probado. Me parece que está bien como está :) . Por cierto, también está disponible para Windows.

Tepes Archlinux, Linux , , , , , , ,

Lm-sensors, monitoriza la temperatura, velocidad de los ventiladores y sus voltajes

Lunes, 8 de Junio de 2009

Lm-sensors es un programa sencillo, liviano y eficaz, que nos mostrará mediante la consola, las temperaturas, velocidad de los ventiladores, así como los diferentes voltajes, todo dependiendo de los sensores internos que tenga nuestro ordenador. Muy útil si queremos echarle un ojo a la temperatura, y saber que tal anda la refrigeración, sobretodo ahora que se acerca el verano.

Como siempre, voy a explicar como lo instalé en Archlinux, pero en las demás distribuciones es lo mismo, solo cambiarían los comandos para descargar los paquetes.

Bien, abrimos una terminal y tecleamos:

yaourt -S lm_sensors

Una vez instalado, configuraremos los sensores con el siguiente comando:

sudo sensors-detect

Y ya solo nos queda arrancar el demonio:

sudo /etc/rc.d/sensors start

Para ver la información, ejecutaremos el comando sensors. A mí, me dice lo siguiente:

lm85-i2c-0-2e
Adapter: SMBus I801 adapter at c800
in0:         +1.48 V  (min =  +0.00 V, max =  +3.32 V)
Vcore:       +1.35 V  (min =  +0.00 V, max =  +2.99 V)
+3.3V:       +3.32 V  (min =  +2.97 V, max =  +3.63 V)
+5V:         +5.13 V  (min =  +4.50 V, max =  +5.50 V)
+12V:       +11.94 V  (min =  +0.00 V, max = +15.94 V)
fan1:       1807 RPM  (min =    0 RPM)
fan2:          0 RPM  (min =    0 RPM)
fan3:          0 RPM  (min =    0 RPM)
fan4:        631 RPM  (min =    0 RPM)
temp1:       +50.0°C  (low  = -127.0°C, high = +127.0°C)
M/B Temp:    +45.0°C  (low  = -127.0°C, high = +127.0°C)
temp3:       +52.0°C  (low  = -127.0°C, high = +127.0°C)
cpu0_vid:   +1.088 V

En mi caso no sale muy claro, pero la lectura temp1 y fan1 corresponden a la temperatura y velocidad del CPU, y el fan4 es el ventilador de la caja.

Si lo deseamos, podemos hacer que toda está información aparezca en nuestro conky, para no perderlo de vista. Debemos editar el archivo .conkyrc, que se encuentra en nuestra home. Por ejemplo, para mostrar la temperatura de la CPU, en mi caso sería de la siguiente manera:

${execi 12 sensors | grep temp1 | cut -c15-16 ;}°C

execi 12, ejecutará el comando sensors cada 12 segundos. grep, filtrará la salida, y se quedará solo con la linea que contenga temp1 (la temperatura de mi CPU, debéis cambiarlo por el nombre de vuestra variable), y luego, esa linea pasará por el comando cut que solo mostrará la columna 15 y 16, que es justo donde está el valor de la temperatura.

Para mostrar otro valor, por ejemplo las revoluciones del ventilador del CPU:

${execi 12 sensors | grep fan1 | cut -c13-16 ;}

Tendréis que adaptar el comando grep y cut, según lo que queráis mostrar. Y bueno, así queda en mi conky (muy minimalista):

Si se calienta mucho el CPU, o alguna otra parte del ordenador, conviene quitar el polvo que acumulan los ventiladores. Con el ordenador apagado, usando una brocha o una aspiradora queda bastante limpito. Si no, podéis desarmar el ventilador o disipador que queráis limpiar. Puede parecer una tontería, pero se nota una gran diferencia en las temperaturas. Haced la prueba, y comprobarlo vosotros mismos.
También puede interesaros el siguiente artículo: http://behindopendoors.netne.net/blog/linux/cpufrequtils-escalado-para-la-frecuencia-de-tu-cpu

Tepes Archlinux, Linux , , , , , , , ,

Conky, un monitor del sistema liviano, altamente configurable

Martes, 14 de Abril de 2009

Conky, es un programa muy personalizable, que ocupa muy pocos recursos. Por ello, es perfecto para máquinas viejas, o la gente que quiera decorar un poco el escritorio teniendo siempre a mano los datos de nuestro sistema. Para instalarlo, vamos a nuestro gestor de paquetes (en mi caso pacman):

yaourt -S conky

Una vez instalado, toca configurarlo. Para ello, es necesario editar el archivo de configuración (.conkyrc), que se encuentra en nuestra home. Desde ese archivo, podremos cambiar todo lo que se nos ocurra. Al principio, lo mejor es coger un archivo (plantilla), e ir cambiando algunas lineas poco a poco, hasta dejarlo a nuestro gusto.

Tepes Linux , ,