三个用户(+1个管理员)正在使用该计算机,并且他们使用统一登录。这三个用户来了,使用计算机并注销。每次他们登录时,我都必须提供一些说明,新闻和详细信息。
我想要一个实用程序/工具,可以在其中输入给每个用户的自定义消息。然后,最新消息将显示在桌面上(针对每个用户)(带有我的上次编辑日期),持续10到15秒。文本的副本(对于用户)也可以在某处使用,其中包含所有消息和日期,例如日志。
*管理员具有对系统的SSH访问权限。
我不确定这是否可能(可能我正在寻找太多!)。
三个用户(+1个管理员)正在使用该计算机,并且他们使用统一登录。这三个用户来了,使用计算机并注销。每次他们登录时,我都必须提供一些说明,新闻和详细信息。
我想要一个实用程序/工具,可以在其中输入给每个用户的自定义消息。然后,最新消息将显示在桌面上(针对每个用户)(带有我的上次编辑日期),持续10到15秒。文本的副本(对于用户)也可以在某处使用,其中包含所有消息和日期,例如日志。
*管理员具有对系统的SSH访问权限。
我不确定这是否可能(可能我正在寻找太多!)。
Answers:
您可以在以下设置中执行此操作,这将生成一个半透明的窗口,并停留任意时间:
在一个(任意)目录中创建一个目录,该目录中的每个用户至少具有读取权限,为每个用户创建一个消息文件,该消息文件以每个用户的用户名(登录名)精确命名,没有扩展名,例如
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!
该消息将如下所示:
将下面的脚本复制到一个空文件中,在脚本的头部编辑在其中存储用户消息的文件夹的路径。将脚本另存为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)窗口
等,等等。
为了节省编写消息的时间(如chat中所讨论的那样),在脚本的一个版本下,您可以在其中包含一些“永久”部分:
premsg
,它应该位于“欢迎用户x”和您的邮件正文下方,并且 postmsg
,这是您邮件的底部。只需将其设置""
为一个值,就可以将两个部分都设置为无。
#!/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可以更改脚本以读取文件中的前后消息,这使得维护更加方便。这样做是出于简单的原因。
getpass
然后使每个用户自动请求命名文件。您打算走什么路?它必须是每个用户都具有读取权限的路径。等一下,请稍后编辑...
/home/message
。最好将最近的消息文本(类别等)复制到固定文件中(以供参考)
下面的脚本允许管理员将个性化消息以表格形式存储username_mm_dd_yyyy.txt
在admin定义的目录中。用户名是自动确定的,并与要显示的文件名和日期匹配。
该脚本还可以具有一个.desktop
条目,该条目将被放置到/etc/xdg/autostart
directory中。这将使脚本显示给每个用户。或者,您可以将.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
在下面,您可以看到正在运行的脚本的一个小演示。我已经在文件/tmp
夹中以指定格式创建了文件
/home/message
。复制最近的消息文件并保存在那里以供参考将是很好的。
cp
命令行中添加一行,第一个参数是管理员的副本,第二个参数/home/$( _get_username )/messages/$FILE.txt
我确实需要睡觉,但我可以在早上添加。这只是一行。
cat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt