로그인 후 각 사용자에 대한 사용자 정의 (편집 가능) 메시지


11

컴퓨터는 세 명의 사용자 (+1 관리자)가 사용하고 있으며 단일 로그인을 사용합니다. 세 명의 사용자가 컴퓨터를 사용하고 로그 아웃합니다. 로그인 할 때마다 몇 가지 지침, 뉴스 및 세부 정보를 제공해야합니다.

각 사용자에게 맞춤 메시지를 입력 할 수있는 유틸리티 / 도구가 필요합니다. 그런 다음 최신 메시지가 바탕 화면 (각 사용자마다) (마지막 편집 날짜와 함께) 10-15 초 동안 표시됩니다. 로그와 같은 모든 메시지와 날짜가있는 어딘가에 텍스트 사본을 사용할 수 있습니다.

여기에 이미지 설명을 입력하십시오

* 관리자는 시스템에 대한 SSH 액세스 권한이 있습니다.

이것이 가능한지 확실하지 않습니다 (그리고 너무 많이 찾고있을 수도 있습니다!).


할 수 있습니다. 우분투의 대상 버전은 무엇입니까? 팝업은 괜찮습니까? 또는 예제와 같이 화면상의 텍스트를 선호합니까?
Sergiy Kolodyazhnyy

14.04 LTS를 실행 중이며 곧 업그레이드 할 계획이 없습니다. 팝업 / 알림이 몇 초 (약 10-15 초) 동안
머무르면 괜찮습니다.

빠른 스크립트를 구현하고 답변을 게시했습니다. 파일을 만들 수 있으며 해당 파일은 각 사용자와 일치합니다. 다른 기능을 추가하고 싶은 경우, 다른 설명이 필요한 경우 알려주세요. 스크립트는 훌륭하지 않지만 상당히 안정적입니다.
Sergiy Kolodyazhnyy

안녕 @ ankit7540 첫 번째 "에디션"에 내 대답을 게시, 스크립트를 실행 가능하게 만드는 언급을 잊었지만, 그것은 명백 할 수 있습니다 :)
Jacob 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. 아래 스크립트를 빈 파일로 복사하고 스크립트의 헤드 섹션에서 사용자 메시지를 저장하는 폴더의 경로를 편집하십시오. 스크립트를 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'환영 사용자 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()

노트

물론 메시지 본문 과 마찬가지로 , yoy는 파일에서 사전 및 사후 메시지를 읽도록 스크립트를 변경할 수 있으므로 유지 관리가 훨씬 편리합니다. 대답이 간단하기 때문에 이와 같이 했습니까?


시도했다. 아주 잘 작동합니다. 코드를 보면 체류 시간을 변경하는 방법을 이해합니다. 한 가지 질문 : 사용자의 집 (하지만 집에만)에 대한 SSH 액세스 권한이없는 경우 어떻게해야합니까?
ankit7540

당신 (또는 I)은 모든 경로를 설정할 수 있지만 getpass각 사용자가 명명 된 파일을 비정상적으로 요청하도록 경로를 사용해야 합니다. 어떤 경로를 염두에두고 있습니까? 각 사용자에게 읽기 권한이있는 경로 여야합니다. 잠깐, 잠시 후 편집합니다 ...
Jacob Vlijm 7

@ ankit7540은 스크립트와 설명으로 편집했습니다.
Jacob Vlijm

@ ankit7540 아, 첫 줄을 봅니다 : "환영합니다 ..."그게 당신에게 중요합니까? 그렇다면 코드의 한 줄입니다.
Jacob Vlijm

"Welcome $ user"줄에 대해서는 여기에서 알려 주면 스크립트에 추가 할 수 있습니다. 또한 사용자에게 폴더가 있다고 가정합니다 /home/message. 최근 메시지 텍스트 (카테고리 등)를 고정 파일 (참조 용)로 복사하는 것이 좋습니다.
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폴더 에 지정된 형식으로 파일을 만들었습니다

여기에 이미지 설명을 입력하십시오


기다리게해서 미안합니다. 정말 잘 작동합니다. '취소'및 '확인'버튼이 마음에 듭니다. 나는 그것을 .desktop 항목과 함께 사용했으며 완벽하게 작동합니다!
ankit7540

@ ankit7540 다행 이네요. 추가하고 싶은 추가 기능이 있습니까?
Sergiy Kolodyazhnyy

사용자에게 폴더가 있다고 가정합니다 /home/message. 최근 메시지 파일을 복사하여 참조 용으로 보관하는 것이 좋습니다.
ankit7540

@ ankit7540을 수행 할 수 있습니다. 그것은 cp명령 으로 줄을 추가하는 문제 일뿐입니다. 첫 번째 인수는 관리자의 사본이고 두 번째 인수 /home/$( _get_username )/messages/$FILE.txt는 잠을 자야하지만 아침에 추가 할 수 있습니다. 한 줄에 불과합니다.
Sergiy Kolodyazhnyy

그리고 파일을 cat $FILE >> /home/$( _get_username )/messages/Log_of_all_messages. txt
정리
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.