我的系统(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"