Archivo

Entradas Etiquetadas ‘Arch’

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

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

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

Configurar sonido Toshiba nb-200 en Arch, con Oss.

Jueves, 31 de Diciembre de 2009

Este netbook, me ha dado problemas a la hora de configurar el sonido. Con ubuntu, funciona sin ningún problema, sin tener que configurar nada, pero con Arch, tendremos que trabajar un poco.

Al parecer, con Alsa no se puede más que escuchar por la salida para cascos, el altavoz interno no funciona. Y en un post que me han echo llegar (gracias XxX, del foro Archlinux), aconsejaban usar Oss: http://bbs.archlinux.org/viewtopic.php?id=83804.

Allí mismo, hay un link a la wiki de Archlinux, donde está muy bien explicado como instalar Oss, y configurar luego todo lo necesario para que valla como la seda. Está en inglés, pero creo que no es difícil entenderlo conociendo por encima el idioma. Si no, a la versión en castellano, le faltan algunas partes por traducir, pero os será más fácil de entender: http://wiki.archlinux.org/index.php/Open_Sound_System_%28Espa%C3%B1ol%29.

Voy a resumir un poco como me ha ido a mí:

Lo primero, editar el rc.conf, para desactivar los modulos de Alsa:

sudo nano /etc/rc.conf

En el apartado de módulos, añadimos estos dos al array: !soundcore !alsa. El símbolo de exclamación, significa que esos módulos no van a ser cargados. Ahora ya, podemos comenzar a instalar Oss.

pacman -S oss

Si todavía no tenéis a vuestro usuario añadido al grupo sound, lo podéis hacer editando el archivo /etc/group o con el siguiente comando:

gpasswd -a username audio

Y editamos el rc.conf, añadiendo @oss a los daemons, para que se inicie al arrancar el equipo. Ahora lo iniciamos manualmente como root:

sudo /etc/rc.d/oss start

Ahora, podéis hacer una pequeña prueba para comprobar que todo ha ido bien:

osstest

Escucharéis una musiquilla por los distintos canales. Ahora, vamos a ver un poco como configurar y controlar el volumen. Para ello, usaremos ossxmix, que personalmente me parece un poco difícil de entender su esquema, pero funciona bien. Necesitamos instalar el paquete gtk2:

pacman -S gtk2

Y ahora, lanzamos el programa desde una consola:

ossxmix

Veremos una pantalla parecida a esta:

Ahora, vamos a configurar algunos programas para que funcionen bien con Oss (para otros, mirar la wiki).

Aplicaciones Gstreamer

Para las aplicaciones que usen Gstreamer, tenemos que configurar lo siguiente:

gstreamer-properties

Cambiamos el pipeline de Default Output a oss4sink y el del input a oss4src, como se muestra en la imágen:

Firefox >=3.5

Con firefox apagado, desinstalamos el paquete xulruner, evitando dependencias.

pacman -Rd xulruner

Y ahora, instalaremos el paquete xulruner-oss con yaourt. Como tiene que compilarlo, le llevará un buen tiempo, sobretodo teniendo en cuenta que el procesador del netbook es bastante lento. Así que, no sería mala idea compilarlo en otro ordenador más rápido, y luego, traer el paquete al netbook, e instalarlo con el comando pacman -U /rutadelpaquete/xulruner-vxx-xx-xx.pkg.tar.gz. Pero si tenéis paciencia y no queréis complicaros:

yaourt -S xulruner-oss

Skype

Para skype, es bien sencillo. Solo hay que desinstalar la versión normal (pacman -Rs skype) e instalar la versión compatible con oss:

yaourt -S skype-oss

Moc

Ya hablamos anteriormente de este liviano reproductor de consola: http://behindopendoors.netne.net/blog/general/moc-music-on-console. En la wiki, explican como cambiar la configuración, para que use oss, pero yo no lo he conseguido. El archivo de configuración no está en la ruta citada. De todas maneras, el reproductor funciona bien, sin hacer nada, así que, así se queda.

Para terminar, os dejo un screenshot del netbook, con el xmms funcionando (al que no hay que hacer nada para que funcione).

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