首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在登录之前,你必须回答我这些问题3?

在登录之前,你必须回答我这些问题3?
EN

Ask Ubuntu用户
提问于 2013-08-26 17:15:36
回答 2查看 567关注 0票数 22

我有两个孩子非常喜欢Ubuntu,所以他们没有做数学作业。因此,本着Monty Python的精神,我想向他们介绍如下内容:

“停下来,谁要穿过死亡之桥,在他看到另一边之前,回答我这三个问题。”

在登录的时候。

他们必须先解决几个数学题才能登录。

我的问题是:这类事情能做吗?

EN

回答 2

Ask Ubuntu用户

回答已采纳

发布于 2013-08-26 23:01:06

下面是用Ubuntu13.04和系统的Python测试的,使用Gtk绑定(PyGobject)。

不过,有一种方法有点脏,需要更多的调查:

摘要

  • .desktop上添加一个/usr/share/xsessions文件,我们将命名为custom
  • 在有问题的用户(您的孩子)处添加一个.xsession文件,我们将命名他们的用户为kid
  • 为数学难题创建Python应用程序并从.xsession运行它,我们将它命名为puzzle.py

详细信息

  • sudo vi /usr/share/xsessions/custom.desktop

在文件中添加以下内容:

代码语言:javascript
复制
[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

在文件中添加以下内容:

代码语言:javascript
复制
#!/bin/bash
lightdm &
exec /home/kid/puzzle.py
  • vi /home/kid/puzzle.py

在文件中添加以下内容:

代码语言:javascript
复制
#!/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()

结果:

  • 如果您退出,您将在登录屏幕上看到一个名为“自定义”的新会话。
  • 通过选择自定义会话并在成功登录后,您将通过一个小PyGtk (使用pygobject)窗口,请求一个数学谜题。将没有顶部栏、启动程序和默认桌面小部件的其余部分:
  • 如果你答对了,团结号就会装载..。

虽然它还需要进一步的研究,但我希望它作为一个起点有所帮助。

票数 30
EN

Ask Ubuntu用户

发布于 2013-08-26 17:50:23

这是可以做到的,但需要很多技术诀窍。最简单的方法是编写一个以root形式运行的脚本,以便:

  • 自动将密码(S)更改为给定问题的答案,
  • 更改桌面壁纸以显示他们要回答的问题。

您可能需要将数学问题列表保存在文本文件(或数据库)中,并使用imagemagick命令行工具将问题文本添加到桌面壁纸中。使用cron来安排脚本的运行频率(每天?)。

让登录屏幕询问3个不同的问题需要大量的自定义黑客,并且可能涉及替换系统的大部分部分,因此不建议使用。即使上面的“简单”脚本也需要大量的技能和知识,如果做错了,可能会破坏您的系统。

票数 3
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/337546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档