web-dev-qa-db-fra.com

Message personnalisé (modifiable) pour chaque utilisateur après la connexion

L'ordinateur est utilisé par trois utilisateurs (+1 administrateur) et ils utilisent le login unitaire. Les trois utilisateurs viennent, utilisent l'ordinateur et se déconnectent. Je dois donner des instructions, des nouvelles et des détails chaque fois qu'ils se connectent.

Je veux avoir un utilitaire/outil où je peux taper un message personnalisé à chaque utilisateur. Le dernier message serait alors affiché sur le bureau (pour chaque utilisateur) (avec la date de ma dernière modification) pendant environ 10-15 secondes. Une copie du texte sera également disponible (pour l'utilisateur) quelque part avec tous les messages et toutes les dates, comme un journal.

enter image description here

* L'administrateur dispose d'un accès SSH au système.

Je ne sais pas si cela est possible (et peut-être que je cherche trop!).

11
ankit7540

Vous pouvez faire cela dans la configuration suivante, ce qui produira une fenêtre semi-transparente, restant pour une durée arbitraire:

  1. Créez un répertoire (quelconque) dans lequel chacun des utilisateurs au moins possède des autorisations de lecture , pour chaque utilisateur un fichier de message. , exactement nommé d'après le nom d'utilisateur de chaque utilisateur (nom de connexion), pas d'extension, par exemple.

    jacob
    

    Ajoutez du texte au fichier en tant que votre message. Si vous ajoutez un nouveau message , commencez par ###, le script affichera alors automatiquement le dernier message. Le texte peut contenir tout ce que vous voulez, il ressemblera exactement à ce que vous avez mis dans le fichier.

    • Le dernier message sera copié en tant que latest_message.txt dans le répertoire de base de l'utilisateur pour référence.

    • La fenêtre restera telle quelle pendant 15 secondes, mais vous pouvez lui attribuer n'importe quelle valeur, voire la faire dépendre automatiquement de la longueur du texte.


    Un exemple de fichier pourrait ressembler à ceci:

    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!
    

    Le message ressemblerait alors à ceci:

    enter image description here

  2. Copiez le script ci-dessous dans un fichier vide, modifiez dans la section d’en-tête de votre script le chemin du dossier dans lequel vous stockez les messages des utilisateurs. Enregistrez le script sous show_personalmessage dans (par exemple) /usr/local/bin (qui doit figurer dans $PATH et rendez-le exécutable (!) (pas d'extension)

    #!/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. Créer un lanceur dans /etc/xdg/autostart

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

    Le mode veille 10 consiste à s'assurer que le bureau est "prêt" à ouvrir la fenêtre.

Explication

  • Les lanceurs dans /etc/xdg/autostart exécutent des commandes pour chaque utilisateur lors de la connexion.
  • Le lanceur lance ensuite la fenêtre (appelée par la commande show_personalmessage]), qui recherche le message personnalisé dans le répertoire que vous avez défini. Aditionellement. Le message le plus récent est copié dans le répertoire de base de l'utilisateur.
  • Si nécessaire, le chemin du message peut être modifié, voire personnalisé en utilisant le module getpass, afin que le script (window) recherche un fichier nommé spécifique à l'utilisateur dans un répertoire. Veuillez indiquer si cela serait nécessaire.

Aditionellement

La fenêtre (Gtk)

  • peut être fait pour rester en dessous de tout, comme si cela ferait partie de l'arrière-plan
  • peut être fait rester en haut de tout
  • peut être fermé

etc...


MODIFIER

Pour gagner du temps, écrivez des messages, comme indiqué dans sur le chat , sous une version du script dans laquelle vous pouvez inclure quelques sections "permanentes":

  • premsg, qui devrait être juste en dessous de "Welcome user x", et le corps de votre message, et
  • postmsg, qui constitue la partie inférieure de votre message.

Les deux sections peuvent être définies sur none, en définissant simplement "" comme valeur.

enter image description here

Le scénario

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

Remarque

Bien sûr, tout comme le corps du message , vous pouvez modifier le script pour lire les messages pré et post d'un fichier, ce qui facilite encore la maintenance. Cela a-t-il été comme ça, pour des raisons de simplicité dans la réponse.

11
Jacob Vlijm

Le script ci-dessous permet à l'administrateur de stocker des messages personnalisés sous la forme username_mm_dd_yyyy.txt dans un répertoire défini par l'administrateur. Les noms d'utilisateur sont automatiquement déterminés et comparés au nom de fichier et à la date d'affichage du fichier.

Le script peut également avoir une entrée .desktop qui doit être placée dans le répertoire /etc/xdg/autostart. Cela rendra le script à afficher pour chaque utilisateur. Vous pouvez également placer le fichier .desktop dans le répertoire ~/.config/autostart de chaque utilisateur.

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

Ci-dessous, vous pouvez voir une petite démo du script en action. J'ai créé le fichier au format spécifié dans mon dossier /tmp

enter image description here

6