Tagged:linux

Script para cambiar fondo de escritorio en Linux Mint (Mate)

Versión de Mint: 17 Qiana. Escritorio Mate.

A veces tareas sencillas en Windows no resultan tan triviales en linux. No me gusta tener siempre el mismo fondo de escritorio, y tampoco me gusta tener que acordarme de cambiarlo cada cierto tiempo. Es algo que sencillamente me gusta que mi ordenador haga por mí. Es una tontería, pero me gusta que sea así, y el problema con el escritorio Mate de Mint es que no permite automatizar esta sencilla tarea; simplemente es una opción no contemplada en la interfaz de administración. El asunto es que Mate me gusta mucho, no quiero cambiar a otro tipo de escritorio más sofisticado porque este me resulta comodísimo, rapidísimo, sencillísimo, etc., así que me puse a darle vueltas y al final di con una versión de un script que hacía un bucle activo para realizar esta tarea periódicamente. Me pareció una locura tener un bucle activo solo para eso, así que lo modifiqué para que en vez de funcionar así, lo hiciera a través de una tarea cron.

El script:
# Carpeta con fondos que quiero rotar
DIR="/home/juanfer/Imágenes/fondos"

# Selección aleatoria de un fichero .jpg dentro de esa carpeta
PIC=$(ls $DIR/*.jpg | shuf -n1)

# Aquí está la magia: el comando gsettings es el que permite realizar el cambio de fondo, entre otras cosas
gsettings set org.mate.background picture-filename $PIC

Lo guardamos con un nombre adecuado, tipo cambiar-fondo.sh, le damos permisos de ejecución, chmod 700 cambiar-fondo.sh y lo añadimos a nuestro crontab (yo lo tengo cada 2 horas):
* */2 * * * /home/juanfer/scripts/cambiar-fondo.sh

Espero que le sirva de ayuda a alguien más 😉

Crear tarea cron con script ruby en ubuntu 14

Llevo varios días con este tema y finalmente he dado con la solución. El problema es que ruby necesita de un entorno de ejecución, que es automático cuando se ejecuta desde la línea de comandos, pero que no se carga cuando se ejecuta desde cron.

Cosas que intenté:

  • Modificar el script ruby incluyendo las rutas hacia las gems usadas
  • Ejecutar el script ruby desde un script de shell que incluía todas las variables de entorno necesarias
  • Usar los ficheros de entorno RVM en un script de shell
  • Usar llamadas directas a los wrappers generados por RVM

La solución que funcionó bien fue la última, la de los wrappers de RVM, pero antes de describirla, algunas cosas útiles que también utilicé y conviene mencionar:

  • Al crear la tarea cron, conviene guardar los resultados en un fichero de log para saber lo que está ocurriendo, de este modo:
    /ruta/hacia/ruby /ruta/hacia/script.rb >> /ruta/hacia/fichero.log
    
  • Imprescindible redirigir cualquier error de ruby también hacia el fichero de log, así: (explicación aquí)
    /ruta/hacia/ruby /ruta/hacia/script.rb >> /ruta/hacia/fichero.log 2>&1
    
  • Saber que en Ubuntu, el log de la ejecución de cron se guarda en:
    /var/log/syslog
    

    aunque este es un log general, por lo que para ver líneas relacionadas con cron bastará con hacer un grep tipo:

    grep CRON /var/log/syslog
    
  • Es importante que el script .rb tenga permisos de ejecución, sino aunque lo puedas ejecutar manualmente por consola, cron no podrá hacerlo. Por lo tanto:
    chmod 755 script.rb
    

Solución:
Dado que la solución está basada en RVM, evidentemente necesitamos tenerlo instalado (si no sabes lo que es, o no sabes cómo instalarlo, más información aquí).

Básicamente lo que hice fue llamar a ruby con el wrapper por defecto que RVM genera para la instalación global, sin embargo se puede crear un wrapper diferente con diferentes versiones de Ruby o de las gems que necesitemos. Como no soy experto en RVM y a mí en este caso me es suficiente con la instalación por defecto, reemplacé mi línea de crontab por esta:

0 1 * * * /usr/local/rvm/wrappers/ruby-1.9.3-p547/ruby /home/scripts/script.rb >> /home/scripts/script.log 2>&1

La carpeta /usr/local/rvm/wrappers/ruby-1.9.3-p547 es la de la distribución de ruby por defecto en mi sistema, pero debes adecuarla a tu instalación.

Después de varios días atascado viendo un fichero de log vacío o con errores de importación, ver el resultado esperado fue liberador. Espero haberte ahorrado algunas horas de vida, no las malgastes! 😉

Cambiar ruta de acceso por defecto de la carpeta data de mysql en ubuntu linux

Instrucciones probadas en:

  • Ubuntu 14.04, 64 bits + MySQL 5.6.19
  • Ubuntu 15.10, 64 bits + MySQL 5.6.27

Por defecto la carpeta de datos de MySQL es /var/lib/mysql. Supongamos que queremos usar /home/data:

Crea la carpeta nueva

mkdir /home/data

Cambia los permisos de la carpeta nueva para que pertenezca al usuario y grupo mysql:

chown -R mysql:mysql /home/data/*

Edita el fichero de configuración de mysql /etc/mysql/my.cnf. En Ubuntu 15 el fichero de configuración está en /etc/mysql/mysql.conf.d/mysqld.cnf

nano /etc/mysql/mysql.conf.d/mysqld.cnf

Busca la línea que dice “datadir = /var/lib/mysql” y cambia la ruta antigua por la nueva

datadir = /home/data

En Ubuntu se usa AppArmor para gestionar la seguridad, así que también tenemos que decirle a AppArmor que mysql tiene permisos sobre la nueva carpeta:

nano /etc/apparmor.d/usr.sbin.mysqld

Añade las siguientes líneas al final:

/home/mysql-data r,
/home/mysql-data/* rwk,

Reinicia AppArmor

/etc/init.d/apparmor restart

Detén el servidor

/etc/init.d/mysql stop

Copia los ficheros de la carpeta de datos antigua a la nueva. Asegúrate de no copiar los ficheros ib_arch_log_0000000000, ib_logfile0, etc.

cp -rp /var/lib/mysql/* /home/data
rm /home/data/ib*
rm /home/data/*.cnf
rm /home/data/debian*

Reinicia el servidor

/etc/init.d/mysql start

Bualá

{ Piensa / Think }

"This is a waste of life. [...] the entire educational system in the modern day is nothing more than a cookie cutter processing plant that prepares humans for mostly predefined occupational roles. This element of human life has become so traditionally ingrained, that many falsely consider the nature of ‘having a job’ some form of human instinct. Even parents will ask their kids “What do you want to be when you grow up?” as though there was only one thing. This is disturbing and a violation of human potential." - The Zeitgeist Movement


"He aprendido que hay cosas que pueden ser comprendidas pero que nunca podrán ser explicadas con palabras sin desvirtuar su grandeza" - Andrés Pascual


"You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete." - Buckminster Fuller


"... I am the master of my fate. I am the captain of my soul." - William Ernest Henley