Możesz to zrobić w następującej konfiguracji, która utworzy półprzezroczyste okno, pozostając przez dowolny czas:
Utwórz w (dowolnym) katalogu, w którym każdy z użytkowników ma przynajmniej uprawnienia do odczytu , dla każdego użytkownika plik wiadomości, dokładnie nazwany po nazwie użytkownika (nazwa logowania), bez rozszerzenia, np.
jacob
Dodaj tekst do pliku jako wiadomość. Jeśli dodasz nową wiadomość, zacznij od ###
, skrypt automatycznie wyświetli ostatnią wiadomość. Tekst może zawierać wszystko, co chcesz, będzie wyglądał dokładnie tak, jak umieściłeś go w pliku.
Najnowsza wiadomość, zostaną skopiowane latest_message.txt
do katalogu domowego użytkownika odsyłającego.
W tej chwili okno pozostanie przez 15 sekund, ale możesz ustawić dowolną wartość, nawet automatycznie uzależnić ją od długości tekstu.
Przykładowy plik może wyglądać następująco:
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!
Wiadomość wyglądałaby następująco:
Skopiuj poniższy skrypt do pustego pliku, edytuj w nagłówku skryptu ścieżkę do folderu, w którym przechowujesz wiadomości użytkowników. Zapisz skrypt jak show_personalmessage
w (np.) /usr/local/bin
(Który powinien być $PATH
i uczynić go wykonywalnym (!) (Bez rozszerzenia)
#!/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()
Utwórz program uruchamiający w /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
Tryb uśpienia 10 ma zapewnić, że pulpit jest „gotowy” do otwarcia okna.
Wyjaśnienie
- Uruchamianie
/etc/xdg/autostart
poleceń uruchamiania dla każdego zalogowanego użytkownika .
- Następnie program uruchamiający uruchamia okno (wywoływane przez polecenie
show_personalmessage
), które wyszukuje spersonalizowaną wiadomość w zdefiniowanym katalogu. Do tego. Najnowsza wiadomość jest kopiowana do katalogu domowego użytkownika.
- W razie potrzeby ścieżka do wiadomości może zostać zmieniona, a nawet określona przez użytkownika za pomocą
getpass
-moduła, dzięki czemu skrypt (okno) będzie szukał określonego katalogu o nazwie użytkownika w katalogu. Proszę podać, czy byłoby to wymagane.
do tego
Okno (Gtk)
- można ustawić tak, aby pozostawał poniżej wszystkiego, tak jakby był częścią tła
- mogą być wykonane pobyt na szczycie wszystkiego
- można zamknąć
itd itd...
EDYTOWAĆ
Aby zaoszczędzić czas na pisanie wiadomości, jak omówiono na czacie , poniżej wersji skryptu, w której można dołączyć kilka „stałych” sekcji:
premsg
, który powinien znajdować się tuż poniżej „Witamy użytkownika x” oraz w treści wiadomości, oraz
postmsg
, która znajduje się w dolnej części wiadomości.
Obie sekcje można ustawić na brak, po prostu ustawiając ""
jako wartość.
Scenariusz
#!/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()
Uwaga
Oczywiście, podobnie jak wiadomości ciała , może dynamika zmienia scenariusz do przeczytania przed i po wiadomości z pliku, co czyni go jeszcze bardziej wygodne do utrzymania. Czy tak było, ze względu na prostotę w odpowiedzi.