나는 수학 숙제를하지 않도록 우분투를 너무 좋아하는 두 아이가 있습니다. 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()
결과 :
- 로그 아웃하면 로그인 화면에 Custom이라는 새 세션이 표시됩니다.
- 사용자 정의 세션을 선택하고 성공적으로 로그인 한 후 작은 PyGtk (pygobject 사용) 창이 표시되어 수학 퍼즐을 요구합니다. 상단 표시 줄, 실행기 및 나머지 기본 데스크탑 위젯은 없습니다.
- 올바르게 대답하면 Unity 가로 드됩니다 …
추가 연구가 필요하지만 시작점으로 도움이되기를 바랍니다.
답변
이 수 할 수 있지만, 기술적 인 노하우를 많이 걸릴 것이다. 루트로 실행되는 스크립트를 작성하여이를 수행하는 가장 간단한 방법은 다음과 같습니다.
- 주어진 질문에 대한 답변으로 비밀번호를 자동 변경합니다.
- 그들이 답변하려고하는 질문을 표시하기 위해 바탕 화면 배경 무늬를 변경
수학 문제 목록을 텍스트 파일 (또는 데이터베이스)로 유지하고 imagemagick 명령 줄 도구를 사용하여 문제 텍스트를 데스크탑 배경 무늬에 추가해야합니다. cron을 사용하여 스크립트가 너무 자주 실행되도록 예약하십시오 (매일?).
로그인 화면에 3 가지 다른 질문을하려면 많은 사용자 지정 해킹 이 필요하며 시스템의 많은 부분을 교체해야 할 수 있으므로 권장하지 않습니다. 위의 “간단한”스크립트조차 많은 기술과 지식이 필요하며 잘못 수행하면 시스템이 손상 될 수 있습니다.