Quanto segue viene testato con Ubuntu 13.04 e Python di sistema, usando i collegamenti Gtk (PyGobject).
Qui c'è un modo un po 'sporco e ha bisogno di ulteriori indagini:
Sommario
Aggiungi un .desktop
file a /usr/share/xsessions
noi lo nomineremocustom
Aggiungi un .xsession
file all'utente in questione (i tuoi figli) che chiameremo il loro utente comekid
Crea l'applicazione Python GUI per il puzzle matematico ed eseguilo .xsession
, lo chiameremo comepuzzle.py
Dettagli
sudo vi /usr/share/xsessions/custom.desktop
Aggiungi quanto segue nel file:
[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
Aggiungi quanto segue nel file:
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
Aggiungi quanto segue nel file:
#!/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()
risultati:
- Se esci, nella schermata di accesso vedrai una nuova sessione chiamata Personalizzata.
- Scegliendo la sessione personalizzata e dopo aver effettuato l'accesso con successo, ti verrà presentata una piccola finestra di PyGtk (usando pygobject) che chiede un puzzle matematico. Non ci saranno barra in alto, launcher e il resto dei widget desktop predefiniti:
- Se rispondi correttamente, Unity caricherà ...
Ha bisogno di ulteriori ricerche, ma spero che aiuti come punto di partenza.