一定時間操作が行われなかった後にダイアログボックスを表示する

一定時間操作が行われなかった後にダイアログボックスを表示する

もうすぐ、コンピュータラボ全体(約50台のPC)をWindows 7からUbuntu 14.04 LTSに移行しなければなりません。大学なので、99%(100%ではないにしても)は学生が使用します。ユーザーアカウントと資格情報の中央データベースがないため、各PCには2つのアカウントと、(admin必要guestに応じてカスタマイズする)自動ログインするように構成されたアカウントのみがあります。このチュートリアル)。

PC の電源がオンになり、ゲスト アカウントが自動的にログインすると、ウィンドウ マネージャーが読み込まれた後に最初に表示されるのは次のダイアログ ボックスです。

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

しかし、2つの問題があります。

  1. 午前9時に最初にコンピューターの前に座った人は、ダイアログボックスを見て、OKをクリックし、PCを使用して、セッションを終了したり画面をロックしたりせずに(ユーザーであるため)、2番目以降のユーザーにはメッセージが表示されません。
  2. ラボのユーザーに伝えたい関連情報が他にもあります(ラボのルールなど)。

したがって、このシナリオを念頭に置いて、私が実現したいのは、コンピューターがたとえば 15 分間使用されていないときに、このダイアログ ボックスと非常によく似たダイアログ ボックス (ただし、テキストは私が設定したもの) をポップアップ表示することです。(この質問の目的上、「使用されていない」とは、キーボードやマウスの操作がないことを意味するものとします)。

私は指示されました Ubuntu はサスペンドする前に非アクティブ状態をどのように判断しますか? そして スクリプトはどのようにしてユーザーのアイドル時間を検出できますか? Ruby または Shell スクリプトを使用していますが、コーディング方法がわかりません。

必要なことを実現するより簡単な方法はありますか?

答え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

編集:質問の編集後、OPは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
    

ノート

  • 利便性のため(そしてテキストレイアウトを制御するため)、テキストは外部テキストファイルから取得されます。リターンなどはテキストファイルからメッセージにそのままコピーされます。zenity --no-wrapのオプションが使用されるため、必要リターンを使用してください。そうしないと、メッセージが過度に広範囲になってしまいます。
  • メッセージの表示方法は、他の zenity オプションを使用して「調整」できます。

答え3

最終的に私がやったことは次のとおりです:

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

ソフトリンクされているアカウントのセッション アプリのエントリとしてその行を追加したので/etc/guest-session/skel、ゲスト セッションが開始するたびに実行されます。

関連情報