Ubuntuが大好きな2人の子供がいるので、数学の宿題をしていません。モンティパイソンの精神で、次のようなものを提示したいと思います。
「やめなさい。死の橋を渡るのは、彼が見る反対側から、これらの質問3に答えなければならない。」
ログイン時に。
ログインする前に、いくつかの数学の問題を解決する必要があります。
私の質問はこういうことです。
Ubuntuが大好きな2人の子供がいるので、数学の宿題をしていません。モンティパイソンの精神で、次のようなものを提示したいと思います。
「やめなさい。死の橋を渡るのは、彼が見る反対側から、これらの質問3に答えなければならない。」
ログイン時に。
ログインする前に、いくつかの数学の問題を解決する必要があります。
私の質問はこういうことです。
回答:
以下は、Gtkバインディング(PyGobject)を使用して、Ubuntu 13.04とシステムのPythonでテストされています。
これは少し汚い方法の1つであり、さらに調査が必要です。
概要
名前を付けて.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()
結果:
ただし、さらに調査する必要がありますが、出発点として役立つことを願っています。
それはできますが、多くの技術的ノウハウが必要です。これを行う最も簡単な方法は、rootとして実行されるスクリプトを記述することです。
数学の問題のリストをテキストファイル(またはデータベース)に保存し、imagemagickコマンドラインツールを使用して、問題のテキストをデスクトップの壁紙に追加する必要があります。cronを使用して、そのスクリプトを頻繁に(毎日?)実行するようにスケジュールします。
ログイン画面に3つの異なる質問を入力するには、多くのカスタムハッキングが必要であり、おそらくシステムの大部分を交換する必要があるため、お勧めしません。上記の「単純な」スクリプトでさえ、多くのスキルと知識を必要とし、間違った方法でシステムを破壊する可能性があります。