Cũng có thể trả lời điều này mặc dù đó không phải là câu trả lời của tôi (ông chủ của tôi đã cung cấp cho tôi giải pháp) để giúp đỡ những người khác có cùng nhu cầu (hoặc đầu óc tò mò).
tl; dr: Sử dụng D-Bus để nhận tín hiệu được kích hoạt / hủy kích hoạt của màn hình khóa.
Có vẻ như nhắn tin D-Bus được hỗ trợ rộng rãi bởi các ứng dụng Gnome và cụ thể là ứng dụng ScreenSaver và có vẻ như ứng dụng gnome-Screensaver là ứng dụng khóa chính thức cho vỏ Gnome.
Vì vậy, để kiểm tra nó, tôi chỉ cần chạy màn hình dbus và nhận được phản hồi:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
Tôi đã viết một đoạn script python nhỏ để đăng nhập hoạt động này vào một tệp:
#!/usr/bin/env python
from datetime import datetime
import os
import pwd
import subprocess
import time
LOG_FILE = os.path.expanduser('~/hours_log.csv')
cmd = subprocess.Popen(["dbus-monitor \"type='signal',interface="
"'org.gnome.ScreenSaver'\""], shell=True,
stdout=subprocess.PIPE)
running = 0
while 1:
time.sleep(0.1)
if running:
output = cmd.stdout.readline()
status = 'unlocked' if 'true' in output else 'locked'
new_line = "{time} {user} {status} the screen\n".format(
time=datetime.now().ctime(),
user=pwd.getpwuid(os.getuid())[0],
status=status
)
with open(LOG_FILE, 'a') as f:
f.write(new_line)
running = 0
line = cmd.stdout.readline()
if "ActiveChange" in line and 'org.gnome.ScreenSaver' in line:
running = 1
.sh
tệp và thêm nó vào các ứng dụng khởi động của Gnome. Liệu những gì nó nói trên tin, thx