我在共享的低资源计算机上运行 xubuntu。我想运行一个脚本,每当用户锁定屏幕时,该脚本就会终止浏览器(firefox 和 chromium),以便其他用户可以使用资源。
我相信这不是很难做到,但我在这方面的经验为零。有人可以帮忙吗,我想一个简短的脚本应该可以做到这一点?
谢谢你们。
答案1
由于您使用的是低资源系统,我猜测默认的屏幕锁是 xlock,没有打开任何屏幕保护程序。在这种情况下,您必须将屏幕锁定命令从“xlock”编辑为“xlock && pkill firefox”或“xlock && pkill chromium”。我对此不了解更多,但基本上,如果您在命令后添加“ && ”,则可以放置另一个命令,该命令仅在第一个命令完成时才会执行(例如,当 xlock 退出解锁屏幕时)。
答案2
编写一个屏幕保护程序。
这并不像听起来那么疯狂。 Xlock 使用不属于屏幕锁定程序的屏幕保护程序在屏幕上绘图,因此您可以编写一个简单的 shell 脚本来终止浏览器,然后exec
使用另一个屏幕保护程序在屏幕上绘图,并将 xlock 设置为使用该脚本作为屏幕保护程序。我可能可以把它减少到大约五行。
答案3
Linux 中的kill 命令可以向进程发送许多不同的信号。其中之一可能是 STOP,它将冻结该进程,直到您发送 CONT 信号。这一切都没有杀死任何人。
如果你真的想杀人,那就使用 TERM 信号。
多个打开的浏览器可以共享内存,正如其他人所建议的那样,我不希望我的浏览器被关闭并且我的研究丢失。
当没有人做某事时浪费 CPU...那是不同的。
很久以前,我创建了一个可以做到这一点的脚本;根据屏幕保护程序的状态冻结和解冻浏览器。
部分代码来自https://www.jwz.org/xscreensaver/man3.html
我在这里复制这个例子:
#!/usr/bin/perl
my $blanked = 0;
open (IN, "xscreensaver-command -watch |");
while (<IN>) {
if (m/^(BLANK|LOCK)/) {
if (!$blanked) {
system "sound-off";
$blanked = 1;
}
} elsif (m/^UNBLANK/) {
system "sound-on";
$blanked = 0;
}
}
您可以使用以下命令发送信号
system "killall --ignore-case --quiet -s STOP iceweasel chromium firefox firefox-esr";
system "killall --ignore-case --quiet -s CONT iceweasel chromium firefox firefox-esr";
现在您需要粘合各个部分,适应您特定的屏幕保护程序和浏览器,然后进行测试。
另一个例子可能是(同样,取决于所使用的屏幕保护程序)
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
*) echo OTHER_CASE;;
esac
done