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

ank*_*540 11 notification customization unity login notification-area

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

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

在此处输入图片说明

*管理员可以通过 SSH 访问系统。

我不确定这是否可行(可能是我找的太多了!)。

Jac*_*ijm 11

你可以在下面的设置中做到这一点,这将产生一个半透明的窗口,停留任意时间:

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

    jacob
    
    Run Code Online (Sandbox Code Playgroud)

    将文本添加到文件中作为您的消息。如果添加了新的消息,开始###时,脚本将自动显示的最后一条消息。文本可以包含您喜欢的任何内容,它看起来就像您在文件中放置的一样。

    • 最新消息,将保持原样复制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!
    
    Run Code Online (Sandbox Code Playgroud)

    该消息将如下所示:

    在此处输入图片说明

  2. 将下面的脚本复制到一个空文件中,在脚本的头部编辑存储用户消息的文件夹的路径。将脚本保存为show_personalmessage(例如)/usr/local/bin(应该在其中$PATH 并使其可执行(!)(无扩展名)

    jacob
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在中创建启动器 /etc/xdg/autostart

    [Desktop Entry]
    Type=Application
    Name=Splash 
    Exec=/bin/bash -c "sleep 10 && show_personalmessage"
    
    Run Code Online (Sandbox Code Playgroud)

    sleep 10 是为了确保桌面“准备好”打开窗口。

解释

  • 登录时为每个用户/etc/xdg/autostart运行命令中的启动器。
  • 然后启动器运行窗口(由命令调用show_personalmessage),它会在您定义的目录中查找个性化消息。此外。最近的消息被复制到用户的主目录。
  • 如果需要,可以更改消息的路径,甚至可以通过使用getpass-module使其特定于用户,以便脚本(窗口)将在目录中查找特定于用户的命名文件。请说明是否需要这样做。

此外

(Gtk) 窗口

  • 可以保持在一切之下,好像它是背景的一部分
  • 可以保持一切之上
  • 可以关闭

等等等等...


编辑

为了节省编写消息的时间,如chat 中所讨论,在脚本的一个版本下面,您可以在其中包含一些“永久”部分:

  • premsg,它应该在“欢迎用户 x”的正下方,以及您的消息正文,以及
  • postmsg,它位于您的消息的底部。

两个部分都可以设置为无,只需设置""为一个值即可。

在此处输入图片说明

剧本

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!
Run Code Online (Sandbox Code Playgroud)

笔记

当然,就像消息体一样,yoy 可以更改脚本以从文件中读取前后消息,这使得维护起来更加方便。这样做是为了答案的简单性。


Ser*_*nyy 6

下面的脚本允许管理员以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
Run Code Online (Sandbox Code Playgroud)

波纹管您可以看到正在运行的脚本的小演示。我已经在我的/tmp文件夹中创建了指定格式的文件

在此处输入图片说明