0

我正在尝试使用

#!/bin/bash
sudo gdbus call -y -d org.freedesktop.login1 \
                   -o /org/freedesktop/login1 \
                   -m org.freedesktop.login1.Manager.Inhibit \
                   sleep me because block
sleep 10

获取 bash 脚本中的抑制剂锁。此方法的内省如下所示:

Inhibit(in  s what,
        in  s who,
        in  s why,
        in  s mode,
        out h pipe_fd);

在我的调用gdbus完成后,使用systemd-inhibit --list. 我认为这是因为锁被获取,然后在退出时立即释放gdbus

如何pipe_fd从方法调用中复制返回的文件描述符,以便在退出调用后不会立即释放锁?

4

1 回答 1

1

如何pipe_fd从方法调用中复制返回的文件描述符,以便在退出调用后不会立即释放锁?

您不能使用命令行gdbus工具执行此操作,因为它在进行 D-Bus 调用后立即退出,因此 FD 会返回给内核。

您将需要用其他语言(可能是 Python)编写一个脚本,该脚本进行 D-Bus 调用,然后在返回的 FD退出之前对其进行适当的处​​理。在这种情况下,您可能会发现使用 systemd 自己的 Python 绑定比直接进行 D-Bus 调用更容易。

或者,您可以将 bash 脚本包装在对 的调用中systemd-inhibit,这是一个命令行实用程序,用于在另一个脚本运行时禁止关机。

于 2022-02-03T10:29:03.623 回答