各ユーザーがUbuntuでGUIを積極的に使用するタイミングを追跡する方法は?

各ユーザーがUbuntuでGUIを積極的に使用するタイミングを追跡する方法は?

私のシステムの各ワークスペースには異なるユーザーがいます。これは、ブックマーク、ファイル、その他のデフォルト値を分離するためのものです。

通常、複数の「ユーザー」が同時にログインしており、その時点で作業しているプロジェクトを変更したときにそれらを切り替えます。

Ubuntu 18.04およびGnomeデスクトップ環境を使用しています。

他のプロジェクトで作業するときを追跡したいと思います。これらのセッションを追跡するのは簡単な方法だと思います。しかし、どのユーザーがGUIを使用していたかを知らせるログがあるかどうかはわかりません。時間、またはそのようなトラッカーを作る方法。

トラッカーに必要と思われる2つの詳細は次のとおりです。 1.) ユーザーが開いたセッションのロックを解除する時を含むユーザーがログインしたときのイベント 2.) 非アクティブで画面がロックされる

これが文書化されているか文書化されているのかを知っている人はいますか?

ありがとうございます!ウッディ

解決策: (下記のmihの助けおよびこの質問によって:画面がロックまたはロック解除されたときにスクリプトを実行する方法は?)

追跡したい各ユーザーに対して、~/.profileで次のスクリプトを実行する必要があります。ログイン/ログアウト時間はOUTPUTFILEに書き込まれます。

初期エコーは、ユーザーがログインした後にのみスクリプトが実行されるために発生します。それ以外の場合は失われます。その後のすべてのログインは dbus-monitor でキャプチャされます。

#!/bin/bash
echo $(date), $USER, SCREEN_UNLOCKED >> OUTPUTFILENAME
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
  while read x; do
    case "$x" in 
      *"boolean true"*) echo $(date), $USER, SCREEN_LOCKED >> OUTPUTFILENAME;;
      *"boolean false"*) echo $(date), $USER, SCREEN_UNLOCKED >> OUTPUTFILENAME;;
    esac
  done

答え1

これを達成するための可能な方法は、以下を使用することです。バス。これは非常に一般的で、使用するのが難しいさまざまなタスク間の通信メカニズムです。次のイベントを探す必要があります。シグナル、systemdのようなものによってバスを介して送信されます。ログインしましたデーモンとGNOMEスクリーンセーバー。

バスにアクセスする少なくとも3つの異なるCライブラリと管理可能なPythonライブラリがいくつかあります。そして、データを抽出するためのシェルスクリプトを書くのに十分ないくつかの簡単なコマンドラインインターフェイスがあります。例えば、

dbus-monitor --system

(必要な場合sudo)コールとイベントを表示するために継続的に実行されます。で始まるsignalスタンザを見つけてくださいpath=/org/freedesktop/login1...。これseat0には、誰かがログインまたはログアウトしたとき、ユーザー(メインコンソール)が変更されたとき、アイドル状態のためにディスプレイがロックされたときの情報が洗練された方法で含まれます。

システム私自身の代替コマンドを作成しました。

sudo busctl monitor

さまざまな形式で情報を提供します。そしてgdbus monitor ...何を聞くかを説明するには、より多くのパラメータが必要です。

または、ログインするたびに、次のワークシート時間追跡ツールを試すこともできます。(私はこれについて何も知りません)その後、情報をマージします。

答え2

loginctlsession-idユーザーのリストが提供されます。ここでを使用することができ、これらのセッションのまたはを見るloginctl show-session <session-id>ことができますType=x11Type=wayland

例は次のとおりです。

$ loginctl
SESSION  UID USER SEAT  TTY  
     19 1000 stew       pts/2
      2 1000 stew seat0 tty2 
     20 1000 stew seat0 tty6

3 sessions listed.
$ loginctl show-session 19 -p Type
Type=tty
$ loginctl show-session 2 -p Type
Type=x11
$ loginctl show-session 20 -p Type
Type=tty

この場合、SSHと2つのTTYを介してシステムにログインしました。 TTYの1つがX11を実行しています。

ログではありませんが、定期的にポーリングするとログを生成できます。

関連情報