web-dev-qa-db-ja.com

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

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

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

enter image description here

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

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

11
ankit7540

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

  1. 各ユーザー少なくともread権限を持ち、各ユーザーにメッセージファイルexactly namedが含まれる(任意の)ディレクトリに作成します。各ユーザーのユーザー名(ログイン名)の後、拡張子なし、例えば.

    jacob
    

    メッセージとしてファイルにテキストを追加します。 newメッセージを追加すると、###で始まり、スクリプトは自動的に最後のメッセージを表示します。テキストには好きなものを含めることができ、ファイルに入れたように見えます。

    • latestメッセージは、参照用に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!
    

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

    enter image description here

  2. 以下のスクリプトを空のファイルにコピーし、スクリプトのheadセクションで、ユーザーメッセージを保存するフォルダーへのパスを編集します。スクリプトをshow_personalmessage in(eg)/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)ウィンドウ

  • 背景の一部であるかのように、すべての下に留まるようにすることができます
  • 滞在することができますすべての
  • 閉鎖可能にすることができます

などなど...


編集

in chat のように、いくつかの「永続的な」セクションを含めることができるスクリプトのバージョンの下で、メッセージを書く時間を節約します。

  • premsg、これは「Welcome user x」のすぐ下、メッセージ本文、
  • postmsg。メッセージの下部にあります。

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

enter image description here

スクリプト

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

注意

もちろん、メッセージbodyと同様に、yoyはスクリプトを変更してファイルから前後のメッセージを読み取ることができるため、メンテナンスがさらに便利になります。答えが単純であるという理由で、このようになりました。

11
Jacob Vlijm

以下のスクリプトを使用すると、管理者はパーソナライズされたメッセージを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フォルダーに指定された形式でファイルを作成しました

enter image description here

6