J'ai deux enfants qui aiment tellement Ubuntu qu'ils ne font pas leurs devoirs de maths. Donc, dans l’esprit de Monty Python, je voudrais leur présenter quelque chose comme:
"Arrêtez-vous. Qui traverserait le Pont de la Mort doit me répondre à ces trois questions, avant qu'il ne voie de l'autre côté."
à la connexion.
Ils devraient résoudre quelques problèmes mathématiques avant de pouvoir se connecter.
Ma question est la suivante: ce genre de chose peut-il être fait?
Ce qui suit est testé avec Ubuntu 13.04 et Python du système, en utilisant les liaisons Gtk (PyGobject).
Voici une façon un peu sale cependant et cela nécessite plus d'investigation:
Sommaire
Ajoutez un fichier .desktop
à /usr/share/xsessions
nous le nommerons custom
Ajoutez un fichier .xsession
à l'utilisateur en question (vos enfants) et l'appelons comme étant kid
Créez l’application graphique Python pour le casse-tête mathématique et exécutez-la à partir de .xsession
, nous l’appellerons ainsi: puzzle.py
Détails
Sudo vi /usr/share/xsessions/custom.desktop
Ajoutez ce qui suit dans le fichier:
[Desktop Entry]
Name=Custom
Comment=This session logs you into your managed desktop environment
Exec=/etc/X11/Xsession
X-Ubuntu-Gettext-Domain=gnome-session-3.0
vi /home/kid/.xsession
Ajoutez ce qui suit dans le fichier:
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
vi /home/kid/puzzle.py
Ajoutez ce qui suit dans le fichier:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import subprocess
import random
from gi.repository import Gtk
#----------------------------------------------------------------------
class PuzzleWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Math Puzzle", resizable=False)
super(PuzzleWindow, self).set_position(Gtk.WindowPosition.CENTER)
super(PuzzleWindow, self).maximize()
self.a_number = random.randint(1, 5)
self.b_number = random.randint(1, 5)
self.result = self.a_number + self.b_number
self.vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=5)
self.label = Gtk.Label("What is the sum of the numbers bellow?")
self.number_label = Gtk.Label("{num_a} + {num_b}".format(
num_a=self.a_number, num_b=self.b_number))
self.entry = Gtk.Entry()
self.button = Gtk.Button(label="Check answer!")
self.button.connect("clicked", self.on_button_clicked)
self.vbox.pack_start(self.label, True, True, 0)
self.vbox.pack_start(self.number_label, True, True, 0)
self.vbox.pack_start(self.entry, True, True, 0)
self.vbox.pack_start(self.button, True, True, 0)
self.add(self.vbox)
def on_button_clicked(self, widget):
if int(self.entry.get_text()) == self.result:
subprocess.call("unity &", Shell=True)
else:
self.label.set_text("Wrong answer, try again.")
#----------------------------------------------------------------------
def main():
"""Application's entry point"""
win = PuzzleWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
if __== "__main__":
main()
Résultats:
Des recherches plus approfondies sont nécessaires, mais j’espère que cela servira de point de départ.
Cela peut être fait, mais cela demanderait beaucoup de savoir-faire technique. Le moyen le plus simple de le faire est d'écrire un script exécuté en tant que root:
Vous devrez probablement conserver la liste des problèmes mathématiques dans un fichier texte (ou une base de données) et utiliser les outils de ligne de commande imagemagick pour ajouter le texte du problème au papier peint de bureau. Utilisez cron pour planifier l'exécution de ce script de temps en temps (quotidiennement?).
Obtenir l'écran de connexion pour poser 3 questions différentes nécessiterait un lot de piratage personnalisé et impliquerait probablement le remplacement de grandes parties de votre système. Ce n'est donc pas recommandé. Même le "simple" script ci-dessus nécessite beaucoup de compétences et de connaissances et pourrait potentiellement endommager votre système s'il était mal fait.