Прежде чем войти в систему, вы должны ответить мне на эти вопросы 3?

У меня двое детей, которые любят Ubuntu так сильно, что они не выполняют свою домашнюю работу по математике. Итак, в духе Монти Пайтона, я хотел бы представить им что-то вроде:

«Стоп. Кто пересечет Мост Смерти, должен ответить на эти три вопроса, прежде чем он увидит ту сторону». [ 111]

при входе в систему.

Им придется решить несколько математических задач, прежде чем они смогут войти в систему.

Мой вопрос: можно ли это сделать?

22
задан 26 August 2013 в 21:15

2 ответа

Следующее тестируется с Ubuntu 13.04 и Python системы, с помощью привязки Gtk (PyGobject).

Вот один путь, немного грязный, хотя и требуется больше расследования:

Сводка

  • Добавьте a .desktop файл в /usr/share/xsessions мы назовем его custom

  • Добавьте .xsession файл в рассматриваемом пользователе (Ваши дети) мы назовем их пользователя как kid

  • Создайте приложение GUI Python для математической загадки и выполните его от .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()

Результаты:

  • Если Вы выйдете из системы, то в экране входа в систему Вы будете видеть новую сессию под названием Пользовательский.
  • Путем выбора пользовательской сессии и после успешного входа в систему Вы будете представленный небольшим PyGtk (использующий pygobject) окно, просящее математическую загадку. Не будет никакой главной панели, средства запуска и остальной части настольных виджетов по умолчанию:

Custom access to Unity

  • Если Вы ответите правильно, то Единица загрузится...

Этому нужно дальнейшее исследование хотя, но я надеюсь, что это помогает как начальная точка.

30
ответ дан 26 August 2013 в 21:15

можно сделать, но потребуется много технических ноу-хау. Самый простой способ сделать это - написать скрипт, который запускается от имени пользователя root:

  • автоматически изменяет свой пароль (пароли) на ответ на заданный вопрос,
  • меняет рабочий стол. обои, чтобы показать вопрос, на который они пытаются ответить

Возможно, вам понадобится сохранить список математических задач в текстовом файле (или базе данных) и использовать инструменты командной строки imagemagick, чтобы добавить проблему текст на рабочий стол. Используйте cron, чтобы запланировать выполнение этого скрипта так часто (ежедневно?).

Чтобы открыть экран входа в систему для запроса трех разных вопросов, потребуется много пользовательских хакеров, и, вероятно, потребуется замена больших частей вашей системы, поэтому это не рекомендуется. Даже «простой» сценарий, описанный выше, требует больших навыков и знаний, и может привести к поломке вашей системы, если все сделано неправильно.

0
ответ дан 26 August 2013 в 21:15

Другие вопросы по тегам:

Похожие вопросы: