L'ordinateur est utilisé par trois utilisateurs (+1 administrateur) et ils utilisent le login unitaire. Les trois utilisateurs viennent, utilisent l'ordinateur et se déconnectent. Je dois donner des instructions, des nouvelles et des détails chaque fois qu'ils se connectent.
Je veux avoir un utilitaire/outil où je peux taper un message personnalisé à chaque utilisateur. Le dernier message serait alors affiché sur le bureau (pour chaque utilisateur) (avec la date de ma dernière modification) pendant environ 10-15 secondes. Une copie du texte sera également disponible (pour l'utilisateur) quelque part avec tous les messages et toutes les dates, comme un journal.
* L'administrateur dispose d'un accès SSH au système.
Je ne sais pas si cela est possible (et peut-être que je cherche trop!).
Vous pouvez faire cela dans la configuration suivante, ce qui produira une fenêtre semi-transparente, restant pour une durée arbitraire:
Créez un répertoire (quelconque) dans lequel chacun des utilisateurs au moins possède des autorisations de lecture , pour chaque utilisateur un fichier de message. , exactement nommé d'après le nom d'utilisateur de chaque utilisateur (nom de connexion), pas d'extension, par exemple.
jacob
Ajoutez du texte au fichier en tant que votre message. Si vous ajoutez un nouveau message , commencez par ###
, le script affichera alors automatiquement le dernier message. Le texte peut contenir tout ce que vous voulez, il ressemblera exactement à ce que vous avez mis dans le fichier.
Le dernier message sera copié en tant que latest_message.txt
dans le répertoire de base de l'utilisateur pour référence.
La fenêtre restera telle quelle pendant 15 secondes, mais vous pouvez lui attribuer n'importe quelle valeur, voire la faire dépendre automatiquement de la longueur du texte.
Un exemple de fichier pourrait ressembler à ceci:
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!
Le message ressemblerait alors à ceci:
Copiez le script ci-dessous dans un fichier vide, modifiez dans la section d’en-tête de votre script le chemin du dossier dans lequel vous stockez les messages des utilisateurs. Enregistrez le script sous show_personalmessage
dans (par exemple) /usr/local/bin
(qui doit figurer dans $PATH
et rendez-le exécutable (!) (pas d'extension)
#!/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()
Créer un lanceur dans /etc/xdg/autostart
[Desktop Entry]
Type=Application
Name=Splash
Exec=/bin/bash -c "sleep 10 && show_personalmessage"
Le mode veille 10 consiste à s'assurer que le bureau est "prêt" à ouvrir la fenêtre.
/etc/xdg/autostart
exécutent des commandes pour chaque utilisateur lors de la connexion.show_personalmessage
]), qui recherche le message personnalisé dans le répertoire que vous avez défini. Aditionellement. Le message le plus récent est copié dans le répertoire de base de l'utilisateur.getpass
, afin que le script (window) recherche un fichier nommé spécifique à l'utilisateur dans un répertoire. Veuillez indiquer si cela serait nécessaire.La fenêtre (Gtk)
etc...
Pour gagner du temps, écrivez des messages, comme indiqué dans sur le chat , sous une version du script dans laquelle vous pouvez inclure quelques sections "permanentes":
premsg
, qui devrait être juste en dessous de "Welcome user x", et le corps de votre message, etpostmsg
, qui constitue la partie inférieure de votre message.Les deux sections peuvent être définies sur none, en définissant simplement ""
comme valeur.
#!/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()
Bien sûr, tout comme le corps du message , vous pouvez modifier le script pour lire les messages pré et post d'un fichier, ce qui facilite encore la maintenance. Cela a-t-il été comme ça, pour des raisons de simplicité dans la réponse.
Le script ci-dessous permet à l'administrateur de stocker des messages personnalisés sous la forme username_mm_dd_yyyy.txt
dans un répertoire défini par l'administrateur. Les noms d'utilisateur sont automatiquement déterminés et comparés au nom de fichier et à la date d'affichage du fichier.
Le script peut également avoir une entrée .desktop
qui doit être placée dans le répertoire /etc/xdg/autostart
. Cela rendra le script à afficher pour chaque utilisateur. Vous pouvez également placer le fichier .desktop
dans le répertoire ~/.config/autostart
de chaque utilisateur.
#!/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
Ci-dessous, vous pouvez voir une petite démo du script en action. J'ai créé le fichier au format spécifié dans mon dossier /tmp