लॉगिन करने से पहले आपको मुझे इन सवालों का जवाब देना होगा 3?


22

मेरे दो बच्चे हैं जो उबंटू को इतना पसंद करते हैं कि वे अपना मैथ होमवर्क नहीं कर रहे हैं। तो मोंटी अजगर की भावना में, मैं उन्हें कुछ इस तरह पेश करना चाहूंगा:

"बंद करो। कौन मौत के पुल को पार करेगा मुझे इन सवालों का जवाब देना चाहिए तीन, दूसरे पक्ष को वह देख रहा है।"

लॉगिन में।

लॉगिन करने से पहले उन्हें कुछ गणित की समस्याओं को हल करना होगा।

मेरा प्रश्न है: क्या इस प्रकार की बात की जा सकती है?


क्या मैं अपना स्वयं का xscreensaver मॉड्यूल लिखकर ऐसा कर सकता हूं? या शायद इसे / etc / प्रोफाइल में जोड़ें?
user187493

1
आप अपने स्वयं के प्लगेबल ऑथेंटिकेशन मॉड्यूल (पीएएम) को लिखना चाहते हैं और लाइटवेट अभिवादन के साथ इसे कैसे एकीकृत कर सकते हैं।
इमेजिनरी

धन्यवाद, यह ठीक उसी तरह की सलाह है जिसकी मुझे तलाश थी :) मैं अपने सिस्टम को तोड़ने से बहुत डरता नहीं हूं। मुझे लगता है अगर मैं कुछ नहीं तोड़ रहा हूँ तो मैं इसे सही नहीं कर रहा हूँ।
user187493

जवाबों:


30

Gtk बाइंडिंग (PyGobject) का उपयोग करके उबंटू 13.04 और सिस्टम के पायथन के साथ निम्नलिखित का परीक्षण किया जाता है।

यहाँ एक तरह से थोड़ा गंदा है और इसे और अधिक जाँच की आवश्यकता है:

सारांश

  • एक .desktopफ़ाइल जोड़ें , /usr/share/xsessionsहम इसे नाम देंगेcustom

  • .xsessionप्रश्न में उपयोगकर्ता पर एक फ़ाइल जोड़ें (आपके बच्चे) हम उनके उपयोगकर्ता का नाम देंगेkid

  • गणित पहेली के लिए पायथन जीयूआई एप्लिकेशन बनाएं और इसे से चलाएं .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 का उपयोग करके) विंडो के साथ एक गणित पहेली के लिए पूछेंगे। कोई शीर्ष पट्टी, लॉन्चर और बाकी डिफ़ॉल्ट डेस्कटॉप विजेट नहीं होंगे:

एकता के लिए कस्टम पहुँच

  • यदि आप सही उत्तर देते हैं, तो एकता लोड हो जाएगी ...

हालांकि इसे और शोध की आवश्यकता है लेकिन मुझे उम्मीद है कि यह एक शुरुआती बिंदु के रूप में मदद करता है।


@ user187493 यदि आप समझते हैं कि आपकी समस्या हल हो गई है, तो उत्तर को स्वीकार करने पर विचार करें।
स्टेफ K

यदि आपको टेक्स्ट-आधारित समाधान से कोई आपत्ति नहीं है, तो क्या आप केवल एक सरल शेल स्क्रिप्ट नहीं लिख सकते हैं जो कुछ प्रश्न पूछते हैं और उत्तरों की जांच करते हैं। यदि उत्तर सही हैं, तो एक शुरुआत करें, अन्यथा, एक लॉगआउट करें। फिर, संपादित करें / आदि / पासवार्ड और इस स्क्रिप्ट को अपना लॉगिन शेल बनाएं। यह उपरोक्त समाधान की तुलना में कम सुरुचिपूर्ण है, लेकिन कोड को बनाए रखने और बनाए रखने के लिए सरल है। यह अपेक्षाकृत डिस्ट्रो / डेस्कटॉप स्वतंत्र भी होना चाहिए। आपको यह सुनिश्चित करने के लिए इसका परीक्षण करने की भी आवश्यकता होगी कि यह सिगिंट (Ctrl_C) जैसी चीजों को इनायत से संभालता है।
जो

बहुत अच्छा! इस तरह की चीजें हैं जो मुझे वास्तव में पसंद हैं।
जैकब व्लिजम

3

यह किया जा सकता है, लेकिन तकनीकी ज्ञान का एक बहुत ले जाएगा। एक स्क्रिप्ट जो रूट के रूप में चलाई जाती है, उसे लिखकर ऐसा करने का सबसे सरल तरीका:

  • किसी दिए गए प्रश्न के उत्तर के लिए स्वचालित रूप से अपना पासवर्ड बदलते हैं,
  • वे जिस प्रश्न का उत्तर देने की कोशिश कर रहे हैं उसे दिखाने के लिए अपने डेस्कटॉप वॉलपेपर को बदल दें

आपको एक टेक्स्ट फ़ाइल (या डेटाबेस) में गणित की समस्याओं की सूची रखने की आवश्यकता होगी, और डेस्कटॉप वॉलपेपर में समस्या पाठ को जोड़ने के लिए इमेजमैगिक कमांड लाइन टूल का उपयोग करना होगा। उस स्क्रिप्ट को हर बार (दैनिक?) चलाने के लिए क्रोन का उपयोग करें।

3 अलग-अलग प्रश्नों को पूछने के लिए लॉगिन स्क्रीन प्राप्त करने के लिए बहुत सी कस्टम हैकिंग की आवश्यकता होगी और इसमें संभवतः आपके सिस्टम के बड़े हिस्से को बदलना शामिल होगा, इसलिए यह अनुशंसित नहीं है। यहां तक ​​कि ऊपर "सरल" स्क्रिप्ट को बहुत अधिक कौशल और ज्ञान की आवश्यकता होती है, और गलत तरीके से किए जाने पर आपके सिस्टम को संभावित रूप से तोड़ सकता है।


आपके उत्तर के लिए धन्यवाद। मैं प्रश्नों और उत्तरों के एक मिनी डेटाबेस का उपयोग करने जा रहा था और मुझे इमेजमैगिक का उपयोग करने का विचार वास्तव में पसंद आया।
user187493
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.