Puede hacerlo en la siguiente configuración, que producirá una ventana semitransparente, que se mantendrá durante un tiempo arbitrario:
Cree en un (cualquier) directorio, en el que cada uno de los usuarios tenga al menos permisos de lectura , para cada usuario, un archivo de mensaje, exactamente con el nombre de usuario de cada usuario (nombre de inicio de sesión), sin extensión, por ejemplo
jacob
Agregue texto al archivo como su mensaje. Si agrega un nuevo mensaje, comience con ###
, el script mostrará automáticamente el último mensaje. El texto puede contener lo que quiera, se verá exactamente como lo puso en el archivo.
El último mensaje se copiará latest_message.txt
en el 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í:
Copie la secuencia de comandos a continuación en un archivo vacío, edite en la sección principal de la secuencia de comandos 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 $PATH
y 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+"\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()
Crea un lanzador en /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
La suspensión 10 es para asegurarse de que el escritorio esté "listo" para abrir la ventana.
Explicación
- Lanzadores en
/etc/xdg/autostart
comandos de ejecución para cada usuario al iniciar sesión.
- Luego, el iniciador ejecuta la ventana (llamada por el comando
show_personalmessage
), que busca el mensaje personalizado en el directorio que definió. Adicionalmente. El mensaje más reciente se copia en el directorio de inicio del usuario.
- Si es necesario, la ruta al mensaje puede modificarse, incluso puede hacerse específica para el usuario utilizando el
getpass
módulo -m, de modo que el script (ventana) busque un archivo con nombre específico para el usuario en un directorio. Mencione si eso sería necesario.
Adicionalmente
La ventana (Gtk)
- se puede hacer que permanezca debajo de todo, como si fuera parte del fondo
- se puede hacer estar al tanto de todo
- se puede cerrar
etcétera etcétera...
EDITAR
Para ahorrar tiempo escribiendo mensajes, como se discutió en el chat , debajo de 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 como la sección inferior de su mensaje.
Ambas secciones se pueden establecer en none, solo estableciéndolas ""
como un valor.
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+"\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
Por supuesto, al igual que el cuerpo del mensaje , puede modificar el script para leer los mensajes previos y posteriores de un archivo, lo que hace que sea aún más conveniente mantenerlo. Lo hizo así, por razones de simplicidad en la respuesta.