如何保存从 bash 中的 gdbus 调用返回的文件描述符?
How to save file descriptor returned from gdbus call in bash?
我正在尝试使用
#!/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
,使其在退出调用后不会立即释放锁?
How can I duplicate the returned file descriptor, pipe_fd
, from the method call so it doesn't release the lock immediately after exiting from the call?
你不能用命令行 gdbus
工具做到这一点,因为它在调用 D-Bus 后立即退出,因此 FD 返回给内核。
您将需要用其他语言(可能是 Python)编写一个脚本,该脚本进行 D-Bus 调用,然后对返回的 FD before 它退出。在这种情况下,您可能会发现使用 systemd 自己的 Python 绑定比直接调用 D-Bus 更容易。
或者,您可以将 bash 脚本包装在对 systemd-inhibit
的调用中,这是一个禁止关机的命令行实用程序,而另一个脚本是 运行.
我正在尝试使用
#!/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
,使其在退出调用后不会立即释放锁?
How can I duplicate the returned file descriptor,
pipe_fd
, from the method call so it doesn't release the lock immediately after exiting from the call?
你不能用命令行 gdbus
工具做到这一点,因为它在调用 D-Bus 后立即退出,因此 FD 返回给内核。
您将需要用其他语言(可能是 Python)编写一个脚本,该脚本进行 D-Bus 调用,然后对返回的 FD before 它退出。在这种情况下,您可能会发现使用 systemd 自己的 Python 绑定比直接调用 D-Bus 更容易。
或者,您可以将 bash 脚本包装在对 systemd-inhibit
的调用中,这是一个禁止关机的命令行实用程序,而另一个脚本是 运行.