लॉगिन के बाद प्रत्येक उपयोगकर्ता के लिए कस्टम (संपादन योग्य) संदेश


11

कंप्यूटर का उपयोग तीन उपयोगकर्ताओं (+1 व्यवस्थापक) द्वारा किया जा रहा है और वे एकता लॉगिन का उपयोग करते हैं। तीन उपयोगकर्ता आते हैं, कंप्यूटर का उपयोग करते हैं और लॉगआउट करते हैं। मुझे हर बार लॉगिन करने पर कुछ निर्देश, समाचार और विवरण देना होगा।

मैं एक उपयोगिता / उपकरण रखना चाहता हूं जहां मैं प्रत्येक उपयोगकर्ता के लिए एक कस्टम संदेश लिख सकता हूं। नवीनतम संदेश तब डेस्कटॉप पर प्रदर्शित किया जाएगा (प्रत्येक उपयोगकर्ता के लिए) (मेरे अंतिम संपादन की तारीख के साथ) 10-15 सेकंड के लिए। पाठ की एक प्रति भी उपलब्ध है (उपयोगकर्ता के लिए) सभी संदेशों और लॉग की तरह दिनांक के साथ कहीं।

यहाँ छवि विवरण दर्ज करें

* एडमिन के पास सिस्टम तक SSH की पहुंच है।

मुझे यकीन नहीं है कि यह संभव है (और हो सकता है कि मैं बहुत ज्यादा देख रहा हूँ!)।


हो सकता है। उबंटू का आपका लक्षित संस्करण क्या है? क्या पॉपअप ठीक हैं? या आप अपने उदाहरण शो की तरह ऑन-स्क्रीन पाठ पसंद करेंगे?
सर्गी कोलोडियाज़नी

14.04 एलटीएस चल रहा है और जल्द ही किसी भी समय अपग्रेड करने की कोई योजना नहीं है। पॉपअप / अधिसूचना ठीक है अगर वे कुछ सेकंड (~ 10-15 सेकंड) के लिए रहते हैं
ankit7540

मैंने एक त्वरित स्क्रिप्ट लागू की है, एक उत्तर पोस्ट किया है। यह एक फ़ाइल बनाने की अनुमति देता है और उस फ़ाइल को प्रत्येक उपयोगकर्ता से मिलान किया जाएगा। मुझे पता है कि आप मुझे किस अन्य कार्यक्षमता में जोड़ना चाहते हैं, और यदि आपको किसी अन्य स्पष्टीकरण की आवश्यकता है। स्क्रिप्ट फैंसी नहीं है, लेकिन काफी स्थिर है।
सर्गी कोलोडियाज़नी

हाय @ ankit7540 ने मेरा जवाब पोस्ट किया, पहले "संस्करण" में, स्क्रिप्ट को निष्पादन योग्य बनाने के लिए उल्लेख करना भूल गया, लेकिन यह स्पष्ट हो सकता है :)
याकूब व्लिजम

आपके प्रयासों के लिए धन्यवाद @ शेर: मुझे दृष्टिकोण पसंद है, मुझे परीक्षण करने और उत्तर देने दें।
ankit7540

जवाबों:


11

आप निम्न सेटअप में कर सकते हैं, जो एक अर्ध-पारदर्शी खिड़की का उत्पादन करेगा, एक मनमाना समय के लिए रहना:

  1. एक (किसी भी) निर्देशिका में बनाएं, जिसमें उपयोगकर्ताओं के प्रत्येक में कम से कम किया गया है पढ़ा अनुमतियाँ संदेश फ़ाइल प्रत्येक उपयोगकर्ता के लिए, वास्तव में प्रत्येक उपयोगकर्ता के उपयोगकर्ता नाम के बाद (नाम में लॉग) का नाम दिया, कोई विस्तार, जैसे

    jacob
    

    अपने संदेश के रूप में फ़ाइल में पाठ जोड़ें। यदि आप एक नया संदेश जोड़ते हैं , तो प्रारंभ करें ###, फिर स्क्रिप्ट स्वचालित रूप से अंतिम संदेश प्रदर्शित करेगी। पाठ में आपकी पसंद का कुछ भी हो सकता है, यह बिल्कुल वैसा ही दिखेगा जैसा आप इसे फ़ाइल में रखते हैं।

    • नवीनतम संदेश, के रूप में कॉपी किया जायेगा latest_message.txtसंदर्भ के लिए उपयोगकर्ता के घर निर्देशिका के लिए।

    • जैसा कि यह है, खिड़की 15 सेकंड के लिए रहेगी, लेकिन आप इसे किसी भी मूल्य पर सेट कर सकते हैं, यहां तक ​​कि यह स्वचालित रूप से पाठ की लंबाई पर निर्भर करता है।


    एक उदाहरण फ़ाइल की तरह लग सकता है:

    Vraag:
    Een aap op een fiets, hoe vind je zoiets?
    
    Opdracht:
    Geef antwoord op de vraag!
    
    ###
    Vraag:
    Hoe is de koffie vandaag?
    
    Opdracht:
    Zet het zelf even als het niet te drinken is!
    

    संदेश तब दिखेगा:

    यहाँ छवि विवरण दर्ज करें

  2. नीचे दी गई स्क्रिप्ट को एक खाली फाइल में कॉपी करें, अपनी स्क्रिप्ट के हेड सेक्शन में उस फोल्डर का पथ संपादित करें जिसमें आप उपयोगकर्ता के संदेशों को स्टोर करते हैं। स्क्रिप्ट को इस रूप show_personalmessageमें सहेजें (जैसे) /usr/local/bin(जो होना चाहिए $PATH और इसे निष्पादन योग्य बना सकता है (!) (कोई एक्सटेंशन नहीं)

    #!/usr/bin/env python3
    import subprocess
    import os
    import gi
    gi.require_version('Gtk', '3.0')
    from gi.repository import GObject, Gtk, Gdk, Pango
    from threading import Thread
    import time
    import getpass
    
    # --- set the path to the message files below, filename = username
    filedir = "/home/jacob/Bureaublad"
    # --- set the time to show the window below
    showtime = 15
    # ---
    
    # don't change anything below
    user = getpass.getuser()
    currmessage = os.environ["HOME"]+"/latest_message.txt"
    f = filedir+"/"+user
    text = "Welcome "+user+"\n\n"+open(f).read().split("###")[-1]
    open(currmessage, "wt").write(text)
    
    class Splash(Gtk.Window):
    
        def __init__(self):
            Gtk.Window.__init__(self, title="splashtitle")
            maingrid = Gtk.Grid()
            self.add(maingrid)
            maingrid.set_border_width(80)
            # set text for the spash window
            label = Gtk.Label(text)
            label.modify_font(Pango.FontDescription('Ubuntu 12'))
            maingrid.attach(label, 0, 0, 1, 1)
            self.stop = Thread(target=self.close_window)
            self.stop.start()
    
        def close_window(self):
            time.sleep(showtime)
            Gtk.main_quit()
    
    def splashwindow():
        window = Splash()
        window.set_decorated(False)
        window.set_resizable(False)
        window.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,0,0,1))
        window.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("grey"))
        window.set_opacity(0.8)
        window.set_position(Gtk.WindowPosition.CENTER)
        window.show_all()
        GObject.threads_init()
        Gtk.main()
    
    splashwindow()
    
  3. में एक लांचर बनाएँ /etc/xdg/autostart

    [Desktop Entry]
    Type=Application
    Name=Splash 
    Exec=/bin/bash -c "sleep 10 && show_personalmessage"
    

    नींद 10 यह सुनिश्चित करने के लिए है कि खिड़की खोलने के लिए डेस्कटॉप "तैयार" है।

व्याख्या

  • लॉग इन पर प्रत्येक उपयोगकर्ता के लिए/etc/xdg/autostart रन कमांड में लांचर ।
  • लॉन्चर तब विंडो चलाता है (कमांड द्वारा कहा जाता है show_personalmessage), जो आपके द्वारा निर्धारित डायरेक्टरी में व्यक्तिगत संदेश के लिए दिखता है। इसके अतिरिक्त। सबसे हालिया संदेश उपयोगकर्ता की होम निर्देशिका में कॉपी किया जाता है।
  • यदि आवश्यक हो, तो संदेश के पथ को परिवर्तित किया जा सकता है, यहां तक ​​कि getpass-module का उपयोग करके उपयोगकर्ता को विशिष्ट बनाया जा सकता है , ताकि स्क्रिप्ट (विंडो) एक निर्देशिका में उपयोगकर्ता-विशिष्ट नामित फ़ाइल की तलाश करेगी। कृपया उल्लेख करें कि क्या इसकी आवश्यकता होगी।

इसके अतिरिक्त

(Gtk) विंडो

  • सब कुछ से नीचे रहने के लिए बनाया जा सकता है, जैसे कि यह पृष्ठभूमि का हिस्सा होगा
  • सब कुछ के ऊपर रहने के लिए बनाया जा सकता है
  • बंद करने योग्य बनाया जा सकता है

आदि आदि...


संपादित करें

संदेश लिखने में समय बचाने के लिए, जैसा कि चैट में चर्चा की गई है , स्क्रिप्ट के एक संस्करण के नीचे जिसमें आप कुछ "स्थायी" खंड शामिल कर सकते हैं:

  • premsg, जो "वेलकम यूजर x", और आपके संदेश के मुख्य भाग के ठीक नीचे होना चाहिए, और
  • postmsg, जो आपके संदेश के निचले भाग के रूप में आता है।

दोनों वर्गों को ""मान के रूप में सेट करके, किसी को भी सेट नहीं किया जा सकता है ।

यहाँ छवि विवरण दर्ज करें

लिपी

#!/usr/bin/env python3
import subprocess
import os
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GObject, Gtk, Gdk, Pango
from threading import Thread
import time
import getpass

# --- set the path to the message files below, filename = username
filedir = "/path/to/message_directory"
# --- set the time to show the window below
showtime = 15
# --- set pre-message below. set premessage = "" for no pre-message
premsg = """We assume you read all 3782 instruction pages on how to use
Ubuntu before you push any button on this computer.
""" 
# --- set post-message below. set postmessage = "" for no post-message
postmsg = """Before you go to sleep tonight, make sure to brush your
teeth for at least half an hour
"""

# --- don't change anything below
user = getpass.getuser()
currmessage = os.environ["HOME"]+"/latest_message.txt"
f = filedir+"/"+user

text = "Welcome "+user+"\n\n"+premsg+"\n"+open(f).read().split("###")[-1]+"\n"+postmsg

open(currmessage, "wt").write(text)

class Splash(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="splashtitle")
        maingrid = Gtk.Grid()
        self.add(maingrid)
        maingrid.set_border_width(80)
        # set text for the spash window
        label = Gtk.Label(text)
        label.modify_font(Pango.FontDescription('Ubuntu 12'))
        maingrid.attach(label, 0, 0, 1, 1)
        self.stop = Thread(target=self.close_window)
        self.stop.start()

    def close_window(self):
        time.sleep(showtime)
        Gtk.main_quit()

def splashwindow():
    window = Splash()
    window.set_decorated(False)
    window.set_resizable(False)
    window.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,0,0,1))
    window.modify_fg(Gtk.StateFlags.NORMAL, Gdk.color_parse("white"))
    window.set_opacity(0.8)
    window.set_position(Gtk.WindowPosition.CENTER)
    window.show_all()
    GObject.threads_init()
    Gtk.main()

splashwindow()

ध्यान दें

बेशक, संदेश निकाय की तरह , यो एक फ़ाइल से पूर्व और पोस्ट संदेशों को पढ़ने के लिए स्क्रिप्ट को बदल सकता है, जो इसे बनाए रखने के लिए और भी सुविधाजनक बनाता है। जवाब में सादगी के कारणों के लिए क्या यह ऐसा था।


कोशिश की। यह बहुत अच्छी तरह से काम करता है। कोड को देखकर मुझे समझ में आया कि इसके रहने का समय कैसे बदलना है। एक प्रश्न: क्या होगा यदि मेरे पास उपयोगकर्ता के घर तक (लेकिन केवल मेरे घर तक) एसएसएच नहीं है?
अंकित an५४०

आप (या मैं) कोई भी रास्ता तय कर सकते हैं, लेकिन हमें इसका उपयोग getpassतब करने की आवश्यकता है, ताकि प्रत्येक उपयोगकर्ता नामांकित फ़ाइल का अनौपचारिक रूप से अनुरोध कर सके। आपके मन में क्या रास्ता होगा? यह एक ऐसा मार्ग होना चाहिए जिसे प्रत्येक उपयोगकर्ता ने पढ़ लिया है। रुकिए, एक मिनट में संपादित करेंगे ...
जैकब व्लिजम

@ ankit7540 ने इसे स्क्रिप्ट में (और स्पष्टीकरण में) संपादित किया।
जैकब व्लिजम

@ ankit7540 आह, मैं आपको पहली पंक्ति देखता हूं: "आपका स्वागत है उपयोगकर्ता ..." क्या यह आपके लिए महत्वपूर्ण है? यदि यह है तो कोड में एक पंक्ति है।
जैकब व्लिजम

उस लाइन "वेलकम $ यूजर" के बारे में, आप बस मुझे यहाँ बता सकते हैं और मैं इसे स्क्रिप्ट में जोड़ सकता हूँ। साथ ही, विचार उपयोगकर्ता एक फ़ोल्डर है /home/message। एक निश्चित फ़ाइल में (संदर्भ के लिए) हाल के संदेश टेक्स्ट (कैटेनैट आदि ..) की प्रतिलिपि बनाना अच्छा होगा
ankit7540

6

स्क्रिप्ट बलो व्यवस्थापक को व्यक्तिगत संदेश username_mm_dd_yyyy.txtको व्यवस्थापक-परिभाषित निर्देशिका में फ़ॉर्म में संग्रहीत करने की अनुमति देता है । उपयोगकर्ता नाम स्वचालित रूप से निर्धारित किए जाते हैं और फ़ाइल नाम और प्रदर्शित होने की तारीख के खिलाफ मिलान किए जाते हैं।

स्क्रिप्ट में एक .desktopप्रविष्टि भी हो सकती है जिसे /etc/xdg/autostartनिर्देशिका में रखा जाना है । वह स्क्रिप्ट प्रत्येक उपयोगकर्ता के लिए प्रदर्शित होगी। वैकल्पिक रूप से आप .desktopफ़ाइल को प्रत्येक व्यक्ति की ~/.config/autostartनिर्देशिका में रख सकते हैं ।

#!/bin/bash
_get_username()
{
  qdbus  com.canonical.Unity  \
        /com/canonical/Unity/Session \
        com.canonical.Unity.Session.UserName
}

_get_date()
{
  date +%m_%d_%Y
}

_show_error()
{
  MESSAGE="Can't read the file or file doesn't exist. Contact the admin for assistance"

  zenity --error --title="Ooops, something went wrong!" --text="$MESSAGE"
}

main()
{
  # replace this with the actual directory 
  # that you want to use for storing messages
  MESSAGES_DIRECTORY="/tmp"

  # file name is made up of username_mm_dd_yyyy
  FILE="$MESSAGES_DIRECTORY"/"$( _get_username )"_"$( _get_date )".txt
  echo "$FILE"
  if [ -r "$FILE"   ] ; then
     zenity --text-info  --title="Welcome, $( _get_username )" --filename="$FILE"
  else
     _show_error
  fi
}

main

Bellow आप कार्रवाई में स्क्रिप्ट का एक छोटा डेमो देख सकते हैं। मैंने अपने /tmpफ़ोल्डर में निर्दिष्ट प्रारूप में फ़ाइल बनाई है

यहाँ छवि विवरण दर्ज करें


इन्तिजार कराने के लिये क्षमा करें। यह सुपर अच्छा काम करता है। मुझे बटन 'कैंसल' और 'ओके' पसंद हैं। मैंने इसे .desktop प्रविष्टि के साथ उपयोग किया और यह एकदम सही काम करता है!
ankit7540

@ ankit7540 आपको यह पसंद है। कोई अतिरिक्त सुविधाएँ जो आप मुझे जोड़ना चाहते हैं?
सर्गी कोलोडियाज़नी

, पर विचार करें उपयोगकर्ता एक फ़ोल्डर है /home/message। हाल की संदेश फ़ाइल की प्रतिलिपि बनाना और संदर्भ के लिए वहां रखना अच्छा होगा।
ankit7540

@ ankit7540 किया जा सकता है। यह केवल cpकमांड के साथ एक लाइन जोड़ने की बात है , पहला तर्क एडमिन की कॉपी है और दूसरा तर्क /home/$( _get_username )/messages/$FILE.txtमुझे सोने की आवश्यकता है लेकिन मैं इसे सुबह जोड़ सकता हूं। यह सिर्फ एक लाइन है।
सर्गी कोलोडियाज़नी

और अगर आप फ़ाइल को सिर्फ कैटसेज़ करना चाहते हैंcat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
सर्गी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.