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:
-
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í:
-
-
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$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+"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()
-
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, ypostmsg
, que aparece en la parte inferior de su mensaje.
Ambas secciones se pueden establecer en ninguna, simplemente configurando ""
como 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+"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
Eres capaz de auxiliar nuestro ensayo mostrando un comentario o puntuándolo te damos la bienvenida.