登录后为每个用户自定义(可编辑)消息

三台用户(+1管理员)正在使用该计算机,他们使用统一登录。 三个用户来,使用计算机并注销。 我每次登录时都必须提供一些说明,新闻和详细信息。

我想要一个实用程序/工具,我可以在其中输入每个用户的自定义消息。 然后,最新消息将显示在桌面上(对于每个用户)(具有我上次编辑的日期),例如10-15秒。 该文本的副本也可以(对用户)在某处提供所有消息和日期,如日志。

在此处输入图像描述

* Admin具有对系统的SSH访问权限。

我不确定这是否可行(也许我正在寻找太多!)。

您可以在以下设置中执行此操作,这将生成半透明窗口,保持任意时间:

  1. 在(任何)目录中创建,其中每个用户至少具有读取权限,为每个用户创建一个消息文件, 完全以每个用户的用户名(登录名)命名,没有扩展名,例如

    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! 

    然后消息看起来像:

    在此处输入图像描述

  2. 将下面的脚本复制到一个空文件中,在脚本的head部分编辑存储用户消息的文件夹的路径。 将脚本保存为(例如) /usr/local/bin show_personalmessage (应该在$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() 
  3. /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可以改变脚本来读取文件中的前置和后置消息,这使得维护起来更加方便。 是不是这样,为了简单回答的原因。

下面的脚本允许管理员以admin_ defined目录中的username_mm_dd_yyyy.txt格式存储个性化消息。 自动确定用户名,并与要显示的文件的文件名和日期进行匹配。

该脚本还可以有一个.desktop条目,该条目将放入/etc/xdg/autostart目录中。 这将使每个用户显示脚本。 或者,您可以将.desktop文件放入每个用户的~/.config/autostart目录中。

 #!/bin/bash _get_username() { qdbus com.canonical.Unity \ /com/canonical/Unity/Session \ com.canonical.Unity.Session.UserName } _get_date() { date +%m_%d_%Y } _show_error() { MESSAGE="Can't read the file or file doesn't exist. Contact the admin for assistance" zenity --error --title="Ooops, something went wrong!" --text="$MESSAGE" } main() { # replace this with the actual directory # that you want to use for storing messages MESSAGES_DIRECTORY="/tmp" # file name is made up of username_mm_dd_yyyy FILE="$MESSAGES_DIRECTORY"/"$( _get_username )"_"$( _get_date )".txt echo "$FILE" if [ -r "$FILE" ] ; then zenity --text-info --title="Welcome, $( _get_username )" --filename="$FILE" else _show_error fi } main 

Bellow你可以看到脚本的一个小演示。 我已在/tmp文件夹中以指定格式创建了该文件

在此处输入图像描述