Saltar al contenido

Mensaje personalizado (editable) para cada usuario después de iniciar sesión

Nuestros investigadores estrellas agotaron sus reservas de café, buscando todo el tiempo por la solución, hasta que Julián encontró el resultado en Gitea por lo tanto en este momento la comparte contigo.

Solución:

Puede hacerlo en la siguiente configuración, que producirá una ventana semitransparente, permaneciendo durante un tiempo arbitrario:

  1. Cree en un directorio (cualquiera), en el que cada uno de los usuarios por lo menos tiene leer permisos, para cada usuario un archivo de mensaje, exactamente nombrado por el nombre de usuario de cada usuario (nombre de inicio de sesión), sin extensión, p. ej.

    jacob
    

    Agregue texto al archivo como su mensaje. Si agrega un nuevo mensaje, comience con ###, la secuencia de comandos mostrará automáticamente el último mensaje. El texto puede contener cualquier cosa que desee, se verá exactamente como lo puso en el archivo.

    • los más reciente mensaje, se copiará como latest_message.txt al directorio de inicio del usuario como referencia.

    • Tal como está, la ventana permanecerá durante 15 segundos, pero puede establecerla en cualquier valor, incluso hacer que dependa automáticamente de la longitud del texto.

    Un archivo de ejemplo podría verse así:

    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!
    

    El mensaje entonces se vería así:

    ingrese la descripción de la imagen aquí

  2. Copie el siguiente script en un archivo vacío, edite en la sección principal de su script la ruta a la carpeta en la que almacena los mensajes de los usuarios. Guarde el script como show_personalmessage en (p. ej.) /usr/local/bin (que debería estar en $PATHy hacerlo ejecutable (!) (sin extensión)

    #!/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+"nn"+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 lanzador en /etc/xdg/autostart

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

    El sueño 10 es para asegurarse de que el escritorio esté “listo” para abrir la ventana.

Explicación

  • Lanzadores en /etc/xdg/autostart ejecutar comandos para cada usuario al iniciar sesión.
  • El lanzador luego ejecuta la ventana (llamada por el comando show_personalmessage), que busca el mensaje personalizado en el directorio que definiste. Adicionalmente. El mensaje más reciente se copia en el directorio de inicio del usuario.
  • Si es necesario, la ruta al mensaje se puede modificar, incluso hacer que el usuario sea específico mediante el uso de getpass -módulo, para que el script (ventana) busque un archivo con nombre específico del usuario en un directorio. Por favor mencione si es necesario.

Adicionalmente

La ventana (Gtk)

  • se puede hacer que permanezca debajo de todo, como si fuera parte del fondo
  • se puede hacer quedarse encima de todo
  • se puede hacer que se pueda cerrar

etcétera etcétera…


EDITAR

Para ahorrar tiempo escribiendo mensajes, como se discutió en el chat, a continuación se muestra una versión del script en la que puede incluir algunas secciones “permanentes”:

  • premsg, que debe estar justo debajo de “Bienvenido usuario x”, y el cuerpo de su mensaje, y
  • postmsg, que aparece en la parte inferior de su mensaje.

Ambas secciones se pueden establecer en ninguna, simplemente configurando "" como valor.

ingrese la descripción de la imagen aquí

La secuencia de comandos

#!/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+"nn"+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

Por supuesto, al igual que el mensaje. cuerpo, puede modificar el script para leer los mensajes anteriores y posteriores de un archivo, lo que lo hace aún más conveniente de mantener. Lo hizo así, por razones de simplicidad en la respuesta.

El siguiente script permite al administrador almacenar mensajes personalizados en forma username_mm_dd_yyyy.txt en el directorio definido por el administrador. Los nombres de usuario se determinan automáticamente y se comparan con el nombre del archivo y la fecha del archivo que se mostrará.

El guión también puede tener un .desktop entrada que se colocará en /etc/xdg/autostart directorio. Eso hará que el script se muestre para cada usuario. Alternativamente, puede colocar el .desktop archivo en cada usuario individual ~/.config/autostart directorio.

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

A continuación puede ver una pequeña demostración del script en acción. He creado el archivo en el formato especificado en mi /tmp carpeta

ingrese la descripción de la imagen aquí

Eres capaz de auxiliar nuestro ensayo mostrando un comentario o puntuándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *