ログイン後の各ユーザーのカスタム(編集可能)メッセージ


11

コンピューターは3人のユーザー(+1管理者)によって使用されており、統一ログインを使用しています。3人のユーザーが来て、コンピューターを使用してログアウトします。ログインするたびに、いくつかの指示、ニュース、詳細を提供する必要があります。

各ユーザーにカスタムメッセージを入力できるユーティリティ/ツールが必要です。次に、最新のメッセージが(各ユーザーの)デスクトップに(最後に編集した日付とともに)10〜15秒表示されます。ログのようなすべてのメッセージと日付を含むテキストのコピーも(ユーザーが)どこでも利用できます。

ここに画像の説明を入力してください

*管理者はシステムにSSHアクセスできます。

これが可能かどうかはわかりません(探しているのかもしれません!)。


できます。Ubuntuの対象バージョンは何ですか?ポップアップは大丈夫ですか?または、あなたの例が示すような画面上のテキストを好むでしょうか?
セルギーKolodyazhnyy

14.04 LTSを実行しており、すぐにアップグレードする予定はありません。ポップアップ/通知が数秒間(
〜10-15

簡単なスクリプトを実装し、回答を投稿しました。ファイルを作成でき、そのファイルは各ユーザーに一致します。他にどのような機能を追加したいか、また他の説明が必要な場合は教えてください。スクリプトは派手ではありませんが、かなり安定しています。
セルギーコロディアズニー

こんにちは、@ ankit7540が最初の「エディション」で私の答えを投稿し、スクリプトを実行可能にすることを言及するのを忘れましたが、それは明らかかもしれません:)
ジェイコブVlijm

@Sergの努力に感謝します。アプローチが好きです。テストと返信をさせてください。
ankit7540

回答:


11

次の設定でそれを行うことができます。これにより、半透明のウィンドウが生成され、任意の時間だけ残ります。

  1. 、(任意の)ディレクトリに作成しているのユーザーのそれぞれ少なくともしている読み、各ユーザーのメッセージ・ファイルに対して、アクセス権を、正確例えば、各ユーザーのユーザー名の後に(名前でログ)という名前の、拡張子なし、

    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!
    

    メッセージは次のようになります。

    ここに画像の説明を入力してください

  2. 以下のスクリプトを空のファイルにコピーし、スクリプトのheadセクションで、ユーザーメッセージを保存するフォルダーへのパスを編集します。スクリプトを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()
  3. でランチャーを作成する /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、「Welcome user x」のすぐ下、メッセージ本文、
  • postmsg、メッセージの下部にあります。

""値として設定するだけで、両方のセクションをnoneに設定できます。

ここに画像の説明を入力してください

スクリプト

#!/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はスクリプトを変更してファイルから前後のメッセージを読み取ることができるため、メンテナンスがさらに便利になります。答えが単純であるという理由で、このようになりました。


試した。それは非常にうまく機能します。コードを見ると、滞在時間を変更する方法がわかります。1つの質問:ユーザーの自宅(ただし自宅のみ)へのSSHアクセスがない場合はどうなりますか?
ankit7540

あなた(または私)は任意のパスを設定できますが、それを使用getpassして各ユーザーが名前付きファイルをアトミックに要求するようにする必要があります。どのようなパスを考えていますか?各ユーザーが読み取りアクセス権を持つパスでなければなりません。待ち、分で意志の編集...
ジェイコブVlijm

@ ankit7540は、それをスクリプト(および説明)に編集しました。
ジェイコブVlijm

@ ankit7540ああ、最初の行が表示されます:「ようこそユーザー...」それはあなたにとって重要ですか?ある場合、コード内の単なる行です。
ジェイコブVlijm

「Welcome $ user」という行については、ここで教えてください。スクリプトに追加できます。さらに、ユーザーがフォルダを持っていると考えてください /home/message。それは、(参照用)固定ファイルに最近のメッセージテキストをコピーする(CATENATE等。)をいいでしょう
ankit7540

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

以下に、実行中のスクリプトの小さなデモを見ることができます。指定した形式でファイルを/tmpフォルダーに作成しました

ここに画像の説明を入力してください


待たせてごめん。それは非常に素晴らしい作品です。「キャンセル」ボタンと「OK」ボタンが気に入っています。.desktopエントリで使用しましたが、完璧に動作します!
ankit7540

@ ankit7540気に入ってくれて嬉しいです。追加したい追加機能はありますか?
セルギーKolodyazhnyy

ユーザーがフォルダを持っていると考えてください /home/message。最近のメッセージファイルをコピーして、参照用に保管しておくとよいでしょう。
ankit7540

@ ankit7540ができます。それは単にcpcommandで行を追加するだけの問題です。最初の引数は管理者のコピーで、2番目の引数/home/$( _get_username )/messages/$FILE.txtはスリープする必要がありますが、朝に追加できます。それはたった1行です。
セルギーコロディアズニー

そして、あなたは単にファイルのthatsをCATENATEしたい場合cat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
Sergiy Kolodyazhnyy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.