Pesan khusus (dapat diedit) untuk setiap pengguna setelah login


11

Komputer sedang digunakan oleh tiga pengguna (+1 admin) dan mereka menggunakan login persatuan. Tiga pengguna datang, menggunakan komputer dan keluar. Saya harus memberikan beberapa instruksi, berita, dan detail setiap kali mereka masuk.

Saya ingin memiliki utilitas / alat di mana saya dapat mengetik pesan khusus untuk setiap pengguna. Pesan terbaru kemudian akan ditampilkan di desktop (untuk setiap pengguna) (dengan tanggal edit terakhir saya) untuk mengatakan 10-15 detik. Salinan teks juga tersedia (untuk pengguna) di suatu tempat dengan semua pesan dan tanggal seperti log.

masukkan deskripsi gambar di sini

* Admin memiliki akses SSH ke sistem.

Saya tidak yakin apakah ini mungkin (dan mungkin saya mencari terlalu banyak!).


Bisa diselesaikan. Apa versi Ubuntu yang Anda targetkan? Apakah popup boleh? Atau Anda lebih suka teks pada layar seperti contoh Anda?
Sergiy Kolodyazhnyy

Menjalankan 14,04 LTS dan tidak ada rencana untuk memutakhirkan dalam waktu dekat. Munculan / pemberitahuan baik-baik saja jika tetap beberapa detik (~ 10-15 detik)
ankit7540

Saya sudah mengimplementasikan skrip cepat, memposting jawaban. Itu memungkinkan membuat file dan file itu akan dicocokkan dengan setiap pengguna. Beri tahu saya fungsi apa yang ingin Anda tambahkan di sana, dan jika Anda membutuhkan klarifikasi lainnya. Script tidak mewah, tetapi cukup stabil.
Sergiy Kolodyazhnyy

Hai @ ankit7540 memposting jawaban saya, di "edisi" pertama, lupa menyebutkan untuk membuat skrip dieksekusi, tapi itu mungkin sudah jelas :)
Jacob Vlijm

Terima kasih atas upaya Anda @Serg: Saya suka pendekatannya, izinkan saya menguji dan membalas.
ankit7540

Jawaban:


11

Anda dapat melakukannya di pengaturan berikut, yang akan menghasilkan jendela semi-transparan, tetap untuk waktu yang sewenang-wenang:

  1. Buat di direktori (apa saja), di mana masing-masing pengguna setidaknya memiliki izin baca , untuk setiap pengguna file pesan, persis diberi nama setelah setiap nama pengguna pengguna (nama login), tanpa ekstensi, mis.

    jacob
    

    Tambahkan teks ke file sebagai pesan Anda. Jika Anda menambahkan pesan baru , mulailah dengan ###, skrip kemudian akan secara otomatis menampilkan pesan terakhir. Teks dapat berisi apa pun yang Anda suka, itu akan terlihat persis seperti Anda memasukkannya ke dalam file.

    • The terbaru pesan, akan disalin sebagai latest_message.txtdirektori home user untuk referensi.

    • Karena itu, jendela akan tetap selama 15 detik, tetapi Anda dapat mengaturnya ke nilai apa pun, bahkan membuatnya secara otomatis tergantung pada panjang teks.


    Contoh file dapat terlihat seperti:

    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!
    

    Pesannya kemudian akan terlihat seperti:

    masukkan deskripsi gambar di sini

  2. Salin skrip di bawah ini ke file kosong, edit di bagian kepala skrip Anda path ke folder tempat Anda menyimpan pesan-pesan pengguna. Simpan skrip seperti show_personalmessagedalam (mis.) /usr/local/bin(Yang seharusnya ada di dalam $PATH dan membuatnya dapat dieksekusi (!) (Tanpa ekstensi)

    #!/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. Buat peluncur di /etc/xdg/autostart

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

    Tidur 10 adalah untuk memastikan desktop "siap" untuk membuka jendela.

Penjelasan

  • Peluncur dalam /etc/xdg/autostartmenjalankan perintah untuk setiap pengguna saat masuk.
  • Peluncur kemudian menjalankan jendela (dipanggil oleh perintah show_personalmessage), yang mencari pesan yang dipersonalisasi di direktori yang Anda tentukan. Selain itu. Pesan terbaru disalin ke direktori home pengguna.
  • Jika diperlukan, jalur ke pesan dapat diubah, bahkan dibuat khusus pengguna dengan menggunakan getpass-module, sehingga skrip (jendela) akan mencari file bernama khusus pengguna dalam direktori. Harap sebutkan jika itu diperlukan.

Selain itu

Jendela (Gtk)

  • dapat dibuat untuk tetap di bawah segalanya, seolah-olah itu akan menjadi bagian dari latar belakang
  • dapat dibuat tetap di atas segalanya
  • dapat dibuat dekat

dll, dll ...


EDIT

Untuk menghemat waktu menulis pesan, seperti yang dibahas dalam obrolan , di bawah versi skrip tempat Anda dapat menyertakan beberapa bagian "permanen":

  • premsg, yang seharusnya tepat di bawah "Selamat datang pengguna x", dan isi pesan Anda, dan
  • postmsg, yang muncul di bagian bawah pesan Anda.

Kedua bagian dapat disetel ke tidak ada, hanya dengan menetapkan ""sebagai nilai.

masukkan deskripsi gambar di sini

Naskah

#!/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()

Catatan

Tentu saja, seperti halnya badan pesan , Anda dapat mengubah skrip untuk membaca pesan sebelum dan sesudah dari sebuah file, yang membuatnya lebih nyaman untuk dipelihara. Apakah itu seperti ini, karena alasan kesederhanaan dalam jawabannya.


Mencoba. Ini bekerja dengan sangat baik. Melihat kode saya mengerti bagaimana mengubah waktu tetap. Satu pertanyaan: Bagaimana jika saya tidak memiliki akses SSH ke rumah pengguna (tetapi hanya ke rumah saya)?
ankit7540

Anda (atau saya) dapat mengatur jalur apa pun, tetapi kami harus menggunakannya getpasskemudian untuk membuat setiap pengguna secara otomatis meminta file yang disebutkan. Jalan apa yang akan Anda pikirkan? Itu harus menjadi jalur yang setiap pengguna memiliki akses untuk membaca. Tunggu, akan diedit sebentar lagi ...
Jacob Vlijm

@ ankit7540 mengeditnya ke dalam skrip (dan ke dalam penjelasan).
Jacob Vlijm

@ ankit7540 Ah, saya melihat Anda baris pertama: "Selamat datang pengguna ..." Apakah itu penting bagi Anda? hanya satu baris dalam kode jika itu.
Jacob Vlijm

Tentang baris "Selamat datang $ pengguna", Anda bisa memberi tahu saya di sini dan saya dapat menambahkannya dalam skrip. Selain itu, anggap pengguna memiliki folder /home/message,. Akan lebih baik untuk menyalin teks pesan terbaru (catenate dll ..) dalam file tetap (untuk referensi)
ankit7540

6

Skrip di bawah ini memungkinkan admin untuk menyimpan pesan yang dipersonalisasi dalam bentuk username_mm_dd_yyyy.txtdi direktori yang ditentukan admin. Nama pengguna ditentukan secara otomatis dan dicocokkan dengan nama file dan tanggal file yang akan ditampilkan.

Script juga dapat memiliki .desktopentri yang akan ditempatkan ke /etc/xdg/autostartdirektori. Itu akan membuat skrip ditampilkan untuk setiap pengguna. Atau Anda dapat menempatkan .desktopfile ke direktori masing-masing pengguna ~/.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

Di bawah ini Anda dapat melihat demo kecil skrip sedang beraksi. Saya telah membuat file dalam format yang ditentukan di /tmpfolder saya

masukkan deskripsi gambar di sini


Maaf membuat anda menunggu. Ini bekerja sangat bagus. Saya suka tombol 'Batal' dan 'OK'. Saya menggunakannya dengan entri .desktop dan berfungsi dengan sempurna!
ankit7540

@ ankit7540 Senang Anda menyukainya. Adakah fitur tambahan yang Anda ingin saya tambahkan?
Sergiy Kolodyazhnyy

Anggap pengguna memiliki folder /home/message,. Akan lebih baik untuk menyalin file pesan terakhir dan tetap di sana untuk referensi.
ankit7540

@ ankit7540 bisa dilakukan. Ini hanya masalah menambahkan baris dengan cpperintah, argumen pertama adalah salinan admin dan argumen kedua /home/$( _get_username )/messages/$FILE.txtsaya perlu tidur tetapi saya dapat menambahkannya di pagi hari. Itu hanya satu baris.
Sergiy Kolodyazhnyy

Dan jika Anda ingin catenate file itu hanyacat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
Sergiy Kolodyazhnyy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.