Экран блокировки с командой 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"