Cerrar sesión gráfica desde terminal

El escenario es bastante peculiar: necesito cerrar la sesión gráfica para volver a la pantalla de login, en la que poder seleccionar usuario y entorno de escritorio. Esto suele ser fácil al venir integrados en los menús las opciones cerrar sesión o cambiar usuario. En mi caso, al no realizar nunca esta tarea, tengo eliminada esta entrada del menú para ser lo más productivo posible eliminando elementos innecesarios.

Si abrimos un terminal y ejecutamos los comandos logout o exit, no vamos a conseguir nada. Como mucho cerrar la misma terminal, pero seguiremos en la misma sesión y entorno de escritorio. Conseguimos nuestro fin matando todos los procesos del usuario en activo, puesto esto también mata la sesión iniciada. Por lo tanto, podemos escribir desde un terminal, indicando el nombre de usuario en cada caso:

pkill -KILL -u nombredeusuario

Fuente: foros de Ubuntu-ES

Identifica las DNS más rápidas con Namebench

Los servidores DNS son los encargados de traducir las direcciones web en las IP’s en que esas webs se encuentran alojadas. Sin ellos tendríamos que insertar los 12 números de cada IP para acceder a cada una de las webs. Por lo tanto, estar conectados a los servidores DNS que más rápido nos respondan puede acelerar velocidad de navegación.

dns-and-ipv62

Está bastante extendido el uso de los servidors DNS de Google (8.8.8.8, 8.8.4.4) o de otros servicios como OpenDNS, pues acostumbran a ser lo suficiente rápidos. En todo caso, podemos detectar aquellos que nos ofrecen mayor velocidad desde nuestra ubicación con el programa Namebench. Al encontrarse en los repositorios de la mayor parte de distribuciones, y utilizado Debian o derivados, lo instalamos desde la consola:

sudo apt-get install namebench

Para ejecutarlo tan sólo es necesario escribir namebench en el mismo Terminal. Tras un exhaustivo testeo de un amplio catálogo de DNS, resumirá los resultados con el output “Recommended configuration (fastest + nearest)“. Son las DNS que aquí aparecen las que podemos introducir en la configuración de nuestro router y/o en la del applet del sistema operativo. El primer resultado sería el DNS principal y el segundo el secundario. En ocasiones, algunos aplicativos permiten introducir más de dos DNS.

Tethering con Android y desde el terminal

android-wifi

Mediante tethering podemos compartir la conexión wifi que recibe Android con nuestro ordenador. Esta conexión puede ser de la propia tarifa de datos del móvil, o bien de la que recibe vía wifi. En este último caso, el móvil funcionaria a modo de receptor usb.

Es necesario tener Android con el acceso a internet ya configurado, conectarlo mediante usb al equipo, e indicar desde la pantalla de ajustes que queremos compartir esa conexión.

Si estamos ejecutando un entorno gráfico con un gestor de redes, esto será suficiente para que podamos navegar. De no ser así, la solución es tan sencilla como pedir a dhcpcd que asigne la dirección al interfaz de red correspondiente. Lo más probable es que, al ser una conexión por usb, este interfaz sea usb0. Lo podemos comprobar con el siguiente comando:

ip link

Si aparece en el listado es que hemos conectado correctamente el móvil. Ahora solo queda indicarle a dhcpcd que haga su faena con esta interfaz:

dhcpcd usb0

Ahora ya contamos con conexión desde el ordenador. Y si el móvil va a convertirse en el receptor habitual, podemos plantearnos añadir este último comando al listado de aplicaciones que arrancan con el inicio del sistema.

Encender y apagar iluminación del teclado mediante teclas

Si no funcionan por defecto las teclas ya previstas para este menester,  necesitaremos los programas xev y xbindkeys. Ambos los podemos ejecutar desde una terminal. En el caso de no tenerlos, los podemos instalar mediante:

sudo apt-get install xev

sudo apt-get install xbindkeys

Xev abrirá una pequeña ventana blanca. Cuando nos situemos en ella, cualquier tecla que presionemos será identificada en el terminal. De este modo, elegiremos dos teclas (una para el apagado y otra para el encendido). Cuando presionemos cada una de estas, debemos identificar el numero keycode que tienen asignado.

Antes de ejecutar xbindkeys, crearemos el archivo de configuración:

xbindkeys –defaults > /home/TU-CARPETA-DE-USUARIO/.xbindkeysrc

Al llevar un punto delante, este archivo será oculto. Tenemos que modificarlo con un editor, y añadir las siguientes líneas:

“xset led on”
c:NÚMERO-DE-LA-TECLA-PARA-ENCENDER

“xset led off”
c:NÚMERO-DE-LA-TECLA-PARA-ENCENDER

Una vez guardado el archivo, podemos ejecutar xbindkeys para comprobar que funciona correctamente. Posteriormente, nos puede interesar incluir xbindkeys en el autoarranque de sesión.

Toma de fotos – timelapse automática y copia en Google Drive (desde PC)

Pretendo que se tomen fotos automáticamente mediante la webcam, de manera programada, y se guarden tanto en el ordenador como en una cuenta de Google Drive.

1. Instalar Grive (cliente de Google Drive)

Google no proporciona un cliente para Linux que sincronice carpetas del ordenador con las carpetas alojadas en Google Drive. Grive es un programa que se ejecuta desde la consola y que permite realizar esta tarea. En el caso de necesitar interface y otras opciones, también se puede instalar posteriormente Grive Tools: no es necesario en esta ocasión.

Desde la consola, instalamos previamente varios paquetes:

sudo apt-get install git cmake build-essential libgcrypt11-dev libjson0-dev libcurl4-openssl-dev libexpat1-dev libboost-filesystem-dev libboost-program-options-dev binutils-dev libboost-test-dev libqt4-dev libyajl-dev

Después descargamos el programa Grive:

git clone git://github.com/Grive/grive.git

Ahora accedemos a la carpeta descargada y compilamos:

cd ./grive

cmake .

make

El siguiente paso es crear en nuestra carpeta de usuario una nueva carpeta, que será la que se sincronice con Google Drive. En el caso aquí expuesto esta carpeta se llama “googledrive”.

Ahora pegaremos el archivo que ejecuta Grive en esta nueva carpeta creada. El archivo se llama “grive”, y se encuentra en la carpeta “grive” (la que hemos descargado), y en una subcarpeta también llamada “grive”.

Nos situamos desde la consola en la carpeta que sincronizamos con Google Drive en la que acabamos de pegar el archivo, y lo ejecutamos de la siguiente manera:

grive -a

El parámetro “-a” sólo es necesario incluirlo en la primera ejecución, pues nos va a enlazar el programa con nuestra cuenta de Google. De este modo, al ejecutar el comando se nos muestra un enlace a seguir desde el que autorizaremos a Grive para usar nuestra cuenta. Para ello, desde el enlace se nos proporciona un código que debemos escribir en la consola. (Puede que no permita hacer copiar/pegar, pero si consultáis el código fuente de la página también aparecerá incluido y sí podréis copiarlo desde ahí).

Si todo funciona correctamente empezará a sincronizar la cuenta de Google Drive con nuestra carpeta. Para el uso que aquí se le va a dar, se ha creado una cuenta ad hoc evitando descargar al equipo archivos alojados en mi cuenta personal.

2. Instalar xawtv (para tomar fotos desde la consola)

Este paquete lo encontraremos en los repositorios:

sudo apt-get install xawtv

Una vez instalado, podremos ejecutar v4lctl, programa que toma las fotos. Previamente tenemos que conocer la ruta hacia nuestra webcam. Para ello tenemos diferentes opciones, siendo una posibilidad introducir en la consola:

ls /dev/video*

En mi caso la consola me devuelve la ruta /dev/video2 (al reiniciar más adelante pasó a la ruta /dev/video0, más lógica, lo que me obligó a modificar esta indicación). Conociendo este dato hacemos una primera prueba de v4lctl:

v4lctl -c /dev/video2 snap jpeg 640×400 ~/googledrive/cam/image.jpg

En esta sintaxis utilizada vemos como indicamos la resolución deseada (640×400), la carpeta en la que guardar la foto (~/googledrive/cam/image.jpg) y el nombre del archivo (image.jpg). Pero de esta manera, cada vez que se tomase una foto, el archivo image.jpg se modificaría por la última foto tomada. Quiero que se genere un archivo diferente por cada foto tomada, sin que se sobrescriban. Por ello voy a indicar en el nombre de archivo que incluya fecha, hora y minuto en que se toma la imagen:

v4lctl -c /dev/video2 snap jpeg 640×400 ~/googledrive/cam/cam1_$(date +%d.%m.%y. – %H:%M).jpg

Si repetimos este comando varias veces, deberían acumularse las diferentes fotografías tomadas en la carpeta que hemos creado.

3. Crear script para subir a Google Drive cada foto realizada.

En este paso creamos un script muy simple, en el que primero indicamos a v4lctl que debe tomar una foto para después ejecutar Grive, subiéndola este último a Google Drive.

Con este fin, dentro de la carpeta que sincronizamos y que en este ejemplo se ha llamado “googledrive”, creamos un archivo de texto. En este caso el archivo se llama “camdrive” y tiene el siguiente contenido:

#! /bin/bash

v4lctl -c /dev/video2 snap jpeg 640×400 ~/googledrive/cam/cam1_$(date +%d.%m.%y. – %H:%M).jpg

./grive

Si contamos con más de una webcam, podemos repetir el comando v4lctl modificando la ruta hacia cada una de las cámaras disponibles (/dev/video0, /dev/video1…).

El script necesita permisos de ejecución. Para ello abrimos una consola en la carpeta en la que se encuentra ubicado y escribimos:

sudo chmod +x camdrive

Para comprobar si funciona, simplemente lo ejecutamos:

./camdrive

A partir de este momento podemos comprobar en nuestro Google Drive como se van subiendo las fotografías. Además, la página de Google Drive se actualiza automáticamente cada vez que se incluye algún archivo nuevo. Se recomienda la visualización de miniaturas.

4. Programar la ejecución del script.

Para ello utilizamos cron y crontab. Cron se ejecuta por defecto, en segundo plano, cada vez que iniciamos el sistema. Podemos modificar el crontab para introducir tareas que queremos se realicen. Para ello, desde la consola ejecutamos:

crontab -e

El mismo archivo incluye al inicio una explicación de su uso, mostrando que se puede indicar la ejecución de una tarea en fecha o fechas concretas, y también en las franjas de tiempo que queramos. Incluso permite ejecutar una tarea cada vez que se inicia el sistema.

En esta ocasión, voy a indicar a crontab que ejecute el script que hemos creado cada 10 minutos. Incluyo la línea:

*/10 * * * * /home/pi/googledrive/camdrive

En esta sintaxis indicamos con números los minutos, horas, día del mes, mes y día de la semana. Por ello sólo indico los minutos (cada 10 minutos), y dejo con asterisco el resto de indicaciones. Delante del número indico con una barra (/) para que no se interprete que es en el minuto 10, sino cada 10 minutos. Otra manera de indicarlo podría ser @daily (para cada día), @hourly (para cada hora…), @reboot (al iniciar el sistema)… En todo caso, puede ser necesario no indicar la extensión (.sh) detrás del nombre del script para que funcione correctamente.

Muy posiblemente este archivo que modificamos se haya abierto con el editor Nano. Para guardar los cambios realizados presionamos Ctrl+O, y Enter para sobrescribir. Con Ctrl+X salimos de Nano.

Reiniciamos cron:

sudo service cron restart

Alternativas

Teniendo en cuenta que el script propuesto es muy sencillo, y tan sólo recoge un par de comandos, también podemos obviar la creación del script e incluir directamente la ejecución de estas tareas en el crontab. La primera de ellas podría programarse cada X minutos, y la segunda con un tiempo de X+1. Por algún motivo que no identifico, esta opción no me funciona.

He tenido también algún problema para ejecutar Grive desde el crontab, solucionado al incluir el comando de la siguiente manera: cd /home/pi/googledrive/cam && grive (en vez de indicar juntos la ruta y el comando).

Fuentes: Raspberry Web ServerTips de Linux.

Establecer hora local desde la consola

En caso de no contar con un entorno gráfico, o bien que sea muy sencillo para consumir pocos recursos, puede surgir la necesidad de establecer la hora local sin tener herramienta visual para realizarlo.

En distribuciones basadas en Debian, la tarea es tan sencilla como escribir en un Terminal:

sudo dpkg-reconfigure tzdata

Accederemos a un menú que permitirá seleccionar zona geográfica y ciudad, quedando guardados los cambios de la opción seleccionada.

Error: “Environment block too small”

Este es un error que nos podemos encontrar al iniciar el sistema operativo desde el GRUB, el gestor de arranque que nos permite seleccionar con qué sistema operativo iniciamos nuestra máquina. En principio, con tan sólo presionar un botón podemos seguir con el arranque del sistema operativo en la mayoría de los casos.

Una solución rápida es eliminar el archivo grubenv y volverlo a generar de nuevo. Para eliminarlo, desde la consola escribimos:

sudo rm -rf /boot/grub2/grubenv

Después lo volvemos a generar:

sudo grub2-editenv /boot/grub2/grubenv create