Vous pouvez le faire dans la configuration suivante, qui produira une fenêtre semi-transparente, en restant pendant un temps arbitraire:
Créer dans un répertoire (n'importe lequel), dans lequel chacun des utilisateurs au moins a des autorisations de lecture , pour chaque utilisateur un fichier de messages, exactement nommé d'après le nom d'utilisateur de chaque utilisateur (nom de connexion), sans extension, par exemple
jacob
Ajoutez du texte au fichier comme 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 aimez, il ressemblera exactement à ce que vous avez mis dans le fichier.
Le dernier message sera copié dans latest_message.txt
le répertoire personnel de l'utilisateur pour référence.
En l'état, la fenêtre restera pendant 15 secondes, mais vous pouvez la régler sur n'importe quelle valeur, même la faire dépendre automatiquement de la longueur du texte.
Un exemple de fichier pourrait ressembler à:
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 à:
Copiez le script ci-dessous dans un fichier vide, modifiez dans la section head de votre script le chemin d'accès au dossier dans lequel vous stockez les messages des utilisateurs. Enregistrez le script sous show_personalmessage
(par exemple) /usr/local/bin
(qui devrait être 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()
Créer un lanceur dans /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
Le sommeil 10 est de s'assurer que le bureau est «prêt» à ouvrir la fenêtre.
Explication
- Lanceurs dans les
/etc/xdg/autostart
commandes d'exécution pour chaque utilisateur connecté.
- Le lanceur exécute 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 personnel de l'utilisateur.
- Si nécessaire, le chemin d'accès au message peut être modifié, voire rendu spécifique à l'utilisateur en utilisant le
getpass
-module, afin que le script (fenêtre) 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 s'il faisait partie de l'arrière-plan
- peut être fait rester au top de tout
- peut être fermé
etc...
ÉDITER
Pour gagner du temps à écrire des messages, comme discuté dans le chat , ci-dessous une version du script dans laquelle vous pouvez inclure quelques sections "permanentes":
premsg
, qui doit se trouver juste en dessous de "Bienvenue utilisateur x" et du corps de votre message, et
postmsg
, qui vient en bas de votre message.
Les deux sections peuvent être définies sur aucune, simplement en définissant ""
une valeur.
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 , yoy peut modifier le script pour lire les messages avant et après à partir d'un fichier, ce qui le rend encore plus pratique à maintenir. Est-ce que cela a été le cas, pour des raisons de simplicité dans la réponse.