2012-01-18 54 views

回答

3

here

gnome-screensaver-command -q | grep "is active" 

使用Runtime類來執行該命令並回讀的結果。

編輯:使用grep -q

下面的例子如何使用它:

public class ScreenSaver { 

    /* 
    * Pipes are a shell feature, so you have to open a shell first. 
    * 
    * You could use process.getInputStream() to read the output and parse it. 
    * 
    * For productive use i would prefer using the Inputstream. 
    */ 

    private static final String COMMAND = "gnome-screensaver-command -q | grep -q 'is active'"; 

    private static final String[] OPEN_SHELL = { "/bin/sh", "-c", COMMAND }; 

    private static final int EXPECTED_EXIT_CODE = 0; 


    public static boolean isScreenSaverActive() { 
    final Runtime runtime = Runtime.getRuntime(); 
    Process process = null; 
    try { 
     /* 
     * open a shell and execute the command in that shell 
     */ 
     process = runtime.exec(OPEN_SHELL); 
     /* 
     * wait for the command to finish 
     */ 
     return process.waitFor() == EXPECTED_EXIT_CODE; 
    } catch(final IOException e) { 
     e.printStackTrace(); 
    } catch(final InterruptedException e) { 
     e.printStackTrace(); 
    } 
    return false; 
    } 


    public static void main(final String[] args) { 
    System.out.println("Screensaver is active: " + isScreenSaverActive()); 
    } 

} 

編輯:添加perl腳本看DBUS信號。來源: Gnome Screensaver FAQ

#!/usr/bin/perl 

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

open (IN, "$cmd |"); 

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

謝謝我讓你的代碼工作,但我把你的代碼寫在一個java代碼中,並把它打包成一個.jar文件來運行。威爾我鎖定或解鎖我需要運行此文件的屏幕如何做到這一點。我有一個想法來監視屏幕保護程序,並通過先生viki.omega9指示的代碼運行我的jar文件,但它給出了語法錯誤。我在評論他的回答時提到了這一點。 – 2012-01-19 11:11:48

+0

我也有類似的代碼類型,你給。 **我現在需要的是讓這個jar文件只在屏幕鎖定和解鎖時執行。** – 2012-01-19 12:06:24

+0

所以當屏幕鎖定/解鎖然後執行jar文件時,你需要類似的東西來監聽事件嗎?請澄清一下,我真的不明白你想完成什麼。 – 2012-01-19 12:10:25

1

有嘗試看看這裏,(類似一式兩份),Detect workstation/System Screen Lock using Python(ubuntu)

GNOME Screensaver FAQ這應該是一個真棒參考你起牀的速度。我想你正在使用GNOME。

+0

我已經看到了這些網站,我得到語法錯誤,而我在終端中運行。由於我是Linux新手,無法調試這些語法錯誤。 **/home/sathishkumarkk/Desktop/userinfo.sh:2:my:找不到 /home/sathishkumarkk/Desktop/userinfo.sh:4:語法錯誤:單詞意外(期待「)」) **' – 2012-01-19 10:33:25

+0

您應該粘貼您的整個腳本,因爲沒有人可以在不查看代碼的情況下調試您的錯誤。使用pastie.org並顯示您的代碼。 – 2012-01-19 10:43:01

+0

這裏是我在終端中運行的shell腳本。 [我的shell腳本在.sh文件中](http://pastie.org/pastes/3212744/text) – 2012-01-19 10:58:44