Ansible Playbook: Fondo de Escritorio

Fondo de Escritorio

En los dispositivos de la sala de computación es necesario establecer una imagen de fondo del escritorio que represente a la institución o, al menos, una fotografía que dé uniformidad a los equipos. Además, se debe evitar que los estudiantes reemplacen esta imagen por otra.

El siguiente código permite configurar esto en cada equipo de forma remota usando un playbook de ansible. Previamente, he configurado el acceso por ssh a cada equipo para acceder sin que se solicite contraseña, y he creado un archivo de texto hosts.ini que lista las direcciones IPs de los equipos del salón.

---
- name: Configurar y bloquear el fondo de escritorio en Linux Mint
  hosts: sala_computacion  # Asegúrate que 'sala_computacion' esté definido en tu inventario
  become: yes          # Esencial, ya que escribiremos en /etc/
  vars:
    # --- ¡MODIFICA ESTA VARIABLE! ---
    # Ruta completa a la imagen que DEBE existir en los equipos cliente.
    # Si la imagen no está allí, este playbook funcionará, pero el fondo se verá negro.
    # Puedes usar otro playbook de Ansible (con el módulo 'copy') para subirla primero.
    ruta_imagen_fondo: "/usr/share/backgrounds/fondo_colegio.jpg"

  tasks:

    - name: 1. Crear el perfil de dconf
      ansible.builtin.blockinfile:
        path: /etc/dconf/profile/user
        create: yes  # Crea el archivo si no existe
        owner: root
        group: root
        mode: '0644'
        block: |
          user-db:user
          system-db:local

    - name: 2. Crear el directorio para los 'locks' de dconf
      ansible.builtin.file:
        path: /etc/dconf/db/local.d/locks
        state: directory
        owner: root
        group: root
        mode: '0755'

    - name: 3. Crear archivo de bloqueo (lock) del fondo de pantalla
      ansible.builtin.blockinfile:
        path: /etc/dconf/db/local.d/locks/01_wallpaper_lock
        create: yes
        owner: root
        group: root
        mode: '0644'
        block: |
          # Bloquear el fondo de pantalla para que el usuario no pueda cambiarlo
          /org/cinnamon/desktop/background/picture-uri
          /org/cinnamon/desktop/background/picture-options

    - name: 4. Crear el directorio para la base de datos 'local' de dconf
      ansible.builtin.file:
        path: /etc/dconf/db/local.d
        state: directory
        owner: root
        group: root
        mode: '0755'

    - name: 5. Definir el fondo de pantalla (configuración)
      ansible.builtin.blockinfile:
        path: /etc/dconf/db/local.d/01_wallpaper_settings
        create: yes
        owner: root
        group: root
        mode: '0644'
        # Usamos 'vars' para insertar la variable definida al inicio
        block: |
          [org/cinnamon/desktop/background]
          picture-uri = 'file://{{ ruta_imagen_fondo }}'
          picture-options = 'zoom'

    - name: 6. Actualizar la base de datos de dconf para aplicar cambios
      ansible.builtin.command: dconf update
      changed_when: true # Siempre reporta esta tarea como "cambiada"

Cómo usarlo

  1. Guarda el código: Guarda el texto de arriba en un archivo llamado establecer_fondo_escritorio.yml.
  2. Define tu inventario: Asegúrate de tener un archivo hosts.ini (o como lo llames) que defina el grupo [sala_computacion].
  3. Asegúrate de la imagen: Este playbook asume que la imagen (fondo_colegio.jpg) ya existe en la ruta /usr/share/backgrounds/ de los equipos cliente. Si no es así, debes subirla primero (puedes hacer otro playbook corto con el módulo ansible.builtin.copy para eso).
  4. Ejecuta el playbook: ansible-playbook -i hosts.ini establecer_fondo_escritorio.yml -u cse -k

-i : Lo uso para especificar el archivo de inventario.
-u: Lo uso para especificar usuario que ejecuta el playbook.
-k: Lo uso para ejecutar como sudo, solicitará contraseña.