Показывать диалоговое окно после периода бездействия

Показывать диалоговое окно после периода бездействия

Мне скоро придется перевести целую компьютерную лабораторию (около 50 ПК) с Windows 7 на Ubuntu 14.04 LTS. Поскольку это университет, 99% времени (если не 100%) им будут пользоваться студенты. Центральной базы данных учетных записей и учетных данных пользователей не существует, поэтому на каждом ПК будет только две учетные записи, adminи guest, причем последняя настроена на автоматический вход (помимо некоторой настройки в соответствии сэтот урок).

Когда ПК включены и гостевая учетная запись входит в систему автоматически, первое, что отображается после загрузки оконного менеджера, — это диалоговое окно:

введите описание изображения здесь

Однако есть две проблемы:

  1. Самый первый человек, который сядет за компьютер в 9 утра, увидит диалоговое окно, нажмет «ОК», воспользуется ПК, выйдет, не завершая сеанс и не блокируя экран (потому что пользователи), а второй пользователь и далее не увидит сообщения.
  2. Я хотел бы донести до пользователей лаборатории более важную информацию (правила лаборатории и т. д.).

Итак, имея в виду этот сценарий, я хочу добиться того, чтобы диалоговое окно было очень похоже на это (но с другим текстом, заданным мной), которое всплывало бы всякий раз, когда компьютер не используется, скажем, 15 минут. (Для целей этого вопроса предположим, что «не используется» означает отсутствие активности клавиатуры или мыши).

Меня направили Как Ubuntu определяет бездействие перед приостановкой? и Как скрипт может определить время бездействия пользователя? и использовать скрипты Ruby или Sheel, но я не умею кодировать.

Есть ли более простой способ добиться того, что мне нужно?

решение1

Использоватьxautolock

xautolock -time 15 -locker notify-send -t time "Title" "message_here" -i "path/to/icon"

или используйте zenity или любой другой диалог по вашему желанию.

Видетьhttp://manpages.ubuntu.com/manpages/trusty/man1/xautolock.1.html

Редактировать: После редактирования вопроса автор ответа выбрал zenity

xautolock -time 15 -locker "zenity --text='<text here>' --warning"

решение2

Если запустить следующий скрипт в фоновом режиме, он будет проверять время простоя каждые 5 секунд. Если время простоя превысит заданное количество времени (в минутах), появится сообщение, определенное в текстовом файле. (через окно Zenity).

#!/usr/bin/env python3

import subprocess
import time
#########################################
t=15
textfile = "/path/to/message_textfile"
#########################################

with open(textfile, "r") as text:
    message = text.read()

while 1!=0:
    get_idle = subprocess.Popen(["xprintidle"], stdout=subprocess.PIPE)
    result = get_idle.communicate()[0].decode("utf-8")
    if int(result)/60000>t:
        if warning_given == "yes":
            pass
        else:   
            subprocess.Popen(["zenity", "--warning",  "--no-wrap", "--text="+message,  ])
            warning_given = "yes"
    else:
        warning_given = "no"

    time.sleep(5)

введите описание изображения здесь

Как использовать

  • установить xprintidle:

    sudo apt-get install xprintidle
    
  • Скопируйте скрипт в пустой файл, установите время простоя ( t) в минутах и ​​укажите путь к текстовому файлу, содержащему текст вашего сообщения. Сохраните его какset_warning.py

  • Запустите его командой

    python3 /path/to/set_warning.py
    

Примечания

  • Для удобства (и для контроля над макетом текста) текст берется из внешнего текстового файла. Возвраты и т. д. будут скопированы в сообщение именно из текстового файла. Поскольку --no-wrapиспользуется опция из zenity, вынуждатьсяиспользовать возвраты, иначе ваше сообщение будет чрезмерно общим.
  • Внешний вид сообщения можно «настроить» с помощью других опций zenity.

решение3

Вот что у меня в итоге получилось:

xautolock -time 15 -locker "zenity --text='<text here>' --warning"

Я добавил эту строку как запись в приложениях сеанса учетной записи, с которой связана мягкая ссылка /etc/guest-session/skel, поэтому она будет запускаться каждый раз при запуске гостевого сеанса.

Связанный контент