我的系统上的每个工作区域都有不同的用户。这是为了将书签、文件和其他默认值分开。
通常会同时登录几个“用户”,当我更改当时正在处理的项目时,我只是在它们之间进行切换。
我正在使用 Ubuntu 18.04 和 Gnome 桌面环境
我想跟踪我何时从事不同的项目,并且我认为跟踪这些会话将是实现此目的的一种简单方法,但是我不知道是否有可用的日志可以知道哪个用户正在使用任何时候的 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
答案1
可能实现这一目标的方法是使用总线。这是不同任务之间的一种通信机制,非常通用,因此很难使用。您应该寻找名为的事件信号,由 systemd 之类的东西通过总线发送已登录守护进程和 gnome 屏幕保护程序。
至少有 3 个不同的 C 库可以访问总线,此外还有一些更易于管理的 Python 库。并且有一些简单的命令行界面应该足以编写 shell 脚本来提取数据。例如,
dbus-monitor --system
(您可能需要sudo
)将连续运行以显示呼叫和事件。寻找以 开头signal
的节path=/org/freedesktop/login1...
。这些将以某种复杂的方式包含当某人登录或注销时,或者当seat0
(主控制台)上的用户更改时,或者当显示由于空闲而锁定时的信息。
系统创建了自己的替代命令:
sudo busctl monitor
它以不同的格式提供信息。还有gdbus monitor ...
which 需要更多参数来说明要听什么。
或者,您可以尝试在每次登录中使用一些工作表时间跟踪工具,例如追踪(对此我一无所知),然后合并信息。
答案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 以及两个 TTY 登录到这台机器。其中一台 TTY 正在运行 X11。
它不是日志,但如果您定期轮询它,则可以用它创建日志。