GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Anda membuat Ubuntu menjalankan program secara otomatis setiap kali layar tidak terkunci?

Itu mungkin, meskipun agak rumit. Dokumentasi GnomeScreensaver menyatakan:

Apakah ada cara untuk melakukan tindakan saat screensaver diaktifkan atau dinonaktifkan? Atau saat sesi menjadi tidak aktif?

Salah satu caranya adalah dengan memperhatikan sinyal D-Bus dari gnome-screensaver. Berikut adalah contoh cara melakukan tindakan saat sesi menganggur atau tidak lagi menganggur menggunakan bahasa Perl:

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
    if (m/^\s+boolean true/) {
        print "*** Session is idle ***\n";
    } elsif (m/^\s+boolean false/) {
        print "*** Session is no longer idle ***\n";
    }
}

Padahal saat saya teliti menggunakan dbus-monitor dan melanjutkan untuk mengunci/membuka kunci layar, sinyal yang dipancarkan adalah

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true

saat layar dikunci dan

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false

Saat tidak terkunci.

Jadi mengubah skrip di atas,

my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";

open (IN, "$cmd |");

while (<IN>) {
    if (m/^\s+boolean false/) {
        exec('/path/to/your/script');
    } 
}

harus melakukannya.


Membangun skrip bash shell yang ditulis Michael:

#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do 
    if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then 
        # runs once when screensaver comes on...
    fi
    if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
        # runs once when screensaver goes off...
    fi
done

Melakukannya di bash untuk berbagi skrip eksternal yang sama:

#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do 
        if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then 
               # do whatever you want here
        fi
done

Linux
  1. Bagaimana Cara Menjalankan Perintah Saat Konten Direktori Diperbarui?

  2. Bagaimana Cara Mengetahui Beban Eksekusi Perpustakaan Dinamis Saat Dijalankan?

  3. Linux – Bagaimana Mendapatkan Waktu Jam Dinding Dari Proses Yang Berjalan?

  1. Dapatkan waktu eksekusi program di shell

  2. Bagaimana Anda menjalankan game Steam di Ubuntu melalui Wine atau yang serupa?

  3. Bagaimana Anda mengambil waktu saat ini di server?

  1. Cara Mengkompilasi dan Menjalankan Program C di Ubuntu

  2. Bagaimana Anda Mencerminkan Stdout Dari Satu Terminal Ke Terminal Lainnya?

  3. Bagaimana cara menjadwalkan program java untuk dijalankan setiap hari?