ฉันคิดออกว่าจะทำอย่างไร ฉันเขียนสคริปต์ Python ที่รับฟังสัญญาณ DBus ที่ระบุว่าหยุดชั่วคราวและล็อกหน้าจอ เมื่อสัญญาณทั้งสองเกิดขึ้นในช่วงเวลาสั้น ๆ สคริปต์จะถือว่านี่เป็นเหตุการณ์ที่ระงับซึ่งทำให้เกิดเหตุการณ์การล็อกหน้าจอ จากนั้นรอสัญญาณแสดงการทำงานต่อ หากเวลาผ่านไปตั้งแต่เหตุการณ์หยุดชั่วคราวน้อยกว่า 5 นาที ระบบจะบังคับให้สกรีนเซฟเวอร์ปลดล็อกโดยไม่ต้องใช้รหัสผ่าน นอกจากนี้ จะปลดล็อกหน้าจอเฉพาะเมื่อปิดฝาเมื่อส่งสัญญาณระงับ (ซึ่งน่าจะบ่งชี้ว่ามีการระงับซึ่งทำงานโดยการปิดฝา) ดังนั้นการระงับด้วยตนเองจากเมนูจะไม่เรียกใช้สคริปต์ สิ่งนี้ทำให้มั่นใจได้ว่าหน้าจอจะไม่ปลดล็อคหลังจากผู้ใช้ล็อคด้วยตนเอง
คุณสามารถค้นหาสคริปต์ได้ที่นี่: https://gist.github.com/DarwinAwardWinner/77e8acea2f14ed9ea66d7222d7ace500
ฉันบันทึกสคริปต์ใน ~/.local/bin/
ทำให้สามารถเรียกใช้งานได้ และตั้งค่าสคริปต์ให้ทำงานในพื้นหลังเมื่อฉันเข้าสู่ระบบโดยใช้โปรแกรมกำหนดค่า Startup Applications ดังที่แสดงไว้ที่นี่:

ฉันยังใช้ วิ่งหนึ่งอย่างต่อเนื่อง
จาก วิ่งหนึ่ง
แพ็คเกจเพื่อรีสตาร์ทสคริปต์โดยอัตโนมัติหากเกิดปัญหาขึ้นไม่ว่าจะด้วยเหตุผลใดก็ตาม เมื่อสคริปต์นี้ทำงาน ฉันได้รับลักษณะการทำงานที่ต้องการ: หากฉันปิดฝาแล้วเปิดในนาทีต่อมา หน้าจอจะปลดล็อกโดยที่ฉันไม่ต้องพิมพ์รหัสผ่าน แต่ถ้าฉันปิดฝาทิ้งไว้นานกว่า 5 นาที หรือฉันพักแล็ปท็อปไว้โดยไม่ปิดฝา ก็จะต้องใช้รหัสผ่านเมื่อฉันเปิดฝา คุณสามารถกำหนดค่าทั้งการจำกัดเวลาและความต้องการฝาปิดได้โดยการแก้ไขสคริปต์ (ดูที่บรรทัดที่ 100)
ในรูปแบบปัจจุบัน สคริปต์ใช้งานได้กับสกรีนเซฟเวอร์ของ GNOME เท่านั้น อย่างไรก็ตาม การปรับให้เข้ากับ KDE หรือโปรแกรมล็อกหน้าจออื่นๆ นั้นไม่น่าจะยากนัก ตราบใดที่มีสัญญาณและวิธีการ DBus ที่เหมาะสม
หมายเหตุด้านความปลอดภัยที่สำคัญ: ฉันได้พยายามอย่างดีที่สุดเพื่อจัดการกับ edge case ทั้งหมดที่ฉันนึกออก แต่ก็มีความเป็นไปได้เสมอที่ฉันจะคาดไม่ถึงว่าจะเปิดใช้งานการปลดล็อคด้วยวิธีใดวิธีหนึ่ง แม้จะหมดเวลาที่กำหนดแล้วก็ตาม ดังนั้น อย่าใช้สคริปต์นี้หากคุณมีข้อกังวลเกี่ยวกับความปลอดภัย เว้นแต่คุณจะใช้เวลาในการตรวจสอบด้วยตัวเอง