我如何跟踪每個使用者何時在 Ubuntu 上積極使用 GUI?
對於我係統上的每個工作區域,我都有不同的使用者。這是為了將書籤、文件和其他預設設置分開。
幾個“使用者”通常同時登錄,當我更改我正在處理的項目時,我只是在他們之間切換。
我正在使用帶有 Gnome 桌面環境的 Ubuntu 18.04
我想跟踪我何時從事不同的項目,我認為跟踪這些會話將是一種簡單的方法,但是我不知道是否有可用的日誌知道哪個使用者正在使用任何時候的 GUI,或者如何創建這樣的跟踪器。
我認為跟踪器需要的兩個細節是:1.)使用者登錄的事件,包括使用者解鎖已經打開的會話的時間 2.)由於不活動而鎖定螢幕的時間
有誰知道這些是否已經/可以記錄?
謝謝!伍迪
解決方案:(在下面的 meuh 和這個問題的幫助下:如何在螢幕鎖定/解鎖上執行腳本?)
對於我希望跟踪的每個使用者,需要從 ~/.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
可能實現這一點的方法是使用dbus。這是一種高度通用且非常難以使用的不同任務之間的通信機制。您應該尋找由 systemd logind守護程序和 gnome 螢幕保護程序等通過匯流排發送的事件,稱為信號。
至少有 3 個不同的 C 庫可以訪問匯流排,此外還有一些更易於管理的 Python 庫。並且有一些簡單的命令行界面應該足以編寫一個 shell 腳本來提取數據。例如,
dbus-monitor --system
(您可能需要
sudo
)將持續執行並顯示呼叫和事件。尋找signal
以path=/org/freedesktop/login1...
. 這些將以某種複雜的方式包含有人登錄或註銷時的資訊,或者seat0
(主控制台)上的使用者更改時,或者由於空閒而導致顯示鎖定時的資訊。systemd創建了自己的替代命令:
sudo busctl monitor
它以不同的格式提供資訊。還有
gdbus monitor ...
需要更多參數來說明要聽什麼。或者,您可以嘗試在每次登錄時使用一些時間跟踪工作表工具,例如跟踪(我對此一無所知),然後合併資訊。