我想(從 cron)檢查用戶是否有打開的桌面會話。(“打開”是指無論多么空閑都可以在螢屏上看到)到目前為止,我已經介紹了兩個基礎:
- 我可以檢查用戶是否登錄(我使用“w”來檢查屬于用戶的 tty)和
- 我可以檢查螢屏鎖定是否處于活動狀態。(配合屏保命令)
然而,當另一個用戶會話已啟動(通過切換用戶)時,顯然不會激活常規螢屏鎖定機制。有沒有辦法檢測這種情況?或者也許是更好的單一通用方法?如果這是未來的證明會很好(閱讀 Wayland 能力)。
系統是:Ubuntu 20.04 Mate with X11 /Xorg
uj5u.com熱心網友回復:
我找到了一個有點笨拙的解決方案,方法是使用loginctl list-sessions獲取所有當前會話的 id,然后使用andloginctl show-session $id掃描會話:Active=yesType=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 )
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/473003.html
