私のシステムの各ワークスペースには異なるユーザーがいます。これは、ブックマーク、ファイル、その他のデフォルト値を分離するためのものです。
通常、複数の「ユーザー」が同時にログインしており、その時点で作業しているプロジェクトを変更したときにそれらを切り替えます。
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
loginctl
session-id
ユーザーのリストが提供されます。ここでを使用することができ、これらのセッションのまたはを見るloginctl show-session <session-id>
ことができますType=x11
。Type=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を実行しています。
ログではありませんが、定期的にポーリングするとログを生成できます。