Messaggio personalizzato (modificabile) per ciascun utente dopo l'accesso


11

Il computer è utilizzato da tre utenti (+1 amministratore) e utilizzano il login di unità. Vengono i tre utenti, usano il computer e disconnettersi. Devo dare alcune istruzioni, notizie e dettagli ogni volta che accedono.

Voglio avere un programma di utilità / strumento in cui posso digitare un messaggio personalizzato per ciascun utente. L'ultimo messaggio verrà quindi visualizzato sul desktop (per ciascun utente) (con la data della mia ultima modifica) per 10-15 secondi. Una copia del testo sarà anche disponibile (per l'utente) da qualche parte con tutti i messaggi e le date come un registro.

inserisci qui la descrizione dell'immagine

* L'amministratore ha accesso SSH al sistema.

Non sono sicuro che sia possibile (e forse sto cercando troppo!).


Può essere fatto. Qual è la tua versione mirata di Ubuntu? I popup sono ok? O preferisci il testo sullo schermo come mostra il tuo esempio?
Sergiy Kolodyazhnyy

Esecuzione di 14.04 LTS e nessun programma di aggiornamento in qualunque momento presto. I popup / notifiche vanno bene se rimangono per alcuni secondi (~ 10-15 sec)
ankit7540

Ho implementato uno script veloce, pubblicato una risposta. Permette di creare un file e quel file verrà abbinato a ciascun utente. Fammi sapere quali altre funzionalità vorresti che aggiungessi lì e nel caso in cui avessi bisogno di altri chiarimenti. La sceneggiatura non è elegante, ma abbastanza stabile.
Sergiy Kolodyazhnyy,

Ciao @ ankit7540 ha pubblicato la mia risposta, nella prima "edizione", ho dimenticato di menzionare per rendere eseguibile la sceneggiatura, ma ciò potrebbe essere ovvio :)
Jacob Vlijm,

Grazie per i tuoi sforzi @Serg: mi piace l'approccio, fammi testare e rispondere.
ankit7540

Risposte:


11

Puoi farlo nella seguente configurazione, che produrrà una finestra semitrasparente, rimanendo per un tempo arbitrario:

  1. Creare in una (qualsiasi) directory, in cui almeno ciascuno degli utenti abbia i permessi di lettura , per ogni utente un file di messaggi, chiamato esattamente con il nome utente di ciascun utente (nome di accesso), senza estensione, ad es.

    jacob
    

    Aggiungi testo al file come messaggio. Se aggiungi un nuovo messaggio, inizia con ###, lo script visualizzerà automaticamente l'ultimo messaggio. Il testo può contenere tutto ciò che ti piace, sembrerà esattamente come lo hai inserito nel file.

    • L' ultimo messaggio verrà copiato come latest_message.txtriferimento nella home directory dell'utente.

    • Così com'è, la finestra rimarrà per 15 secondi, ma puoi impostarla su qualsiasi valore, anche facendolo dipendere automaticamente dalla lunghezza del testo.


    Un file di esempio potrebbe apparire come:

    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!
    

    Il messaggio quindi sarebbe simile a:

    inserisci qui la descrizione dell'immagine

  2. Copia lo script seguente in un file vuoto, modifica nella sezione head dello script il percorso della cartella in cui memorizzi i messaggi degli utenti. Salvare lo script come show_personalmessagein (ad es.) /usr/local/bin(Che dovrebbe essere in $PATH e renderlo eseguibile (!) (Senza estensione)

    #!/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. Crea un lanciatore in /etc/xdg/autostart

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

    La sospensione 10 è assicurarsi che il desktop sia "pronto" per aprire la finestra.

Spiegazione

  • I lanciatori nei /etc/xdg/autostartcomandi di esecuzione per ogni utente al momento dell'accesso
  • Il programma di avvio esegue quindi la finestra (chiamata dal comando show_personalmessage), che cerca il messaggio personalizzato nella directory definita. Inoltre. Il messaggio più recente viene copiato nella home directory dell'utente.
  • Se necessario, il percorso del messaggio può essere modificato, anche reso specifico per l'utente utilizzando il getpass-module, in modo che lo script (finestra) cercherà un file con nome specifico dell'utente in una directory. Si prega di indicare se ciò sarebbe necessario.

Inoltre

La finestra (Gtk)

  • può essere fatto per rimanere al di sotto di tutto, come se fosse parte dello sfondo
  • può essere fatto rimanere in cima a tutto
  • può essere reso richiudibile

ecc, ecc ...


MODIFICARE

Per risparmiare tempo scrivendo messaggi, come discusso in chat , sotto una versione dello script in cui è possibile includere alcune sezioni "permanenti":

  • premsg, che dovrebbe essere appena sotto "Benvenuto utente x", e il corpo del tuo messaggio, e
  • postmsg, che viene visualizzato nella parte inferiore del messaggio.

Entrambe le sezioni non possono essere impostate su nessuna, semplicemente impostando ""come valore.

inserisci qui la descrizione dell'immagine

Il copione

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

Nota

Naturalmente, proprio come il corpo del messaggio , è possibile modificare lo script per leggere i messaggi pre e post da un file, il che rende ancora più conveniente la manutenzione. È stato così, per motivi di semplicità nella risposta.


Provato. Funziona molto bene. Guardando il codice capisco come modificare il tempo di permanenza. Una domanda: cosa succede se non ho accesso SSH a casa dell'utente (ma solo a casa mia)?
ankit7540

Tu (o I) puoi impostare qualsiasi percorso, ma dobbiamo utilizzarlo getpassper fare in modo che ogni utente richieda in modo automatico il file indicato. Quale percorso avresti in mente? Deve essere un percorso a cui ogni utente ha accesso in lettura. Aspetta, la modifica tra un minuto ...
Jacob Vlijm,

@ ankit7540 lo ha modificato nello script (e nella spiegazione).
Jacob Vlijm,

@ ankit7540 Ah, ti vedo in prima linea: "Benvenuto utente ..." È importante per te? è solo una riga nel codice, se lo è.
Jacob Vlijm,

A proposito di quella riga "Benvenuto $ user", puoi semplicemente dirmelo qui e posso aggiungerlo nello script. Inoltre, in considerazione utente dispone di una cartella, /home/message. Sarebbe bene copiare il testo recente del messaggio (catenata ecc.) In un file fisso (per riferimento)
ankit7540

6

Il seguente script consente all'amministratore di memorizzare i messaggi personalizzati nella forma username_mm_dd_yyyy.txtin una directory definita dall'amministratore. I nomi utente vengono determinati automaticamente e confrontati con il nome file e la data del file da visualizzare.

Lo script può anche avere una .desktopvoce da inserire nella /etc/xdg/autostartdirectory. Ciò renderà lo script da visualizzare per ciascun utente. In alternativa è possibile posizionare il .desktopfile nella directory di ogni singolo utente ~/.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 seguito puoi vedere una piccola demo della sceneggiatura in azione. Ho creato il file nel formato specificato nella mia /tmpcartella

inserisci qui la descrizione dell'immagine


Mi dispiace di averti fatto aspettare. Funziona molto bene. Mi piacciono i pulsanti 'Annulla' e 'OK'. L'ho usato con la voce .desktop e funziona perfettamente!
ankit7540

@ ankit7540 Sono contento che ti piaccia. Qualche funzione aggiuntiva che vorresti che aggiungessi?
Sergiy Kolodyazhnyy

Considerare utente dispone di una cartella, /home/message. Sarebbe bene copiare il file del messaggio recente e conservarlo come riferimento.
ankit7540

@ ankit7540 può essere fatto. Si tratta semplicemente di aggiungere una riga con cpcomando, il primo argomento è la copia dell'amministratore e il secondo argomento che /home/$( _get_username )/messages/$FILE.txtho bisogno di dormire, ma posso aggiungerlo al mattino. È solo una riga.
Sergiy Kolodyazhnyy,

E se vuoi catenare il file che è giustocat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
Sergiy Kolodyazhnyy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.