在 linux/gnome 设置中,我如何在系统范围内的事件(例如注销和关机)结束之前做出反应?

问题描述 投票:0回答:1

在我正在开发的应用程序中,我希望它监视断电、锁定或挂起,并在这些事件发生之前执行某些任务。

这样的东西看起来怎么样?我必须听什么、在哪里以及如何听?

目前,这只需要在 Linux gnome 上工作,但一旦成功,我将不得不扩展到 macOS。

linux events signals system gnome
1个回答
2
投票

您可以使用消息总线系统D-Bus来监听Linux系统上的注销、关机和挂起事件。

要监听注销、关机和挂起事件,您可以使用 dbus-monitor 命令监听 org.gnome.SessionManager 界面上的适当信号。例如,要监听注销事件,您可以运行以下命令:

dbus-monitor "interface='org.gnome.SessionManager',member='SessionClosed'"

这将在每次注销事件发生时打印出一条消息。要过滤消息以仅显示注销事件,您可以使用 grep 命令,如下所示:

dbus-monitor "interface='org.gnome.SessionManager',member='SessionClosed'" | grep SessionClosed

要监听关闭和挂起事件,可以使用以下命令:

    dbus-monitor "interface='org.gnome.SessionManager',member='PrepareForShutdown'"
dbus-monitor "interface='org.gnome.SessionManager',member='PrepareForSleep'"

要在注销、关机或挂起事件发生之前执行某些任务,您可以使用 dbus-monitor 命令编写一个脚本来监听这些事件,然后在事件发生之前执行您想要的任务。

这里是一个简单的bash脚本,使用dbus-monitor监听关机事件,并在关机事件发生时执行echo命令:

#!/bin/bash

# Run dbus-monitor in the background to listen for shutdown events
dbus-monitor "interface='org.gnome.SessionManager',member='PrepareForShutdown'" &

# Store the PID of the dbus-monitor process
pid=$!

# Run an infinite loop to check for shutdown events
while true; do
    # Check if dbus-monitor has exited (indicating a shutdown event has occurred)
    if ! kill -0 $pid 2>/dev/null; then
        # dbus-monitor has exited, so a shutdown event has occurred
        # Execute the command you want to run before the shutdown
        echo "Shutdown event detected, executing command..."
        # Replace "echo" with the command you want to run
        exit 0
    fi
    # Sleep for a short time before checking again
    sleep 1
done

您可以将

echo
命令更改为上面的脚本以执行您想要的命令。

© www.soinside.com 2019 - 2024. All rights reserved.