Você pode fazer isso na configuração a seguir, que produzirá uma janela semitransparente, permanecendo por um tempo arbitrário:
Criar em um (qualquer) anuário, em que cada um dos usuários , pelo menos, tem ler permissões, para cada usuário um arquivo de mensagem, exatamente com o nome de usuário de cada usuário (log no nome), sem extensão, por exemplo,
jacob
Adicione texto ao arquivo como sua mensagem. Se você adicionar uma nova mensagem, comece com ###
, o script exibirá automaticamente a última mensagem. O texto pode conter qualquer coisa que você quiser, será exatamente como você o colocou no arquivo.
A mensagem mais recente será copiada latest_message.txt
para o diretório inicial do usuário para referência.
Como é, a janela permanecerá por 15 segundos, mas você pode defini-la com qualquer valor, e até depender automaticamente do tamanho do texto.
Um arquivo de exemplo pode se parecer com:
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!
A mensagem seria assim:
Copie o script abaixo em um arquivo vazio, edite na seção principal do script o caminho para a pasta na qual você armazena as mensagens dos usuários. Salve o script como show_personalmessage
em (por exemplo) /usr/local/bin
(que deve estar dentro $PATH
e o torne executável (!) (Sem extensão)
#!/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()
Crie um iniciador no /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
O sono 10 é para garantir que a área de trabalho esteja "pronta" para abrir a janela.
Explicação
- Iniciadores em
/etc/xdg/autostart
comandos de execução para cada usuário no logon.
- O iniciador, em seguida, executa a janela (chamada pelo comando
show_personalmessage
), que procura a mensagem personalizada no diretório que você definiu. Além disso. A mensagem mais recente é copiada para o diretório inicial do usuário.
- Se necessário, o caminho para a mensagem pode ser alterado e até ser tornado específico ao usuário, usando o
getpass
-module, para que o script (janela) procure um arquivo nomeado específico do usuário em um diretório. Mencione se isso seria necessário.
Além disso
A janela (Gtk)
- pode ficar abaixo de tudo, como se fosse parte do plano de fundo
- pode ser feito ficar por dentro de tudo
- pode ser fechado
etc etc...
EDITAR
Para economizar tempo escrevendo mensagens, conforme discutido no bate-papo , abaixo de uma versão do script na qual você pode incluir algumas seções "permanentes":
premsg
, que deve estar logo abaixo de "Bem-vindo usuário x", e o corpo da sua mensagem, e
postmsg
, que é a parte inferior da sua mensagem.
Ambas as seções podem ser definidas como nenhuma, apenas configurando ""
como um valor.
O script
#!/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
Obviamente, assim como o corpo da mensagem , você pode alterar o script para ler as mensagens anteriores e posteriores de um arquivo, o que torna ainda mais conveniente a manutenção. Fez assim, por razões de simplicidade na resposta.