ข้อความที่กำหนดเอง (แก้ไขได้) สำหรับผู้ใช้แต่ละคนหลังจากเข้าสู่ระบบ


11

มีการใช้คอมพิวเตอร์โดยผู้ใช้สามคน (+1 ผู้ดูแลระบบ) และพวกเขาใช้การเข้าสู่ระบบสามัคคี ผู้ใช้สามคนเข้ามาใช้คอมพิวเตอร์และออกจากระบบ ฉันต้องให้คำแนะนำข่าวสารและรายละเอียดทุกครั้งที่เข้าสู่ระบบ

ฉันต้องการเครื่องมือ / เครื่องมือที่ฉันสามารถพิมพ์ข้อความที่กำหนดเองให้กับผู้ใช้แต่ละคน ข้อความล่าสุดจะปรากฏบนเดสก์ท็อป (สำหรับผู้ใช้แต่ละคน) (พร้อมวันที่แก้ไขล่าสุดของฉัน) ประมาณ 10-15 วินาที สำเนาข้อความพร้อมใช้งาน (กับผู้ใช้) ที่ใดที่หนึ่งพร้อมกับข้อความและวันที่ทั้งหมดเช่นบันทึก

ป้อนคำอธิบายรูปภาพที่นี่

* ผู้ดูแลระบบสามารถเข้าถึงระบบ SSH ได้

ฉันไม่แน่ใจว่าสิ่งนี้เป็นไปได้หรือไม่และอาจเป็นเพราะฉันกำลังมองหามากเกินไป!


สามารถทำได้. รุ่นเป้าหมายของ Ubuntu คืออะไร? ป๊อปอัปตกลงไหม หรือคุณชอบข้อความบนหน้าจอเหมือนที่ตัวอย่างแสดง
Sergiy Kolodyazhnyy

ใช้งาน 14.04 LTS และไม่มีแผนจะอัปเกรดได้ตลอดเวลาเร็ว ๆ นี้ ป๊อปอัป / การแจ้งเตือนนั้นใช้ได้ถ้าพวกเขาอยู่สักครู่ (~ 10-15 วินาที)
ankit7540

ฉันใช้สคริปต์อย่างรวดเร็วโพสต์คำตอบ อนุญาตให้สร้างไฟล์และไฟล์นั้นจะถูกจับคู่กับผู้ใช้แต่ละคน แจ้งให้เราทราบว่ามีฟังก์ชั่นอื่น ๆ อะไรบ้างที่คุณต้องการให้ฉันเพิ่มเข้าไปและในกรณีที่คุณต้องการคำชี้แจงอื่น ๆ สคริปต์ไม่แฟนซี แต่มีเสถียรภาพพอสมควร
Sergiy Kolodyazhnyy

สวัสดี @ ankit7540 โพสต์คำตอบของฉันในครั้งแรก "รุ่น" ลืมพูดถึงจะทำให้ปฏิบัติการสคริปต์ แต่ที่อาจจะเห็นได้ชัด :)
จาค็อบ Vlijm

ขอบคุณสำหรับความพยายามของคุณ @Serg: ฉันชอบวิธีการให้ฉันทดสอบและตอบกลับ
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()

บันทึก

แน่นอนเช่นเดียวกับเนื้อหาข้อความyoy สามารถปรับเปลี่ยนสคริปต์เพื่ออ่านข้อความก่อนและโพสต์จากไฟล์ซึ่งทำให้สะดวกในการบำรุงรักษามากยิ่งขึ้น มันเป็นอย่างนี้ด้วยเหตุผลของความเรียบง่ายในคำตอบ


พยายาม มันใช้งานได้ดีมาก ดูที่รหัสฉันเข้าใจวิธีเปลี่ยนเวลาที่อยู่ คำถามหนึ่ง: ถ้าฉันไม่สามารถเข้าถึงบ้านของผู้ใช้ SSH (แต่ไปที่บ้านของฉัน)?
ankit7540

คุณ (หรือฉัน) สามารถกำหนดเส้นทางใดก็ได้ แต่เราจำเป็นต้องใช้มันgetpassเพื่อให้ผู้ใช้แต่ละคนร้องขอไฟล์ที่มีชื่อโดยอัตโนมัติ คุณจะมีเส้นทางไหนในใจ? ต้องเป็นเส้นทางที่ผู้ใช้แต่ละคนมีสิทธิ์เข้าถึงเพื่ออ่าน เดี๋ยวก่อนจะแก้ไขในอีกไม่กี่นาที ...
Jacob Vlijm

@ ankit7540 แก้ไขมันลงในสคริปต์ (และเป็นคำอธิบาย)
Jacob Vlijm

@ ankit7540 อ่าฉันเห็นคุณบรรทัดแรก: "ยินดีต้อนรับผู้ใช้ ... " นั่นสำคัญสำหรับคุณหรือไม่ เป็นเพียงบรรทัดในโค้ดถ้ามันเป็น
Jacob Vlijm

เกี่ยวกับบรรทัดนั้น "ยินดีต้อนรับผู้ใช้ $" คุณสามารถบอกฉันได้ที่นี่และฉันสามารถเพิ่มได้ในสคริปต์ /home/messageนอกจากนี้ควรพิจารณาใช้มีโฟลเดอร์ มันจะดีเพื่อคัดลอกข้อความที่ผ่านมา (catenate ฯลฯ .. ) ในไฟล์คงที่ (สำหรับการอ้างอิง)
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

ตะโกนคุณสามารถดูตัวอย่างเล็ก ๆ ของสคริปต์ในการดำเนินการ ฉันสร้างไฟล์ในรูปแบบที่ระบุใน/tmpโฟลเดอร์ของฉัน

ป้อนคำอธิบายรูปภาพที่นี่


ขอโทษที่ทำให้รอ. มันใช้งานได้ดีสุด ๆ ฉันชอบปุ่ม 'ยกเลิก' และ 'ตกลง' ฉันใช้กับรายการ .desktop และใช้งานได้สมบูรณ์แบบ!
ankit7540

@ ankit7540 ดีใจที่คุณชอบ มีคุณสมบัติเพิ่มเติมใด ๆ ที่คุณต้องการให้ฉันเพิ่ม?
Sergiy Kolodyazhnyy

พิจารณาผู้ใช้มีโฟลเดอร์, /home/message. มันเป็นการดีที่จะคัดลอกไฟล์ข้อความล่าสุดและเก็บไว้เพื่ออ้างอิง
ankit7540

@ ankit7540 สามารถทำได้ มันเป็นเพียงเรื่องของการเพิ่มบรรทัดที่มีcpคำสั่งอาร์กิวเมนต์แรกคือสำเนาของผู้ดูแลระบบและอาร์กิวเมนต์ที่สองที่/home/$( _get_username )/messages/$FILE.txtฉันต้องนอน แต่ฉันสามารถเพิ่มในตอนเช้า มันเป็นเพียงหนึ่งบรรทัด
Sergiy Kolodyazhnyy

และถ้าคุณต้องการที่จะเร่งไฟล์ที่เพียงแค่cat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.