如何检查 *open* 用户桌面会话
How to check for *open* user desktop session
我想检查(从 cron)用户是否有打开的桌面会话。 (“打开”是指无论多闲,屏幕上都可见)到目前为止,我已经介绍了两个基础:
- 我可以检查用户是否登录(我使用“w”来检查属于用户的 tty)和
- 我可以检查屏幕锁定是否处于活动状态。 (配合屏幕保护程序命令)
然而,当另一个用户会话已启动(通过切换用户)时,显然不会激活常规屏幕锁定机制。有没有办法检测这种情况?或者也许是更好的单一通用方法?如果这是未来的证明会很好(阅读 Wayland 能力)。
系统是:Ubuntu 20.04 配合 X11 /Xorg
我找到了一个有点笨拙的解决方案,使用 loginctl list-sessions
获取所有当前会话的 ID,然后 loginctl show-session $id
使用 Active=yes
和 Type=x11
扫描会话:
#!/usr/bin/env python3
import subprocess
import re
res = subprocess.run( [ "loginctl", "--no-legend", "list-sessions" ],
stdout=subprocess.PIPE )
for line in res.stdout.decode("utf-8").split("\n"):
if len(line)==0: continue
session, uid, user, rest = re.split( r"\s+", line, maxsplit=3 )
info = subprocess.run( [ "loginctl", "show-session", session ],
stdout=subprocess.PIPE )
data = {}
for infoline in info.stdout.decode("utf-8").split("\n"):
if len(infoline)==0: continue
key, value = re.split( "=", infoline, maxsplit=1 )
data[key] = value
if data.get("Active")=="yes" and data.get("Type")=="x11":
print( user )
我想检查(从 cron)用户是否有打开的桌面会话。 (“打开”是指无论多闲,屏幕上都可见)到目前为止,我已经介绍了两个基础:
- 我可以检查用户是否登录(我使用“w”来检查属于用户的 tty)和
- 我可以检查屏幕锁定是否处于活动状态。 (配合屏幕保护程序命令)
然而,当另一个用户会话已启动(通过切换用户)时,显然不会激活常规屏幕锁定机制。有没有办法检测这种情况?或者也许是更好的单一通用方法?如果这是未来的证明会很好(阅读 Wayland 能力)。
系统是:Ubuntu 20.04 配合 X11 /Xorg
我找到了一个有点笨拙的解决方案,使用 loginctl list-sessions
获取所有当前会话的 ID,然后 loginctl show-session $id
使用 Active=yes
和 Type=x11
扫描会话:
#!/usr/bin/env python3
import subprocess
import re
res = subprocess.run( [ "loginctl", "--no-legend", "list-sessions" ],
stdout=subprocess.PIPE )
for line in res.stdout.decode("utf-8").split("\n"):
if len(line)==0: continue
session, uid, user, rest = re.split( r"\s+", line, maxsplit=3 )
info = subprocess.run( [ "loginctl", "show-session", session ],
stdout=subprocess.PIPE )
data = {}
for infoline in info.stdout.decode("utf-8").split("\n"):
if len(infoline)==0: continue
key, value = re.split( "=", infoline, maxsplit=1 )
data[key] = value
if data.get("Active")=="yes" and data.get("Type")=="x11":
print( user )