Mensagem personalizada (editável) para cada usuário após o login

11

O computador está sendo usado por três usuários (+1 admin) e eles usam login de unidade. Os três usuários vêm, usam o computador e fazem logout. Eu tenho que dar algumas instruções, notícias e detalhes toda vez que eles entrarem.

Eu quero ter um utilitário / ferramenta onde eu possa digitar uma mensagem personalizada para cada usuário. A última mensagem seria então exibida na área de trabalho (para cada usuário) (com a data da minha última edição) por 10-15 segundos. Uma cópia do texto também estará disponível (para o usuário) em algum lugar com todas as mensagens e datas como um log.

* O administrador tem acesso SSH ao sistema.

Eu não tenho certeza se isso é possível (e pode ser que eu esteja procurando muito!).

    
por ankit7540 14.05.2016 / 07:26

2 respostas

11

Você pode fazer isso na seguinte configuração, que produzirá uma janela semitransparente, permanecendo por um tempo arbitrário:

  1. Crie em um diretório (qualquer), no qual cada um dos usuários pelo menos tenha permissões read , para cada usuário um arquivo de mensagens, exatamente nomeado após o nome de usuário de cada usuário (nome de login), sem extensão, por exemplo

    jacob
    

    Adicione texto ao arquivo como sua mensagem. Se você adicionar uma mensagem nova , comece com ### , o script exibirá automaticamente a última mensagem. O texto pode conter qualquer coisa que você goste, será exatamente como você colocou no arquivo.

    • A mensagem mais recente será copiada como latest_message.txt para o diretório pessoal do usuário para referência.

    • Como está, a janela permanecerá por 15 segundos, mas você pode configurá-la com qualquer valor, até mesmo fazer depender automaticamente da duração do texto.


    Um arquivo de exemplo poderia se parecer com:

    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!
    

    A mensagem seria assim:

  2. Copieoscriptabaixoemumarquivovazio,editenaseçãoheaddoseuscriptocaminhoparaapastanaqualvocêarmazenaasmensagensdousuário.Salveoscriptcomoshow_personalmessageem(porexemplo)/usr/local/bin(quedeveestarem$PATHetorne-oexecutável(!)(semextensão)

    #!/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. Crie um lançador em /etc/xdg/autostart

    [Desktop Entry]
    Type=Application
    Name=Splash 
    Exec=/bin/bash -c "sleep 10 && show_personalmessage"
    

    O sleep 10 é para garantir que a área de trabalho esteja "pronta" para abrir a janela.

Explicação

  • Iniciadores em /etc/xdg/autostart comandos de execução para cada usuário no login.
  • O ativador executa a janela (chamada pelo comando show_personalmessage ), que procura a mensagem personalizada no diretório que você definiu. Além disso. A mensagem mais recente é copiada para o diretório pessoal do usuário.
  • Se necessário, o caminho para a mensagem pode ser alterado, até mesmo específico para o usuário, usando o getpass -module, para que o script (janela) procure um arquivo nomeado específico do usuário em um diretório. Por favor mencione se isso seria necessário.

Além disso

A janela (Gtk)

  • pode ficar abaixo de tudo, como se fosse parte do plano de fundo
  • pode ser feito ficar no topo de tudo
  • pode ser feito com closeable

etc, etc ...

EDITAR

Para economizar tempo ao escrever mensagens, conforme discutido no bate-papo , abaixo de uma versão do script em que você pode incluir algumas seções "permanentes":

  • premsg , que deve estar logo abaixo de "Usuário de boas-vindas x", e o corpo da sua mensagem, e
  • postmsg , que vem como a parte inferior da sua mensagem.

Ambas as seções podem ser definidas como none, apenas definindo "" como um valor.

Oscript

#!/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()

Nota

É claro que, assim como a mensagem body , o yoy pode alterar o script para ler as mensagens anteriores e posteriores de um arquivo, o que torna ainda mais conveniente a manutenção. Foi assim, por razões de simplicidade na resposta.

    
por Jacob Vlijm 14.05.2016 / 08:22
6

O script abaixo permite que o administrador armazene mensagens personalizadas no formulário username_mm_dd_yyyy.txt no diretório definido pelo administrador. Os nomes de usuário são determinados automaticamente e combinados com o nome do arquivo e a data do arquivo a ser exibido.

O script também pode ter uma entrada .desktop , que deve ser colocada no diretório /etc/xdg/autostart . Isso fará com que o script seja exibido para cada usuário. Como alternativa, você pode colocar o arquivo .desktop no diretório ~/.config/autostart de cada usuário individual.

#!/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

Abaixo, você pode ver uma pequena demonstração do script em ação. Eu criei o arquivo no formato especificado na minha pasta /tmp

    
por Sergiy Kolodyazhnyy 14.05.2016 / 08:25