Це можна зробити в наступному налаштуванні, яке створить напівпрозоре вікно, зберігаючи довільний час:
Створіть у (будь-якому) каталозі, в якому кожен з користувачів, принаймні, має права на читання , для кожного користувача файл повідомлень, точно вказаний за ім'ям користувача кожного користувача (ім’я входу в систему), без розширення, наприклад
jacob
Додати текст у файл як своє повідомлення. Якщо ви додасте нове повідомлення, почніть з ###
, сценарій автоматично відобразить останнє повідомлення. Текст може містити все, що вам подобається, він буде виглядати саме так, як ви його помістили у файл.
Останнє повідомлення, буде скопійовано latest_message.txt
на користувача домашнього каталогу для довідки.
Як і зараз, вікно залишиться протягом 15 секунд, але ви можете встановити його на будь-яке значення, навіть зробити його автоматично залежним від довжини тексту.
Приклад файлу може виглядати так:
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!
Тоді повідомлення буде виглядати так:
Скопіюйте скрипт нижче в порожній файл, відредагуйте в головному розділі свого сценарію шлях до папки, в якій ви зберігаєте повідомлення користувачів. Збережіть сценарій як show_personalmessage
у (напр.) /usr/local/bin
(Який повинен бути в $PATH
і зробити його виконуваним (!) (Без розширення)
#!/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()
Створіть панель запуску в /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
Сон 10 - переконатися, що робочий стіл готовий до відкриття вікна.
Пояснення
- Запуски
/etc/xdg/autostart
команд запуску для кожного користувача при вході.
- Потім програма запуску запускає вікно (викликане командою
show_personalmessage
), яке шукає персоналізоване повідомлення у визначеному вами каталозі. Додатково. Останнє повідомлення копіюється в домашній каталог користувача.
- Якщо потрібно, шлях до повідомлення може бути змінений, навіть зробити його конкретним для користувача, використовуючи
getpass
-модуль, так що скрипт (вікно) буде шукати специфічний для користувача файл з іменем у каталозі. Будь ласка, зазначте, якщо це буде потрібно.
Додатково
Вікно (Gtk)
- можна зробити так, щоб залишатися нижче всього, ніби це було частиною фону
- можна змусити залишатись над усім
- можна зробити закритим
тощо, тощо ...
EDIT
Щоб заощадити час на написання повідомлень, як обговорювалося в чаті , нижче версії сценарію, в яку ви можете включити кілька "постійних" розділів:
premsg
, яка повинна бути трохи нижче "Привітання користувача x", а також частину вашого повідомлення та
postmsg
, яка розміщена як нижній розділ вашого повідомлення.
Обидва розділи можна встановити на жодні, просто встановивши ""
як значення.
Сценарій
#!/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()
Примітка
Звичайно, так само, як і тіло повідомлення , yoy може змінити сценарій для читання попередніх та після повідомлення з файлу, що робить його ще зручнішим в обслуговуванні. Чи сподобалось це з міркувань простоти у відповіді.