GNU/Linux >> Linux の 問題 >  >> Linux

画面のロックが解除されるたびにUbuntuにプログラムを自動的に実行させるにはどうすればよいですか?

少しトリッキーですが、可能です。 GnomeScreensaver ドキュメントの状態:

<ブロック引用>

スクリーンセーバーがアクティブまたは非アクティブになったときにアクションを実行する方法はありますか?それとも、セッションがアイドル状態になったときですか?

1 つの方法は、gnome-screensaver からの D-Bus 信号を監視することです。セッションがアイドル状態になったとき、または 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";
    }
}

dbus-monitor を使って調べたところ 信号が発信された画面のロック/ロック解除に進みました

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

画面がロックされたときと

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

ロック解除時。

上記のスクリプトを変更すると、

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');
    } 
}


Michael が書いた bash シェル スクリプトの構築:

#!/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

同じ外部スクリプトを共有するために bash で実行:

#!/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. UbuntuでCプログラムをコンパイルして実行する方法

  2. ディレクトリの内容が更新されたときにコマンドを実行するにはどうすればよいですか?

  3. 実行時にダイナミックライブラリの実行可能ファイルの負荷を確認する方法は?

  1. シェルでプログラムの実行時間を取得する

  2. Wine などを使って Steam ゲームを Ubuntu で実行するにはどうすればよいですか?

  3. サーバーで現在の時刻を取得するにはどうすればよいですか?

  1. 最後にWindowsを使用したのはいつですか。

  2. ある端末の標準を別の端末にミラーリングするにはどうすればよいですか?

  3. 特定のプロセスで実行されるユーザー、pid、およびコマンドのみを取得するにはどうすればよいですか? (Ubuntu 11.10)