Как я могу заблокировать экран, используя новый экран блокировки из командной строки?

19

В Ubuntu 14.04 появился новый экран блокировки , похожий на экран входа в систему.

Новый экран блокировки

Я все еще могу заблокировать экран с помощью команды gnome-screensaver-command --lock(как я всегда делал раньше), которая под 14.04 блокирует экран, но:

  • Если вы запускаете его с рабочего стола, он блокирует экран с помощью нового экрана блокировки.
  • Если вы запускаете его с виртуальной консоли или через SSH, он блокирует экран, используя старый экран блокировки .

Я также пытался использовать xdg-screensaver lock, но он работает так же, как gnome-screensaver-command --lockи (только использует новый экран блокировки, когда он запускается с рабочего стола).

Запуск light-locker-command --lockне работал, так как light-lockerне установлен.

Я предполагаю, что должны быть некоторые различия между выполнением одной и той же команды с рабочего стола и выполнением ее через SSH / виртуальную консоль, но я не смог найти никакой разницы в переменных среды.

Итак, мой вопрос: как я могу заблокировать экран, используя новый экран блокировки Unity, а не старый экран блокировки из командной строки?

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

Обратите внимание, что gnome-screensaverбольше не используется в 14.04, согласно этому сообщению об ошибке :

Это не ошибка гнома-скринсейвера, этот компонент перестал использоваться в верном.

Лео Лам
источник
2
Я хотел бы знать также. Использование dm-tool lockприближается: оно блокирует экран, но (в отличие от экрана блокировки Unity по умолчанию) также позволяет переключать пользователей.
Айбара
2
dm-tool lockи, dm-tool switch-to-greeterкажется, делает то же самое: возвращает вас к экрану входа в систему (приветствие), который очень похож на экран блокировки.
Лео Лам

Ответы:

14

Я не gnome-screensaverустановил, и единственная команда, которую я могу найти, которая работает, - это:

dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock

Aibara
источник
5
qdbus org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
Водолей Сила
Раньше это работало, но, похоже, больше не работает в 15.10: /
Léo Lam
@ LéoLam Используете ли вы изображение LiveCD? Я все еще использую 14.04, но я протестировал и мою команду, и Aquarius Power в 15.10 и заставил их работать. Тем не менее, мне пришлось включить экран блокировки, чтобы заставить его работать с помощью этой командыgsettings set org.gnome.desktop.lockdown disable-lock-screen false
Aibara
Нет, это на реальной установке Ubuntu. gsettings get org.gnome.desktop.lockdown disable-lock-screenвозвращается false. Теперь при запуске dbus-send нет вообще никакого вывода. Может, гном-скринсейвер нужен, чтобы это работало?
Лео Лам
1
Посмотрите мои ответы, пожалуйста, возможно, 15.10 отказался от использования org.gnome.ScreenSaverинтерфейса dbus, так что, вероятно, лучше общаться с интерфейсом Unity dbus
Сергей Колодяжный,
3

Принятый ответ имеет правильную идею, за исключением того, что экран блокировки связан с панелью единства, хотя org.gnome.ScreenSaver, очевидно, является схемой типа Gnome, поэтому он может работать или не работать.

Однако для Unity существует интерфейс dbus, и все, что нам нужно, это вызвать этот метод com.canonical.Unity.Session.Lockследующим образом

qdbus com.canonical.Unity  /com/canonical/Unity/Session com.canonical.Unity.Session.Lock

Примечание стороны :

Доказательство того, что это связано с панелью единства, простое: когда экран заблокирован, процесс /usr/lib/unity/unity-panel-serviceизменится на /usr/lib/unity/unity-panel-service --lock-modetty1.

Сергей Колодяжный
источник
это работает в графическом сеансе, но завершается неудачно в сеансе SSH даже при ручной настройке $ DISPLAY. "Сервис 'com.canonical.Unity' не существует."
Лео Лам
Это не имеет ничего общего с DISPLAYпеременной, но с dbus. Я не знаю, есть ли поверх ssh Unity сессия dbus или нет, поэтому я не могу помочь вам в этой части. Я спрошу вокруг, но пока это столько, сколько я могу сказать.
Сергей Колодяжный
Попробуйте запустить dbus-launch --exit-with-session gnome-terminalдо этого. serverfault.com/a/411326
Сергей Колодяжный
Можно также подключиться к сеансу screen / tmux, работающему внутри X, и запустить команду оттуда. Был мой последний обходной путь для подключения к правильной сессии dbus от vterm.
Iiridayn
2

Я недавно узнал, что это xdg-screensaver lock работает хорошо, и это тоже довольно простое решение!

Паулюс Шукис
источник
В ОП упоминается, что это работает не во всех случаях. Только когда вы запускаете его локально в терминале из графического интерфейса.
Лео Лам
Я работал удаленно в сеансе SSH на машине LTS 18.04.
Бенджамин Р
1

Вы всегда можете отправить нажатия клавиш: xdotool key super+l.

wieczorek1990
источник