测试屏幕保护程序是否处于活动状态

测试屏幕保护程序是否处于活动状态

我有一个每小时运行一个脚本的 cron,它一旦启动就会使用通知发送在 Ubuntu 18.04 桌面(Gnome)上发出通知。

我可以在脚本中添加什么内容:

  1. 如果屏幕被锁定则退出。
  2. 如果屏幕未锁定,则继续正常通知。

以下答案使我依赖于环境:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive

$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive

$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive

答案1

有一个设置可以在锁定屏幕启用时隐藏通知:

GUI 设置

您也可以通过命令行修改此设置:

gsettings set org.gnome.desktop.notifications show-in-lock-screen false

不过,既然你问了,你也可以gdbus在命令行上使用带--session参数的和org.gnome.ScreenSaver来确定屏幕是否被锁定。

答案2

测试屏幕保护程序是否处于活动状态

qdbus会告诉您屏幕保护程序(由 Lock Screen 使用)是否处于活动状态。首先,您需要知道您正在使用哪种环境:Gnome、Unity、KDE ​​等。

在此示例中,Unity 处于活动状态,而 Gnome 和 KDE 则未处于活动状态:

$ qdbus org.freedesktop.ScreenSaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
false

$ qdbus org.gnome.ScreenSaver /ScreenSaver org.gnome.ScreenSaver.GetActive
Error: org.freedesktop.DBus.Error.UnknownMethod
No such interface 'org.gnome.ScreenSaver' on object at path /ScreenSaver

$ qdbus org.kde.screensaver /ScreenSaver org.freedesktop.ScreenSaver.GetActive
Service 'org.kde.screensaver' does not exist.

对于 Gnome 桌面,第二个选项将返回false,而第一个和第三个选项将出现错误消息。

相关内容