Экран блокировки с командой gnome-screensaver от имени root (из скрипта /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

Итак, вопрос: что было бы правильным способом сделать это?

2 ответа

Вам нужно экспортировать DBUS_SESSION_BUS_ADDRESS удаленного компьютера в вашем SSH перед использованием dbus команды

Вы должны найти его локально на машине, на которую хотите удаленно отправлять команды, набрав команду:

set | grep DBUS

Это даст вам ток снарядов DBUS_SESSION_BUS_ADDRESS значение, которое вы должны экспортировать в оболочке ssh после подключения к удаленной машине и затем наслаждаться.

Я смог решить это, прочитав правильное DBUS_SESSION_BUS_ADDRESS из текущей сессии гнома. Полный пример:

dbus_address=$(xargs -n 1 -0 < /proc/`pgrep gnome-session`/environ | grep DBUS)
su USERNAME -c "export $dbus_address && gnome-screensaver-command -l"
Другие вопросы по тегам