Puoi farlo nella seguente configurazione, che produrrà una finestra semitrasparente, rimanendo per un tempo arbitrario:
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.txt
riferimento 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:
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_personalmessage
in (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()
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/autostart
comandi 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.
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.