¿ Como coordinar nuestras decenas de actividades y espacios, de decenas de colectivos ?¿ Como visibilizar y difundir todo ello para fomentar la participación ? En definitiva… como hacer fluir nuestra información y seguir tejiendo lazos y redes … nos preguntamos .
Necesitamos, un calendario, un Blog y una pantalla. Alehop ! Y a eso le llamamos Okupanel.
A continuación compartimos como hacer el tuyo …
¡UPDATE del 2017-10-18, NUEVA PANTALLA!
Nuestra pantalla de entrada utiliza ahora OkuPanel, un plugin de WordPress que desarrollamos para la Ingobernable, pero que puede servir a cualquier otro centro okupacional que desee enseñar sus propios eventos en una pantalla!
Afin de no duplicar tres veces el contenido del nuevo tutorial, le invitamos a leer las instrucciones desde
Keep fighting! ;)
Porque la idea fue simplemente genial, y porque os servirá para, entre otras cosas, crearos una caja de Raspberry ecológica, biodegradable y barata, dejamos a continuación el tu sobre anterior sobre nuestra pantalla de entrada:
Mostrará los eventos/talleres/charlas de toda la ingobernable con estética RENFE. Inicialmente una pantalla en la Cafeta. Una vez se tenga bien documentado el proceso se podrán poner más en un futuro en otros espacios e incluso proyectar en la entrada los eventos tambien.
Se trata de simplemente una pantalla que mostrará los eventos con estética RENFE (como lo que se ve en las pantallas cuando quieres saber las llegadas y las salidas). NO lleva ninguna webcam el monitor de modo que puedes estar tranquilo/a y relajado/a.
Motivación para realizar este proyecto: Es muy cansino y se gasta mucho papel cuando se van poniendo a mano los eventos. Con la pantalla no se re-trabaja eso y permite que se pueda invertir el tiempo en otras historias.
Cuando hablamos de “Estética” RENFE nos referimos a hacer algo como esto:
En la Cafeta. Actualmente pantalla ya colocada.
Hemos de visitar la web de raspberrypi oficial y desde aquí: https://www.raspberrypi.org/downloads/raspbian/ descargar la imagen de raspbian.
Nos encontraremos (actualmente 2017/08/16) 2 versiones:
A nosotros/as nos interesa la versión “lite” pese a que luego instalaremos las X y algún otro software. Descargar desde torrent es mucho más rápido. No obstante si no tienes un cliente para ello puedes descargar raspbian lite en descarga directa así:
$ wget "https://downloads.raspberrypi.org/raspbian_lite_latest" -O raspbian.zip $ unzip raspbian.zip
Nos quedará un archivo con un nombre como este o similar: 2017-07-05-raspbian-jessie-lite.img Es la imagen que tenemos que calzarle a la tarjeta microSD. Para ello vamos primero a meter la tarjeta microSD y detectar donde se encuentra.
Podemos verlo así por ejemplo:
# tail -f /var/log/daemon.log | grep "Mounted"
En mi caso se encuentra en /dev/mmcblk1p1 pero en tu caso podría estar por ejemplo en /dev/sdb … Saca un par de veces la tarjeta para ir viendo donde se monta y que dispositivo es.
Una vez identificada la tarjeta vamos a calzar el archivo img de raspbian con dd así:
# dd bs=4M if=2017-07-05-raspbian-jessie-lite.img of=/dev/mmcblk1p1
En un ratito tendría que estar ya calzada raspbian en la MicroSD.
Lo primero es poner la tarjeta MicroSD en la Raspberry Pi 3 y encenderla conectada a un proyector o un monitor. Es importante enchufarle un teclado a la raspberry Pi 3.
En mi caso he puesto un mando inalambrico con teclado. De esta forma no necesito enchufar un armatoste. He enchufado por HDMI a un proyector para ver que sale por pantalla.
Tendríamos que ver algo como esto y hacer login. El usuario por defecto es pi y la password raspberry.
Una vez hacemos login vamos a configurar un poco el tema usando:
sudo raspi-config
Habilitaremos entre otras cosas acceso remoto vía ssh para poder trabajar sin necesidad de conectarlo a ninguna pantalla inicialmente.
Conectamos por cable la raspberry pi 3 y con sudo ifconfig miraremos a ver si se nos asigna una IP por DHCP. En el momento que tengamos una y si hemos activado SSH server en la raspberry Pi entonces probamos a acceder remotamente para configurar una IP estática. Ya podríamos apagar el monitor/proyector por el momento.
Los primeros comandos serán para actualizar el sistema un poco:
$ sudo apt-get update $ sudo apt-get upgrade
Instalar las X, un scritorio sencillote (fluxbox) y el xdm (un gestor de inicio de sesión similar a gdm pero más simple).
$ sudo apt-get install xorg xdm fluxbox $ sudo reboot
Si encendemos el monitor/proyector veremos el xdm que nos pide login y password y luego el fluxbox:
El problema es que aunque xdm mola y es sencillo no tiene opción para autologin. Para ello podemos utilizar en vez de xdm gdm que aunque es más pesado nos da lo mismo. Instalar gdm así:
$ sudo apt-get install gdm3
La idea es que entre sin solicitar login y password y que ejecute firefox en pantalla completa. Eso es la idea pero antes de eso dejemos una IP fija para cuando lo conectamos por cable. Esto se hace editando el archivo /etc/network/interfaces
Un ejemplo de como lo he dejado yo inicialmente:
# Loopback auto lo iface lo inet loopback # Ethernet cable auto eth0 iface eth0 inet static address 192.168.1.128 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.0 gateway 192.168.1.1 # Wifi integrada allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
De esta forma al arrancar si está conectado por cable tardará menos al no tener que realizar el negociado DHCP. Tiene ya una IP estática fijada.
Conectamos vía ssh e instalamos firefox y nginx así:
$ sudo apt-get install firefox-esr nginx wget curl
Es buena cosa imprimirnos nuestra propia cajita. Si se nos rompe podemos imprimir otra nueva. En vez de comprar una siempre tener los planos de la cajita nos permitirá jugar y adaptar esta a nuestras necesidades.
Los archivos STL de la cajita que hemos impreso nosotras para este proyecto pueden bajarse desde aquí: stl-rasp3.zip
Finalmente nosotras hemos optado por este diseño (r-abajo r-arriba)no obstante:
En el archivo /etc/gdm3/daemon.conf:
[daemon] # Enabling automatic login AutomaticLoginEnable = true AutomaticLogin = pi
Con esto conseguimos que siempre al arrancar entre directamente haciendo login con el usuario pi. Es recomendable cambiar la password del usuario pi e incluso añadir algún otro usuario al sistema y hacer que sea ese el que auto-entre.
Queremos que la pantalla esté a todo trapo mostrando los eventos. Simplemente se apagará la pantalla y dejará de verse. Al día siguiente si se enciende el tema estará mostrándose de nuevo. Enemigos de eso son el suspendido automático de sesión.
Todo eso se ha de configurar para que no salte el salvapantallas ni se nos cierre la sesión por inactividad.
Esto significa que hemos de desactivar que firefox la siguiente vez que se abra si se ha apagado mal el sistema (se ha tirado por ejemplo del cable de la raspberry pi) nos muestre el rollo de recuperar la anterior web que estamos visitando.
Eso se hace desde el propio firefox añadiendo como url:
about:config
Buscamos la cadena: browser.sessionstore.resume_from_crash
Ponemos esa cadena de true a false.
Lo mismo no conoces la herramienta xdotool pero es una maravilla. Es posible instalar xdotool desde la línea de comandos tirando de apt así:
apt-get install xdotool
Por ejemplo es posible abrir firefox en pantalla completa así:
firefox -url https://wiki.ingobernable.net & xdotool search --sync --onlyvisible --class "Firefox" windowactivate key F11
Eso mola mucho pero no es lo que vamos a usar. Lo que vamos es a crear una aplicación que arranque al inicio. Si es gnome lo que arrancará podemos crear un directorio llamado autostart dentro de /home/pi/.config/ y una vez creado añadir un archivo llamado “firefox.Desktop” en su interior.
El contenido de firefox.Desktop:
[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=firefox Comment= Exec='/usr/bin/firefox' Icon=/usr/share/pixmaps/firefox-esr.png StartupNotify=true Terminal=false TerminalOptions= Type=Application GenericName[es_ES]=
Si todo va bien al reiniciar la raspberry pi entrará automaticamente y arrancará firefox.
¿Que problema tenemos aún por solucionar? Evidentemente queremos un firefox a pantalla completa sin ruido visual. Eso se puede hacer fácilmente con la extensión mfull de firefox: https://addons.mozilla.org/es/firefox/addon/mfull/
Esto tiene que cambiar en el futuro. No obstante ahora mismo para que la pantalla funcione vamos a hacer el esfuerzo y ensuciarnos las manos con este asunto. Hacer que funcione con un sistema libre será menos engorroso y podremos autogestionarlo en un futuro. Eso quiere decir que si ahora mismo no se pasa a lo libre tendremos que trabajar 2 veces.
Se realizará el esfuerzo de currar 2 veces la pantalla. Se tendrá que seguir dialogando para que el sistema de calendario no penda de empresas del capitalismo coginitivo como google.
Sin necesidad de usar una cuenta de google es posible scrapear los contenidos del calendario de google que actualmente está usando el grupo de bienvenida.
Esto se realiza gracias a que se permite “imprimir” en pdf el calendario y de esa forma podemos sin mucho esfuerzo sacar los contenidos que deseamos.
El script es el siguiente. Se ha de ejecutar con 2 parametros que ahora explicaremos:
El script se colocará en /root/scripts/ y se llamará conseguir_calendario.sh De modo que crea ese directorio y añade el script:
#!/bin/bash if [ $1 -eq 0 ] then rm /root/scripts/eventos.csv fi fechaHoy=$(date +%Y%m%d --date="+$1 day") # primera pasada será parametro primero 0 fechaManana=$(date +%Y%m%d --date="+$2 day") # primera pasada será parametro segundo 1 fechaInicio="$fechaHoy" fechaFin="$fechaManana" # curl -s silencioso curl -s "https://calendar.google.com/calendar/printable?pgsz=letter&hl=es&dates=$fechaInicio%2F$fechaFin&ctz=Europe%2FMadrid&src=bienvenida.ingobernable%40gmail.com&wkst=1&mode=AGENDA&prsd=$fechaInicio&pred=$fechaFin&pfs=NORMAL&po=AUTO&psd=false&pset=true&psa=true&psr=true&psdec=true&pbw=false&pjs=false&rand=1503050297829" -H 'Host: calendar.google.com' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: https://calendar.google.com/calendar/print_preview?dates=$fechaInicio%2F$fechaFin&hl=es&ctz=Europe%2FMadrid&pgsz=letter&wkst=1&mode=AGENDA&src=bienvenida.ingobernable%40gmail.com' -H 'Cookie: PDF_INLINE=ok; NID=110=SLfZtapubOcIA8yhVH1QMD0Ob_1yqZBdYrTBwXm8lzFymqvpDzBEhZIGp5DEbSnCTYwwyVDxzRU5qekIgJmlyMugGA2z81lFelasEMpFcOnFmOWUD4p2Xpnn3Z65YM0P' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' > /root/scripts/calendario.pdf # si no chuta cambia el tamaño de la fuente por el que te saque pdf2txt. algunas veces 13 otras 9 pdf2txt -t html /root/scripts/calendario.pdf | tr "<" "\n" | grep 'span style="font-family: Helvetica-Bold; font-size:9px' | cut -d ">" -f 2 > /root/scripts/calendario.txt # limpiamos línea 1 cat /root/scripts/calendario.txt | sed -n '1p' | cut -d "," -f 2-99999 | cut -c 6-9999 > /root/scripts/linea1.txt # contamos número de eventos nEventos=$(cat /root/scripts/calendario.txt | wc -l) echo $nEventos # restamos uno para sustituir la primera linea que hemos limpiado corte=$(($nEventos - 1)) # volcamos la parte 2 cat /root/scripts/calendario.txt | tail -n $corte > /root/scripts/calendario2.txt # unimos ambas cat /root/scripts/linea1.txt /root/scripts/calendario2.txt > /root/scripts/calendario.txt # limpiamos alguna mierda más que puede salir cat /root/scripts/calendario.txt | sed 's/(cid:10)/ /g' > /root/scripts/calendario2.txt # convertimos a mayusculas todo cat /root/scripts/calendario2.txt | tr [:lower:] [:upper:] > /root/scripts/calendario.txt while read -r evento do horaInicio=$(echo $evento | cut -d " " -f 1) horaFin=$(echo $evento | cut -d " " -f 3) descripcionEvento=$(echo $evento | cut -d " " -f 4-9999) # Aquí por ejemplo se puede dar formato. Depende de lo que se quiera hacer. # Por ejemplo meterlo en base de datos o darle un formato csv, o html. echo "\"$horaInicio\";\"$horaFin\";\"$descripcionEvento\"" echo "\"$fechaHoy\";\"$horaInicio\";\"$horaFin\";\"$descripcionEvento\"" >> eventos.csv done < /root/scripts/calendario.txt rm /root/scripts/*.txt rm /root/scripts/*.pdf # Generamos el html if [ $2 -eq 7 ] then echo "hola" rm /root/scripts/web/cuerpo.html while read -r item do via="G39" dia=$(echo $item | cut -d ";" -f 1 | cut -d "\"" -f 2 | cut -c 7,8) mes=$(echo $item | cut -d ";" -f 1 | cut -d "\"" -f 2 | cut -c 5,6) ano=$(echo $item | cut -d ";" -f 1 | cut -d "\"" -f 2 | cut -c 1-4) hini=$(echo $item | cut -d ";" -f 2 | cut -d "\"" -f 2) hfin=$(echo $item | cut -d ";" -f 3 | cut -d "\"" -f 2) des=$(echo $item | cut -d ";" -f 4 | cut -d "\"" -f 2) echo "<div class=\"evento\"><div class=\"c1\">$via</div><div class=\"c2\">$dia/$mes</div><div class=\"c3\"><center><marquee>$des</marquee></center></div><div class=\"c4\">$hini</div><div class=\"c5\">$hfin</div></div>" >> /root/scripts/web/cuerpo.html done < /root/scripts/eventos.csv echo "adios" cat /root/scripts/web/cabecera.html /root/scripts/web/cuerpo.html /root/scripts/web/pie.html > /root/scripts/web/index.html cp -pRv /root/scripts/web/* /var/www/html/ chown -R www-data:www-data /var/www/html/ fi
Seguramente el script puedes hacerlo tu mejor. Pero no lo estás haciendo tu :P. No obstante ahora mismo es lo que tenemos y funciona. Las modificaciones del script y mejoras las iremos actualizando aquí.
El script se ejecutará añadiendo este a cron.
La forma de ejecutarlo es así:
/bin/bash /root/scripts/conseguir_calendario.sh 0 1 /bin/bash /root/scripts/conseguir_calendario.sh 1 2 /bin/bash /root/scripts/conseguir_calendario.sh 2 3 /bin/bash /root/scripts/conseguir_calendario.sh 3 4 /bin/bash /root/scripts/conseguir_calendario.sh 4 5 /bin/bash /root/scripts/conseguir_calendario.sh 5 6 /bin/bash /root/scripts/conseguir_calendario.sh 6 7
De esa forma vamos consiguiendo en un archivo llamado eventos.csv en /root/scripts/ todos los eventos en este formato:
"20170821";"7PM";"8:30PM";"[AGOSTO POR CONFIRMAR] SALA B9. BOXEO Y MUAY THAI" "20170821";"7PM";"9PM";"[¡VOLVEMOS EN SEPTIEMBRE!] SALA 3.10- KAPOEIRA" "20170822";"7PM";"9:30PM";"CLUB DE LECTURA EN GRIEGO" "20170822";"8PM";"10PM";"PLANTA BAJA (ENTRADA) INGLéS EN LA INGOBERNABLE" "20170822";"8PM";"9PM";"SALA 3.11 CINE-CLUB CHANTAL" "20170822";"8PM";"11PM";"SALA B9 - SIKURIS" "20170823";"4PM";"6PM";"BICIMENSAJERAS, TALLER ABIERTO DE REPARACIóN BICI" "20170823";"6:30PM";"7:30PM";"[¡VOLVEMOS EN SEPTIEMBRE!] SALA 2.11 - REUNIÓN PACD" "20170823";"7PM";"10PM";"[¡VOLVEMOS EN SEPTIEMBRE!] SALA 2.9. ASAMBLEA RSA" "20170823";"8PM";"9PM";"SALA 3.3 Y 3.2-YOGA LA INGOBERNABLE" "20170824";"7PM";"11PM";"SALA B9 - GRUPO DE CUERDAS" "20170825";"5PM";"7PM";"3A PLANTA-TALLER GRUPO DE TITULIZACIONES DE LA COORDINADORA DE VIVIENDA DE MADRID" "20170825";"7PM";"8:30PM";"BIENVENIDA HACKLAB" "20170825";"7PM";"10PM";"SALA 2.9- ASOCIACIÓN SIN TECHO CHUPANO"
Si nos fijamos en el script cuando ejecute cron el script con los parametros 0 1 borrará antes eventos.csv para generarlo de nuevo. Todas las noches de madrugada se ejecutará el script 7 veces para conseguir los eventos de 7 días en adelante. Esos eventos estarán en el archivo eventos.csv
Ya tenemos los datos. Ahora queda crear el o los archivos que nos permitan visualizarlo de forma “RENFE” en la pantalla de abajo.
Led-board 7 - http://www.dafont.com/es/led-board-7.font
Revisa tzdata: dpkg-reconfigure tzdata
Como root crontab -e y se añade:
# m h dom mon dow command 11 1 * * * cd /root/scripts && ./conseguir_calendario.sh 0 1 12 1 * * * cd /root/scripts && ./conseguir_calendario.sh 1 2 13 1 * * * cd /root/scripts && ./conseguir_calendario.sh 2 3 14 1 * * * cd /root/scripts && ./conseguir_calendario.sh 3 4 15 1 * * * cd /root/scripts && ./conseguir_calendario.sh 4 5 16 1 * * * cd /root/scripts && ./conseguir_calendario.sh 5 6 17 1 * * * cd /root/scripts && ./conseguir_calendario.sh 6 7 20 1 * * * /sbin/shutdown -r now
Cambiando 17 por 1 de la madrugada por ejemplo.
Esto es para colocarlo en /root/
Esto generará el index.html que necesitamos que cron copie a /var/www/html/
Puedes bajar el tinglado aquí: scripts.tar.gz
Saludos cordiales.
Nuestras Vecinas de Arganzuela y su Okupanel …