วิธีการเรียกใช้คำสั่งหรือสคริปต์ที่ล็อคหน้าจอ / ปลดล็อค?


19

ฉันกำลังมองหาวิธีในการจัดเก็บเวลาล็อก / ปลดล็อกหน้าจอ

A=$(date)
echo $A >> $HOME/time_xprofile

ฉันลองทำอะไร:

$HOME/.bashrc
$HOME/.bash_logout
$HOME/.bash_prompt
$HOME/.xprofile

จากนั้นฉันล็อคหน้าจอและตรวจสอบว่าไฟล์ปรากฏขึ้นและมันล้มเหลวทุกครั้ง ฉันจะตรวจสอบเวลาได้อย่างไร


เมื่อฉันอ่านคำถามนี้ฉันคิดว่าคุณไม่ได้ใช้เซิร์ฟเวอร์ X คำตอบที่คุณเลือกนั้นทำงานได้อย่างหมดจด ขณะใช้งานเซิร์ฟเวอร์ X บางทีคุณอาจอธิบายสถานการณ์ของคุณได้ดีขึ้น ...
ExploWare

FWIW คำถามนี้ก็ยังถามบน Unix / Linux stackexchange
joeytwiddle

คำตอบ:


20

สคริปต์ต่อไปนี้จะเขียนเวลาล็อค / ปลดล็อคในไฟล์time_xprofileในบ้านของคุณ

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true
    do read X
    if echo $X | grep "boolean true" &> /dev/null; then
        echo "locking at $(date)" >> $HOME/time_xprofile
    elif echo $X | grep "boolean false" &> /dev/null; then
        echo "unlocking at $(date)" >> $HOME/time_xprofile
    fi
    done )

บันทึกสคริปต์ ให้สิทธิ์ดำเนินการ

chmod +x script.sh

วิธีการวิ่ง

./script.sh &

หมายเหตุสคริปต์ควรทำงานในพื้นหลัง อย่าฆ่ามัน หากคุณเปิดล็อคหน้าจอ / ปลดล็อคในขณะที่สคริปต์ทำงานในพื้นหลังเวลาล็อค / ปลดล็อคของคุณจะถูกบันทึกในtime_xprofileไฟล์ที่บ้านของคุณ หนึ่งสามารถใช้เพื่อเรียกใช้คำสั่งหรือสคริปต์ที่ล็อคหน้าจอ / ปลดล็อค

โปรดทราบว่าหากคุณปิดเทอร์มินัลปัจจุบันสคริปต์ของคุณจะถูกฆ่า คุณสามารถใช้ได้

nohup ./script.sh &

จากนั้นจะยังคงทำงานต่อไปแม้ว่าจะปิดเครื่องแล้วก็ตาม

วิธีการฆ่าสคริปต์

เพื่อฆ่ากระบวนการใช้ใน terminal

ps ax| grep "[s]cript.sh" | cut -d' ' -f2 | xargs kill

สคริปต์ข้างต้นได้รับแรงบันดาลใจจากคำตอบนี้


มันยังใช้งานได้กับ Ubuntu 17.10 กับ XServer หรือไม่ ฉันไม่รู้ว่าทำไมไม่ทำงานให้ฉัน ..
eddieferetro

ยิ่งไปกว่านั้นมันจะทำงานเฉพาะไม่กี่ครั้ง ...
eddieferetro

1
@eddieferetro ฉันยังคงอยู่ที่ 16.04 ไม่สามารถทดสอบให้คุณได้ ทำไมคุณไม่ถามคำถามใหม่ที่ระบุถึงปัญหาของคุณ เหตุการณ์ Dbus สำหรับการล็อกหน้าจออาจมีการเปลี่ยนแปลงใน 17.10
souravc

6

ใน Ubuntu 14.04 เหตุการณ์ DBus สำหรับการล็อกการล็อกหน้าจอมีการเปลี่ยนแปลงและสคริปต์ใหม่สำหรับการเชื่อมโยงกับการล็อกหน้าจอและปลดล็อกเหตุการณ์มีลักษณะดังต่อไปนี้

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while true; do
    read X
    if echo $X | grep "desktop-lock" &> /dev/null; then
      SCREEN_LOCKED;
    elif echo $X | grep "desktop-unlock" &> /dev/null; then
      SCREEN_UNLOCKED;
    fi
  done
)

แทนที่ SCREEN_LOCKED และ SCREEN_UNLOCKED ด้วยสิ่งที่คุณต้องทำ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.