Вы можете сделать это в следующей настройке, которая создаст полупрозрачное окно, оставаясь на произвольное время:
Создайте в (любом) каталоге, в котором каждый из пользователей по крайней мере имеет разрешения на чтение , для каждого пользователя файл сообщения, точно названный в честь имени пользователя (логина) каждого пользователя, без расширения, например
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!
Тогда сообщение будет выглядеть так:
Скопируйте приведенный ниже скрипт в пустой файл, отредактируйте в разделе head вашего скрипта путь к папке, в которой вы храните сообщения пользователей. Сохраните скрипт как 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
-module, чтобы скрипт (окно) искал именованный файл для конкретного пользователя в каталоге. Пожалуйста, укажите, требуется ли это.
Дополнительно
Окно (Gtk)
- можно заставить оставаться ниже всего, как если бы это было частью фона
- можно сделать, чтобы оставаться на вершине всего
- можно сделать закрывающимся
и т. д.
РЕДАКТИРОВАТЬ
Для экономии времени написания сообщений, как обсуждалось в чате , ниже приведена версия скрипта, в которую можно включить несколько «постоянных» разделов:
premsg
, который должен быть чуть ниже "Привет, пользователь x", а также текст вашего сообщения и
postmsg
, который идет в нижней части вашего сообщения.
Обе секции могут быть установлены в none, просто путем установки ""
значения.
Сценарий
#!/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 может изменить сценарий для чтения предварительных и опубликованных сообщений из файла, что делает его еще более удобным в обслуживании. Сделал так, по причинам простоты в ответе.