Categoría Archlinux

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 , ,

Problema/solución dhcpcd 5.1.4 no encuentra IP

Miércoles, 20 de Enero de 2010

Después de actualizar mi sistema en Arch, al arrancar el equipo, no me encontraba ninguna IP. Inicie dhcpcd desde una terminal, y me dice lo siguiente:

sudo dhcpcd
dhcpcd: version 5.1.4 starting
dhcpcd: eth0: broadcasting for a lease
dhcpcd: timed out

Entoncés fuí al foro de Arch, y N0dix, dió con la solución. En este post (en inglés) hablan sobre ello: http://bbs.archlinux.org/viewtopic.php?pid=688104
Para solucionarlo, solo hay que borrar el archivo /var/lib/dhcpcd/dhcpcd-eth0.lease. Nosotros vamos a renombrarlo por si acaso:

sudo mv /var/lib/dhcpcd/dhcpcd-eth0.lease /var/lib/dhcpcd/dhcpcd-eth0.lease.backup

Fijaros en el nombre de la interface que vais a editar, si usáis otra para internet, editad la correspondiente (cambiad et0, por wlan0, eth1… o lo que corresponda). Y ya está, solo nos queda volver a iniciar dhcpcd:

sudo dhcpcd
dhcpcd: version 5.1.4 starting
dhcpcd: eth0: rebinding lease of XX:XXX:XXX:X
dhcpcd: eth0: acknowledged XX:XXX:XXX:X from XX:XXX:XXX:X
dhcpcd: eth0: checking for XX:XXX:XXX:X
dhcpcd: eth0: leased XX:XXX:XXX:X for 86400 seconds
dhcpcd: forking to background

Eso es todo. Una rápida solución, a un problema que pintaba muy feo.

Tepes Archlinux, Linux , , , ,

Montar pendrives en openbox

Miércoles, 20 de Enero de 2010

Voy a comentar brevemente, un problemilla que he tenido en mi salto a openbox, y como he logrado solucionarlo (gracias a Teh, del foro de Arch). El problema, era que cuando quería montar un pendrive desde el explorador de archivos (sea cual fuera), no funcionaba con un doble click de toda la vida. Me tiraba el siguiente error:

Rejected send message, 1 matched rules; type="method_call", sender=":1.7"
 (uid=1000 pid=3278 comm="pcmanfm) interface="org.freedesktop.Hal.Device.
Volume" member="Mount" error name="(unset)" requested_reply=0
destination="org.freedesktop.Hal" (uid=0 pid=825 comm="/usr/sbin/hald))

Parece ser que es problema de Hal, y la solución más sencilla, me ha parecido añadir un par de lineas al fstab:

sudo nano /etc/fstab

 /dev/sdb1 /media/pen auto   rw,users,noauto 0 0
 /dev/sdc1 /media/pen2 auto  rw,users,noauto 0 0

Añado dos lineas, por si conectamos dos pendrives a la vez, el primero lo reconocerá como sdb1, y el segundo como sdc1.

También tenemos que crear los dos puntos de montaje:

sudo mkdir /media/pen1 /media/pen2

Los puntos de montajes, los podéis cambiar, así como las opciones del fstab. Es solo para que os hagáis una idea. De esta manera, ya podremos montar los pendrives con un doble click.

Tepes Archlinux, Linux , , , , , ,

Crear un “pendrive-live” de Archlinux

Lunes, 18 de Enero de 2010

Hace poco expliqué una manera sencilla para crear un pendrive-live de ubuntu: http://behindopendoors.netne.net/blog/linux/crear-un-pendrive-live-de-ubuntu. En archlinux en cambio, vamos a hacerlo a mano, desde la consola, con un par de comandos, de una manera bastante sencilla. De esta forma, lograremos meter nuestra distro favorita en un pendrive, que nos será necesario para instalar Arch en un pendrive.

Lo primero que tenemos que hacer, es conseguir una imágen del cd de arch. Yo suelo usar las netinstall, que trae solo lo básico, y el resto lo descarga de internet, más actualizado, pero bueno, eso a vuestro gusto.

Ahora desde la consola, y en la ruta donde tengamos la imágen de arch, le vamos a indicar donde copiar la imágen, con el siguiente comando (lean atentamente antes de hacer nada):

dd if=archlinux-2009.08-netinstall-i686.img of=/dev/sdX

Si queréis saber más sobre el comando if, en este post lo explican (aunque el post sea sobre como duplicar un disco duro: http://www.entiendeatux.com/2010/02/16/breve-copia-exacta-de-un-hd-a-otro-hd/)Le tenemos que indicar el nombre del archivo de la imágen que tengamos, y la ruta donde está el pendrive. Normalmente es /dev/sdb1, pero podéis comprobarlo ejecutando el comando blkid. Tened cuidado de no indicar el dispositivo que no es, porque podéis perder datos. Si tenéis conectado algún disco duro externo, yo lo desconectaría por precaución (más vale prevenir que curar, sobretodo si somos un poco manazas :) .

Los datos de la imágen de arch, ocupan muy poco. Así que en el espacio restante, podemos crear otra partición, para guardar otros archivos que queramos llevar en el llavero. Esto lo podemos hacer con cualquier editor de particiones (yo uso gparted).

Y ya tenemos listo nuestro usb-live con arch.

Este tip lo leí en un artículo del blog de Leonardo Andrés Gallego, en el que explica como instalar archlinux en una netbook (http://www.hombrepac.com.ar/articulos/instalando-arch-linux-2009-08-con-kde-4-3-en-la-netbook-asus-eeepc-1000ha/ ), y me pareció bueno comentar esta parte, para poder tenerla a mano.

Tepes Archlinux, Linux , , , ,

Instalar pdftk en Archlinux

Domingo, 10 de Enero de 2010

Como comentaba en el anterior post, voy ha explicar como instalar el programa pdftk en Archlinux, que si bien no es difícil, hay que hacer un par de cosillas a mano para que funcione (aquí más información sobre el programa: pdftk).

Si intentamos instalar desde aur directamente el programa, nos dirá que nos falta el paquete gcc-gcj. Por lo tanto, vamos a instalarlo con yaourt:

yaourt -S gcc-gcj

Si prestamos atención a los últimos comentarios, ya nos comentan que tenemos que  descomentar las siguientes lineas de locale.gen:

de_DE.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15

Así que vamos a ello. Abrimos el archivo con el editor de texto que queramos:

sudo nano /etc/locale.gen

Y buscamos las lineas que os he listado arriba, para quitarles el símbolo “#” del principio.

Ahora corremos el script, para que se añadan las nuevas codificaciones:

sudo locale-gen

Ya podemos instalar el paquete gcc-gcj:

yaourt -S gcc-gcj

Tarda un rato en compilar, pero debería salir todo bien sin problemas. Luego, para acabar, instalamos pdftk:

yaourt -S pdftk

Y ya tenemos el programa listo para funcionar

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 , , , , , , ,