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