Bạn có thể làm điều đó trong thiết lập sau, sẽ tạo ra một cửa sổ bán trong suốt, duy trì trong một thời gian tùy ý:
Tạo trong một thư mục (bất kỳ), trong đó mỗi người dùng ít nhất có quyền đọc , cho mỗi người dùng một tệp tin, được đặt tên chính xác theo tên người dùng của mỗi người dùng (tên đăng nhập), không có phần mở rộng, ví dụ:
jacob
Thêm văn bản vào tập tin như tin nhắn của bạn. Nếu bạn thêm một tin nhắn mới , hãy bắt đầu với ###
, tập lệnh sẽ tự động hiển thị tin nhắn cuối cùng. Văn bản có thể chứa bất cứ thứ gì bạn thích, nó sẽ trông giống hệt như bạn đặt nó trong tệp.
Tin nhắn mới nhất , sẽ được sao chép latest_message.txt
vào thư mục chính của người dùng để tham khảo.
Như vậy, cửa sổ sẽ tồn tại trong 15 giây, nhưng bạn có thể đặt nó thành bất kỳ giá trị nào, thậm chí làm cho nó tự động phụ thuộc vào độ dài của văn bản.
Một tệp ví dụ có thể trông như:
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!
Thông báo sau đó sẽ giống như:
Sao chép tập lệnh bên dưới vào một tập tin trống, chỉnh sửa trong phần đầu của tập lệnh của bạn đường dẫn đến thư mục mà bạn lưu trữ tin nhắn của người dùng. Lưu tập lệnh như show_personalmessage
trong (ví dụ) /usr/local/bin
(cần có trong đó $PATH
và làm cho tập lệnh thực thi (!) (Không có phần mở rộng)
#!/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()
Tạo một launcher trong /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
Ngủ 10 là để đảm bảo máy tính để bàn "sẵn sàng" để mở cửa sổ.
Giải trình
- Các trình khởi chạy trong
/etc/xdg/autostart
các lệnh chạy cho mỗi người dùng khi đăng nhập.
- Trình khởi chạy sau đó chạy cửa sổ (được gọi bằng lệnh
show_personalmessage
), tìm kiếm thông báo được cá nhân hóa trong thư mục bạn đã xác định. Ngoài ra. Tin nhắn gần đây nhất được sao chép vào thư mục nhà của người dùng.
- Nếu được yêu cầu, đường dẫn đến tin nhắn có thể được thay đổi, thậm chí được người dùng xác định cụ thể bằng cách sử dụng
getpass
-module, để tập lệnh (cửa sổ) sẽ tìm tệp có tên người dùng cụ thể trong thư mục. Hãy đề cập nếu điều đó sẽ được yêu cầu.
Ngoài ra
Cửa sổ (Gtk)
- có thể được thực hiện để ở dưới mọi thứ, như thể nó sẽ là một phần của nền
- có thể được thực hiện trên đầu trang của tất cả mọi thứ
- có thể được đóng lại
Vân vân...
BIÊN TẬP
Để tiết kiệm thời gian viết tin nhắn, như được thảo luận trong trò chuyện , bên dưới một phiên bản của tập lệnh mà bạn có thể bao gồm một vài phần "cố định":
premsg
, nằm ngay bên dưới "Chào mừng người dùng x" và nội dung thư của bạn và
postmsg
, đó là phần dưới cùng của tin nhắn của bạn.
Cả hai phần có thể được đặt thành không, chỉ bằng cách đặt ""
làm giá trị.
Kịch bản
#!/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()
Ghi chú
Tất nhiên, giống như thông điệp cơ thể , so với cùng kỳ có thể thay đổi kịch bản để đọc các thông điệp trước và sau từ một tập tin, mà làm cho nó thậm chí còn thuận tiện hơn để duy trì. Đã làm như thế này, vì lý do đơn giản trong câu trả lời.