อาจตอบคำถามนี้ได้เช่นกันแม้ว่าจะไม่ใช่คำตอบของฉัน (เจ้านายของฉันให้วิธีการแก้ไข) เพื่อช่วยเหลือผู้อื่นด้วยความต้องการเดียวกัน (หรือจิตใจที่อยากรู้อยากเห็น)
tl; dr: ใช้ D-Bus เพื่อรับสัญญาณการเปิดใช้งาน / ปิดการใช้งานของ lockscreen
ดูเหมือนว่าการส่งข้อความD-Busได้รับการสนับสนุนอย่างกว้างขวางจากแอป GNOME และแอป ScreenSaver โดยเฉพาะและดูเหมือนว่าแอป gnome-screensaverเป็นแอปล็อคอย่างเป็นทางการสำหรับ Gnome shell
ดังนั้นเพื่อทดสอบออกมาฉันเพิ่งรันdbus-monitorและรับคำตอบ:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
ฉันได้เขียนสคริปต์หลามเล็ก ๆ น้อย ๆ เพื่อบันทึกกิจกรรมนี้ลงในไฟล์:
#!/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
ไฟล์และเพิ่มไปยังแอปพลิเคชันเริ่มต้นของ Gnome ไม่สิ่งที่กล่าวในดีบุก, ขอบคุณ