miércoles, 28 de mayo de 2014

Problemas con la resolución de pantalla. Intel HD 4600 + Ubuntu14

No hace mucho, cambié el operativo de casa y decidí probar las "bondades" de un sistema LTS, así que llegué a ubuntu 14.04.

Me he encontrado con un problema que me sorprende se de aún, pero parece, es bastante comentado.

En mi caso, Ubuntu 14.04 solo me ofrece una resolución máxima, de 1024x768 con una Intel HD4600 integrada en el i5-4670, sobre un LG E2250v. Esto es completamente inaceptable, más si vienes de 1920*1080.

He probado varias formas de solucionar el problema, al final esta funcionando a 1920*1080 del siguiente modo...

1.- Verifica si estos 3 comando solucionan tu problema.... sino ajusta los valores correctamente.

xrandr --newmode monitor_1920 148.800 1920 2008 2052 2185 1080 1084 1089 1135
xrandr --addmode VGA1 monitor_1920
xrandr --output VGA1 --mode monitor_1920

Donde los valores "148.800 1920 2008 2052 2185 1080 1084 1089 1135" se deben obtener con el comando "cvt" OJO!! ESTO A MI NO ME FUNCIONÓ

Podéis ver que la salida de cvt es distinta a los valores que he usado...

# cvt 1920 1080 60
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

De donde obtendríamos:
173.00  1920 2048 2248 2576  1080 1083 1088 1120

Los valores que he acabado usando, son de:
...
...
# 1920x1080p @ 60Hz (EIA/CEA-861B)
ModeLine "1920x1080" 148.800 1920 2008 2052 2185 1080 1084 1089 1135 +hsync +vsync #INTEL
...
...

2.- Automatiza..

Tras verificar que los 3 comando anteriores te funcionan. Simplemente se trata de crear un script que se ejecute al cargar el escritorio, para lo cual creamos dos ficheros con el siguiente contenido...

/etc/xdg/autostart/fix_resolution.desktop 

[Desktop Entry]
Name=fix resolution
Exec=/usr/local/bin/fix_resolution.sh

/usr/local/bin/fix_resolution.sh

#!/bin/sh
xrandr --newmode monitor_1920 148.800 1920 2008 2052 2185 1080 1084 1089 1135
xrandr --addmode VGA1 monitor_1920
xrandr --output VGA1 --mode monitor_1920

Le damos permisos de ejecución al ".sh"

Con esto en cada reinicio se nos aplicara la configuración manual que hemos hecho.
Seguro que hay formas mas limpias y elegantes, pero esta me ha funcionado perfectamente.


lunes, 12 de mayo de 2014

Raspberry Pi. Interruptor apagado - Control GPIO

Este post intenta abordar la necesidad que me surgió, de poder hacer un apagado ordenado de la RaspBerry.

No era viable conectarme a la misma para realizar el apagado, ni tampoco apagar de power en cada ocasión ya que eran demasiadas y corría el riesgo de dejar el sistema inconsistente.

Una de las alternativas es la de conectar la Rasp al mundo, para lo que tenemos los puetos "general purpose input output" o GPIO.

De cara al montaje siguiente, hay que tener presente que, tenemos dos implementaciones de GPIO. REV1 y REV2. Debemos adaptarlo a la nuestra, ya que hay 3 diferencias en los nombres (marcados en azul)

Nota: En mi caso GPIO Rev.1 (Pin5 --> GPIO1)

El script hace básicamente lo siguiente....
Conectamos un interruptor al pin 5 (definido como de entrada y con valor 1) y al pin 6 (GND... con valor 0), cuando activamos~(cortorcicuitamos) el interruptor, el pin 5 de entrada recibe el 0 que tenemos en GND y cambia su valor a "0"comprobamos este valor y si es "0", lanzamos el shutdown o el script deseado.

El montaje queda así.... "cutre" pero completamente operativo.


El script es el siguiente:

Se puede descargar aquí

Nota2: Un poco de teoria...
Los puertos GPIO no son accesibles hasta que se han exportado al espacio de usuario. Hasta ese momento solo el Kernel puede acceder a ellos. Por lo que es necesario el export antes de poder definir la dirección IN/OUT o el valor.
Ejemplo.
root@RASP1:/sys/class/gpio# ls -als                                             ..                                                    
0 --w-------  1 root root 4096 may 12 01:23 export                             
0 lrwxrwxrwx  1 root root  0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:23 unexport
-----------------------------------
                                                    
root@RASP1:/sys/class/gpio# echo "5" > ./export
root@RASP1:/sys/class/gpio# ls -als
..
0 --w------- 1 root root 4096 may 12 01:24 export
0 lrwxrwxrwx  1 root root  0 may 12 01:24 gpio5 -> ../../devices/virtual/gpio/gpio5
0 lrwxrwxrwx  1 root root    0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:23 unexport
-----------------------------------                                                    
root@RASP1:/sys/class/gpio# echo "5" > ./unexport
root@RASP1:/sys/class/gpio# ls -als
..
0 --w-------  1 root root 4096 may 12 01:24 export
0 lrwxrwxrwx  1 root root    0 may 12 01:23 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
0 --w-------  1 root root 4096 may 12 01:24 unexport  

Con este montaje se hizo un centro de descargas, donde tras verificar la descarga vía transmission, se realiza un apagado ordenado se saca el pen, se "usa" la descarga.
Aunque lo verdaderamente interesante es la posibilidad de dotar a la RaspBerry de "interruptores" que realicen tareas.... Copias, checkeos, arrancar servicios...






domingo, 4 de mayo de 2014

Referencia Indirecta - Bash

Este post es más una nota que un post como tal, por su extensión y sobre todo por su función.....

Hace un par de semanas necesité hacer uso del concepto de punteros en bash.
La verdad es que no se si lo había usado anteriormente, lo que si sé, es que no recordaba como hacerlo, de ahí esta nota.

El concepto se llama habitualmente referencia indirecta.

Simplemente pretendo dejar plasmada la sintaxis a modo de recordatorio, así que no me extenderé nada.....

Podemos referenciar variables de dos modos... directa o indirectamente.

Antes de BASH v.2
A="cadena resultante"
B="A"
-------------------------
echo $A
.......cadena resultante
-------------------------
echo $B
.......A
-------------------------
eval C=\$$B
echo $C
.......cadena resultante


Desde BASH v.2
A="cadena resultante"
B="A"
-------------------------
echo $A
.......cadena resultante
-------------------------
echo $B
.......A
-------------------------
echo ${!B}
.......cadena resultante

Podemos acceder al contenido de la variable A, haciendo uso de su propia referencia o de la referencia que contiene la variable B.

La referencia la obtuve del siguiente artículo.
Aquí un artículo donde se detalla perfectamente este concepto.