以 root 身份使用 gnome-screensaver-command 锁定屏幕(来自 /etc/pm/sleep.d 脚本)

以 root 身份使用 gnome-screensaver-command 锁定屏幕(来自 /etc/pm/sleep.d 脚本)

我的系统(Ubuntu 15.10)有一个错误:我在“亮度和锁定”设置面板上启用了“从挂起唤醒时需要我的密码”,但它并没有要求我输入密码,这非常不安全。

作为一种解决方法,我试图编写一个可以在 下运行的脚本/etc/pm/sleep.d。它应该是这样的:

#!/bin/bash

case "${1}" in
  hibernate)
    # Do nothing
    ;;
  resume|thaw)
    su -c "gnome-screensaver-command --lock" MYUSERNAME
    ;;
esac

问题是,这不起作用;gnome-screensaver-command 失败并显示以下消息:

** Message: Failed to get session bus: Could not connect: Connection refused

然后,我尝试将命令更改为:

su MYUSERNAME -c "export $(dbus-launch) && gnome-screensaver-command -l"

然后失败:

** Message: Failed to get session bus: The connection is closed

那么,问题是:正确的方法是什么?

答案1

在使用命令之前,你需要DBUS_SESSION_BUS_ADDRESS在 ssh 中导出远程机器dbus

您必须通过键入以下命令在要远程发送命令的机器上本地找到它:

set | grep DBUS

这将为您提供 shell 的当前DBUS_SESSION_BUS_ADDRESS值,您应该在连接到远程机器后在 ssh shell 中导出该值,然后享受。

答案2

我能够通过DBUS_SESSION_BUS_ADDRESS从当前 gnome 会话读取权限来解决这个问题。完整示例:

dbus_address=$(xargs -n 1 -0 < /proc/`pgrep gnome-session`/environ | grep DBUS)
su USERNAME -c "export $dbus_address && gnome-screensaver-command -l"

相关内容