屏幕唤醒后如何通过 Linux systemd 运行命令/进程?

屏幕唤醒后如何通过 Linux systemd 运行命令/进程?

我有一个老 Linux 问题,没有任何解决方案,所以也许您可以帮助我?!

systemd是否有可能通过任何已处理的事件来运行 CLI 命令/启动进程屏幕唤醒系统未从挂起状态唤醒!!!,只是屏幕唤醒屏幕空白后作为省电功能。网上有无数关于从待机状态真正唤醒系统的冗余问题,但遗憾的是我还没有找到任何关于仅用于省电屏幕空白的问题。

如果无法实现这一点systemd,还有其他解决方案吗?是否有可能,或者我必须干脆忘记这样的事情?

在此先感谢任何类型的帮助!

答案1

您可以使用 来做到这一点xscreensaver

来自xscreensaver男人:

--watch 每次屏幕保护程序改变状态时打印一行:当屏幕空白、锁定、取消空白或正在运行的 hack 发生更改时。此选项永远不会返回;它旨在供希望以某种方式对屏幕保护程序做出反应的 shell 脚本使用。其输出的示例如下:

BLANK Fri Nov  5 01:57:22 1999
RUN 34
RUN 79
RUN 16
LOCK Fri Nov  5 01:57:22 1999
RUN 76
RUN 12
UNBLANK Fri Nov  5 02:05:59 1999

上面显示了屏幕保护程序激活、运行三个不同的黑客程序、然后锁定(可能是因为锁定超时)然后取消空白(因为用户变得活跃并输入了正确的密码。)黑客号码是它们在“程序”列表中的索引(从 1 开始,而不是 0,对于 --select 命令。)

例如,假设您想运行一个程序,在屏幕空白时调低机器的音量,在屏幕恢复空白时调高音量。您可以通过在后台运行如下所示的 Perl 程序来实现这一点。以下程序跟踪 --watch 命令的输出并做出相应的反应:

#!/usr/bin/perl


my $blanked = 0;
open (my $in, "xscreensaver-command -watch |") || die;
while (<$in>) {
  if (m/^(BLANK|LOCK)/) {
    if (!$blanked) {
      system ("sound-off");
      $blanked = 1;
    }
  } elsif (m/^UNBLANK/) {
    system ("sound-on");
    $blanked = 0;
  }
}

请注意,LOCK 可能带有或不带有前面的 BLANK(取决于锁超时是否为非零),因此上述程序会跟踪它们两者。

答案2

虽然@mashuptwice的答案似乎也很完美,但最后我通过以下线索解决了“问题”:https://unix.stackexchange.com/questions/28181/how-to-run-a-script-on-screen-lock-unlock

根据线程,有可能仅在“屏幕空白”时触发(没有真正的‘锁定’状态),而且也处于‘锁定’状态。

相关内容