Ce qui suit est testé avec Ubuntu 13.04 et Python du système, en utilisant les liaisons Gtk (PyGobject).
Voici cependant un moyen un peu sale et qui nécessite plus d'investigation:
Sommaire
Ajoutez un .desktop
fichier à /usr/share/xsessions
nous le nommeronscustom
Ajoutez un .xsession
fichier à l'utilisateur en question (vos enfants), nous nommerons leur utilisateur commekid
Créez l'application graphique Python pour le casse-tête mathématique et exécutez-la .xsession
, nous la nommeronspuzzle.py
Détails
sudo vi /usr/share/xsessions/custom.desktop
Ajoutez les éléments suivants 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
Ajoutez les éléments suivants dans le fichier:
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
Ajoutez les éléments suivants 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 __name__ == "__main__":
main()
Résultats:
- Si vous vous déconnectez, sur l'écran de connexion, vous verrez une nouvelle session nommée Custom.
- En choisissant la session personnalisée et après une connexion réussie, vous serez présenté par une petite fenêtre PyGtk (utilisant pygobject) demandant un puzzle mathématique. Il n'y aura pas de barre supérieure, de lanceur et le reste des widgets de bureau par défaut:
- Si vous répondez correctement, Unity se chargera ...
Il a besoin de recherches supplémentaires mais j'espère que cela aidera comme point de départ.