背景:linux系统支持多用户同时在线(online),可随时切换用户。那么,如何获取当前活跃(active)用户(user)的信息。比如,用户1(xiaoming)和用户2(xiaohong)同时登录账号。现从用户xiaoming切换到用户xiaohong,进行用户操作。后台常驻进程要识别用户xiaohong正在操作。
实现:linux系统一切皆文件。系统目录/run/systemd/users/内会存放当前已登录用户的信息文件。用户信息文件以用户uid(数字)为文件名。文件内容示例如下:
secadm@secadm:/run/systemd/users$ pwd
/run/systemd/users
secadm@secadm:/run/systemd/users$ ls
1000 1001
secadm@secadm:/run/systemd/users$ cat 1000
# This is private data. Do not parse.
NAME=secadm
STATE=active
STOPPING=no
RUNTIME=/run/user/1000
DISPLAY=2
REALTIME=1627434880901260
MONOTONIC=20029181
SESSIONS=2
SEATS=seat0
ACTIVE_SESSIONS=2
ONLINE_SESSIONS=2
ACTIVE_SEATS=seat0
ONLINE_SEATS=seat0
结果:当STATE=active时,用户为活跃状态,即切换后的用户;当STATE=online时,用户已登录,但非活跃状态。