Компьютер используется тремя пользователями (+1 администратор), и они используют единый вход. Приходят три пользователя, используют компьютер и выходят из системы. Я должен давать некоторые инструкции, новости и подробности каждый раз, когда они входят в систему.
Я хочу, чтобы у меня была утилита / инструмент, в который я мог бы напечатать пользовательское сообщение для каждого пользователя. Последнее сообщение будет затем отображаться на рабочем столе (для каждого пользователя) (с датой моего последнего редактирования), скажем, 10-15 секунд. Копия текста также будет доступна (пользователю) где-нибудь со всеми сообщениями и датами, такими как журнал.
* Администратор имеет SSH-доступ к системе.
Я не уверен, возможно ли это (и, может быть, я ищу слишком много!).
Можно сделать это в следующей установке, которая произведет полу - прозрачное окно, остающееся в течение произвольного момента времени:
Создайте в (любом) каталоге, в котором каждый из пользователей, по крайней мере, прочитал полномочия для каждого пользователя файл сообщений, точно названный в честь имени пользователя каждого пользователя (войдите в систему имя), никакое расширение, например.
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
- модуль, так, чтобы сценарий (окно) искал пользователя - определенный именованный файл в каталоге. Упомяните, требовалось ли это.Окно (Gtk)
и т.д., и т.д...
Чтобы сэкономить сообщения записи времени, как обсуждено в чате, ниже версии сценария, в который можно включать несколько "постоянных" разделов:
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()
Конечно, точно так же, как тело сообщения, по сравнению с предыдущим годом может изменить сценарий, чтобы читать пред - и добавить сообщения из файла, который делает еще более удобным поддержать. Этому нравилось это по причинам простоты в ответе.
Рев сценария позволяет администратору хранить персонализированные сообщения в форме 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
папка
sudo apt install caffeine
. – pomsky 12 November 2017 в 05:14