Sau đây được thử nghiệm với Ubuntu 13.04 và Python của hệ thống, sử dụng các liên kết Gtk (PyGobject).
Đây là một cách hơi bẩn và nó cần được điều tra nhiều hơn:
Tóm lược
Thêm một .desktop
tập tin tại /usr/share/xsessions
chúng tôi sẽ đặt tên cho nócustom
Thêm một .xsession
tệp tại người dùng trong câu hỏi (con bạn), chúng tôi sẽ đặt tên người dùng của họ làkid
Tạo ứng dụng GUI Python cho câu đố toán học và chạy nó từ đó .xsession
, chúng tôi sẽ đặt tên cho nó làpuzzle.py
Chi tiết
sudo vi /usr/share/xsessions/custom.desktop
Thêm vào sau đây trong tập tin:
[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
Thêm vào sau đây trong tập tin:
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
Thêm vào sau đây trong tập tin:
#!/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()
Các kết quả:
- Nếu bạn đăng xuất, tại màn hình đăng nhập, bạn sẽ thấy một phiên mới có tên Tùy chỉnh.
- Bằng cách chọn phiên tùy chỉnh và sau khi đăng nhập thành công, bạn sẽ thấy một cửa sổ PyGtk (sử dụng pygobject) nhỏ yêu cầu một câu đố toán học. Sẽ không có thanh trên cùng, trình khởi chạy và phần còn lại của các tiện ích máy tính để bàn mặc định:
- Nếu bạn trả lời đúng, Unity sẽ tải ...
Nó cần nghiên cứu thêm mặc dù tôi hy vọng rằng nó sẽ giúp như một điểm khởi đầu.