나는 수학 숙제를하지 않도록 우분투를 너무 좋아하는 두 아이가 있습니다. Monty Python의 정신으로 다음과 같은 것을 제시하고 싶습니다.
"중지하십시오. 죽음의 다리를 건너는 사람은 저에게 보이는 세 가지 질문에 답해야합니다."
로그인 할 때
로그인하기 전에 몇 가지 수학 문제를 해결해야합니다.
내 질문은 :이 유형의 일을 할 수 있습니까?
나는 수학 숙제를하지 않도록 우분투를 너무 좋아하는 두 아이가 있습니다. Monty Python의 정신으로 다음과 같은 것을 제시하고 싶습니다.
"중지하십시오. 죽음의 다리를 건너는 사람은 저에게 보이는 세 가지 질문에 답해야합니다."
로그인 할 때
로그인하기 전에 몇 가지 수학 문제를 해결해야합니다.
내 질문은 :이 유형의 일을 할 수 있습니까?
답변:
다음은 Gtk 바인딩 (PyGobject)을 사용하여 Ubuntu 13.04 및 시스템의 Python에서 테스트되었습니다.
조금 더러운 방법이 있지만 여기에 더 많은 조사가 필요합니다.
개요
이름 .desktop
을 /usr/share/xsessions
지정할 파일을 추가하십시오.custom
.xsession
문제가있는 사용자 (자녀) 에게 파일을 추가합니다.kid
수학 퍼즐을위한 Python GUI 응용 프로그램을 만들고에서 실행하면 .xsession
다음과 같이 이름이 지정됩니다.puzzle.py
세부
sudo vi /usr/share/xsessions/custom.desktop
파일에 다음을 추가하십시오.
[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
파일에 다음을 추가하십시오.
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
vi /home/kid/puzzle.py
파일에 다음을 추가하십시오.
#!/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()
결과 :
추가 연구가 필요하지만 시작점으로 도움이되기를 바랍니다.
이 수 할 수 있지만, 기술적 인 노하우를 많이 걸릴 것이다. 루트로 실행되는 스크립트를 작성하여이를 수행하는 가장 간단한 방법은 다음과 같습니다.
수학 문제 목록을 텍스트 파일 (또는 데이터베이스)로 유지하고 imagemagick 명령 줄 도구를 사용하여 문제 텍스트를 데스크탑 배경 무늬에 추가해야합니다. cron을 사용하여 스크립트가 너무 자주 실행되도록 예약하십시오 (매일?).
로그인 화면에 3 가지 다른 질문을하려면 많은 사용자 지정 해킹 이 필요하며 시스템의 많은 부분을 교체해야 할 수 있으므로 권장하지 않습니다. 위의 "간단한"스크립트조차 많은 기술과 지식이 필요하며 잘못 수행하면 시스템이 손상 될 수 있습니다.