Piztu. Xestión da aula de informática

⬇ Descargar Piztu

Aínda que hai varias ferramentas para a xestión de aula, propúxenme facer unha nova que funcione con Linux Debian e distribucións derivadas. O obxectivo é ter á disposición unha pantalla desde a cal poidas acender equipos, tanto de forma individual como toda a clase, adormecelos, bloquealos…

 

Piztu está construído sobre Python e Ansible. O motor de automatización é Ansible, que executa as accións sobre os equipos da aula a través de SSH con autenticación por clave pública: un modelo sen axente no que os clientes só precisan ter OpenSSH e sudo, mentres cada operación (acender, durmir, apagar, bloquear, enviar ou recoller prácticas) se lanza en paralelo como un playbook, con soporte de Wake-on-LAN para o acendido remoto. Sobre ese motor, todo o lado servidor está escrito en Python: a interface web apóiase en Flask e Flask-SocketIO (WebSockets en tempo real para o vúmetro de ruído, o progreso dos envíos e unha terminal SSH integrada no navegador), a aplicación de escritorio en PyQt6, e un monitor de ruído autónomo captura o micrófono con arecord para emitir avisos e bloqueos automáticos. A configuración centralízase nun ficheiro YAML, os datos persistentes (posicións dos equipos e limiar de ruído) gárdanse en SQLite, a interface é multilingüe (galego, castelán, inglés e portugués) e o instalador gráfico está feito en Go co framework Fyne.

Pasos para a instalación

O primeiro a facer é renomear os equipos da aula cun nome seguido do número de equipo, por exemplo: tux01, tux02… Isto deberás facelo editando os ficheiros /etc/hosts e /etc/hostname:

Tamén debes instalar openssh-server nos clientes, para que desde o servidor se poida acceder a eles:

$ sudo apt update
$ sudo apt install openssh-server

A continuación edita o ficheiro de configuración do servizo SSH, descomentando ou cambiando estas liñas:

$ sudo nano /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
$ 
$ sudo systemctl restart ssh

E por último tamén debes asignarlle permisos de sudo ao usuario por defecto nos clientes:

$ su root
# visudo

e engades:

usuario ALL=(ALL) NOPASSWD:ALL

No caso do servidor, deberemos contar con Python 3 instalado.

Utilidades do aplicativo Piztu

a. Xestión de enerxía

  • Acender aula — acende os equipos por rede mediante Wake-on-LAN (paquetes máxicos), sen necesidade de tocalos fisicamente.
  • Durmir aula — suspende os equipos para aforrar enerxía manténdoos listos para retomar.
  • Apagar aula — apaga de forma ordenada todos os equipos (con confirmación previa para evitar erros).

Pódense aplicar a toda a aula á vez ou a un equipo concreto dende a súa tarxeta no mapa.

b. Bloqueo e control da clase

  • Bloqueo — bloquea as pantallas de todos os equipos (ou dos seleccionados) para captar a atención do alumnado nun momento dado.
  • Liberar — desbloquea os equipos. Inclúe verificación automática con reintentos para asegurarse de que ningún quedou bloqueado.

c. Terminal SSH

  • SSH — abre unha terminal remota contra calquera equipo directamente dende a interface (integrada no navegador con xterm.js, ou na GUI de escritorio), para administración ou diagnóstico sen levantarse.

d. Control de ruído

  • Monitor de ruído — vixía o micrófono da aula e calcula a media móbil dos últimos 30 s. Se supera o limiar fixado polo profesor, avisa nas pantallas dos alumnos; se o ruído persiste outros 30 s, bloquea automaticamente os equipos. O limiar regúlase cun control deslizante.

e. Envío e recollida de prácticas

  • Enviar práctica — distribúe ficheiros aos equipos (arrastrando e soltando), a todos ou a unha selección manual.
  • Modo anticópias — envía ficheiros distintos aos equipos pares e impares (clasificados polo número do seu nome), útil para evitar copias en exames.
  • Recoller traballos — descarga por SFTP o cartafol de prácticas de cada equipo ao servidor.
  • Explorador de ficheiros — consulta os traballos recollidos de cada equipo e descárgaos individualmente ou en ZIP.
  • Limpar cartafol — borra o contido da carpeta de prácticas nos equipos seleccionados.

f. Mapa interactivo da aula

  • Representa cada equipo como unha tarxeta cun indicador de estado (en liña/desconectado) e un badge cos ficheiros recollidos. As tarxetas arrástranse para reproducir a disposición física real da aula (gárdase automaticamente).

g. Outras

  • Interface multilingüe (galego, castelán, inglés, portugués).
  • Sobre Piztu — información de autoría, versión, contacto e licenza.

Configurar equipos e instalar programas con Ansible

Toda acción de Piztu sobre os equipos é, por debaixo, un playbook de Ansible. Iso significa que podes configurar os equipos da aula e instalar programas en todos á vez con só escribir (ou reutilizar) un playbook. Non fai falta tocar cada equipo: Ansible conéctase por SSH e fai o traballo en paralelo.

As tres pezas

1. O ficheiro hosts (inventario)

Define que equipos forman a aula. Cada liña é un equipo, agrupado baixo [aula]:

[aula]
tux01.local mac=c4:34:6b:7a:a1:a8
tux02.local mac=00:23:24:9c:fa:cd
...

[aula:vars]
ansible_become=yes                              # eleva privilexios con sudo
ansible_become_method=sudo
ansible_python_interpreter=/usr/bin/python3
  • [aula] é o grupo ao que apuntan os playbooks (hosts: aula).
  • O mac= úsao o Wake-on-LAN para acender.
  • [aula:vars] aplica variables comúns a todos (aquí, sudo automático).

2. O cartafol playbooks/

Cada .yaml é unha acción. Xa veñen varios: acenderAula, bloqueoTotal, visualstudiocode, instalar_lamp… Para engadir unha nova capacidade, abonda con crear un playbook aquí.

3. O mapeo en config.yaml

Os nomes lóxicos que usa a interface resólvense a ficheiros reais en:

ansible:
  grupo_aula: "aula"
  playbooks:
    acender: "acenderAula"
    bloqueo: "bloqueoTotal"
    # engade aquí o teu: nome_lóxico: "nome_do_ficheiro_sen_extensión"

Como executar un playbook

Manualmente (toda a aula):

$ ansible-playbook -i hosts playbooks/visualstudiocode.yaml

Só nalgúns equipos (con --limit):

$ ansible-playbook -i hosts playbooks/visualstudiocode.yaml --limit tux01.local,tux02.local

Exemplos

Exemplo 1 — Instalar un programa simple (GIMP) en toda a aula

---
- name: Instalar GIMP en toda a aula
  hosts: aula
  become: yes
  tasks:
    - name: Instalar o paquete gimp
      apt:
        name: gimp
        state: present
        update_cache: yes

Exemplo 2 — Instalar varios paquetes á vez

---
- name: Ferramentas de programación
  hosts: aula
  become: yes
  tasks:
    - name: Instalar paquetes
      apt:
        name:
          - python3-pip
          - git
          - build-essential
        state: present
        update_cache: yes

Exemplo 3 — Instalar dende un repositorio externo (VS Code, xa incluído)

---
- name: Instalar Visual Studio Code
  hosts: aula
  become: yes
  tasks:
    - name: Importar a chave GPG de Microsoft
      apt_key:
        url: https://packages.microsoft.com/keys/microsoft.asc
        state: present
    - name: Engadir o repositorio
      apt_repository:
        repo: "deb [arch=amd64] https://packages.microsoft.com/repos/code stable main"
        state: present
    - name: Instalar code
      apt: { name: code, state: present, update_cache: yes }

Exemplo 4 — Configurar os equipos (copiar un ficheiro de configuración)

---
- name: Distribuír un fondo de pantalla común
  hosts: aula
  become: yes
  tasks:
    - name: Copiar a imaxe ao equipo
      copy:
        src: /opt/piztu/recursos/fondo.png
        dest: /usr/share/backgrounds/aula.png
        mode: "0644"

Exemplo 5 — Cambiar unha opción do sistema (activar NumLock, xa incluído)

---
- name: Activar NumLock no arranque
  hosts: aula
  become: yes
  tasks:
    - name: Instalar numlockx
      apt: { name: numlockx, state: present }
    - name: Activar NumLock
      command: numlockx on

Exemplo 6 — Desinstalar un programa

---
- name: Quitar xogos
  hosts: aula
  become: yes
  tasks:
    - name: Eliminar gnome-mines
      apt:
        name: gnome-mines
        state: absent

Integrar un playbook novo na interface de Piztu

  1. Garda o teu .yaml en playbooks/ (ex.: playbooks/instalar_gimp.yaml).
  2. Dálle un nome lóxico en config.yaml:
    ansible:
      playbooks:
        instalar_gimp: "instalar_gimp"
  3. Chámao dende a interface co evento executar_comando (acción instalar_gimp), e Piztu lánzao contra todo o grupo aula automaticamente.

Tamén o podes executar sempre a man con ansible-playbook -i hosts playbooks/..., sen pasar pola interface.

Scroll ao inicio