如何使用java检测ubuntu中的工作站/系统屏幕锁定?

如何使用java检测ubuntu中的工作站/系统屏幕锁定?,java,ubuntu,Java,Ubuntu,我试图记下在ubuntu操作系统中工作的每个员工的工作站/系统屏幕锁。我需要将这些记录存储在数据库中。使用JAVA。我已经搜索了所有的地方,找到了UBUNTU的想法;但我知道如何在windows操作系统中实现同样的功能。试着看看这里(类似的副本),) 这应该是一个非常棒的参考,让你跟上速度。我想您正在使用GNOME。试着看看这里(类似的副本),) 这应该是一个非常棒的参考,让你跟上速度。我想您正在使用GNOME。来自: 使用该类执行该命令并读回结果 编辑:使用grep-q 下面是一个如何使用它的

我试图记下在ubuntu操作系统中工作的每个员工的工作站/系统屏幕锁。我需要将这些记录存储在数据库中。使用JAVA。我已经搜索了所有的地方,找到了UBUNTU的想法;但我知道如何在windows操作系统中实现同样的功能。

试着看看这里(类似的副本),)

这应该是一个非常棒的参考,让你跟上速度。我想您正在使用GNOME。

试着看看这里(类似的副本),)

这应该是一个非常棒的参考,让你跟上速度。我想您正在使用GNOME。

来自:

使用该类执行该命令并读回结果

编辑:使用
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());
  }

}
编辑:添加了监视dbus信号的perl脚本。资料来源:

#/usr/bin/perl
my$cmd=“dbus monitor--session\'type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\”;
打开(在“$cmd |”中);
而(){
if(m/^\s+boolean true/){
打印“***屏幕保护程序处于活动状态***\n”;
}elsif(m/^\s+布尔值假/){
打印“***屏幕保护程序不再处于活动状态***\n”;
}
}
来自:

使用该类执行该命令并读回结果

编辑:使用
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());
  }

}
编辑:添加了监视dbus信号的perl脚本。资料来源:

#/usr/bin/perl
my$cmd=“dbus monitor--session\'type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\”;
打开(在“$cmd |”中);
而(){
if(m/^\s+boolean true/){
打印“***屏幕保护程序处于活动状态***\n”;
}elsif(m/^\s+布尔值假/){
打印“***屏幕保护程序不再处于活动状态***\n”;
}
}


我已经看过这些网站,在终端中运行时出现语法错误。由于我是Linux新手,我无法调试这些语法错误。我得到的错误是:
**/home/sathishkumark/Desktop/userinfo.sh:2:my:not found/home/sathishkumark/Desktop/userinfo.sh:4:Syntax error:word unexpected(expected”)**
你应该粘贴整个脚本,因为没有人可以在不查看代码的情况下调试你的错误。使用pastie.org并显示您的代码。这是我在terminal中运行的shell脚本。我认为如果你能先复习一下你的bash脚本技巧,这是个好主意。第二行中最明显的错误是“my$cmd”,这是错误的,应该是“$cmd”。我通过删除
my
进行了检查,之后显示
=
未找到,第二行中的错误怎么办?。一位回答者告诉我,这段代码是perl而不是bash脚本。因为我对linux非常陌生,所以我不能改变,你对他说的话怎么看?我已经看过这些网站了,在我的终端上运行时,我发现语法错误。由于我是Linux新手,我无法调试这些语法错误。我得到的错误是:
**/home/sathishkumark/Desktop/userinfo.sh:2:my:not found/home/sathishkumark/Desktop/userinfo.sh:4:Syntax error:word unexpected(expected”)**
你应该粘贴整个脚本,因为没有人可以在不查看代码的情况下调试你的错误。使用pastie.org并显示您的代码。这是我在terminal中运行的shell脚本。我认为如果你能先复习一下你的bash脚本技巧,这是个好主意。第二行中最明显的错误是“my$cmd”,这是错误的,应该是“$cmd”。我通过删除
my
进行了检查,之后显示
=
未找到,第二行中的错误怎么办?。一位回答者告诉我,这段代码是perl而不是bash脚本。因为我对linux非常陌生,所以我无法改变这一点,你对他说的话怎么看?谢谢,我让你的代码正常工作了,但我将你的代码写在java代码中,并将其打包为.jar文件运行。当我锁定或解锁屏幕时,我需要运行这个文件,如何操作。我想出了一个主意来监视屏幕保护程序,并按照viki.omega9先生指示的代码运行我的jar文件,但它给出了语法错误。我在他回答的评论中提到了这一点。我也有和你给出的类似类型的代码。我现在需要的是让这个jar文件只在屏幕被锁定和解锁时执行,所以你需要一些东西,比如在屏幕被锁定/解锁时监听一个事件,然后执行jar文件?请澄清,我真的不明白您想要完成什么。请看一下:该脚本是用perl编写的,它不是shell脚本!谢谢,我让您的代码正常工作,但我将您的代码编写在java代码中,并将其打包为.jar文件以运行。当我锁定或解锁屏幕时,我需要运行这个文件,如何操作。我想出了一个主意来监视屏幕保护程序,并按照viki.omega9先生指示的代码运行我的jar文件,但它给出了语法错误。我在他回答的评论中提到了这一点。我也有和你给出的类似类型的代码。我现在需要的是让这个jar文件只在屏幕被锁定和解锁时执行,所以你需要一些东西,比如在屏幕被锁定/解锁时监听一个事件,然后执行jar文件?请澄清,我真的不明白您想要完成什么。请看一下:该脚本是用perl编写的,它不是shell脚本!
#!/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";
    }
}