Como posso bloquear a tela usando a nova tela de bloqueio na linha de comando?

19

O Ubuntu 14.04 apresenta uma nova tela de bloqueio que se parece com a tela de login.

Nova tela de bloqueio

Ainda consigo bloquear a tela usando o comando gnome-screensaver-command --lock(como sempre fazia antes), que em 14.04 bloqueia a tela, mas:

  • Se você o estiver executando na área de trabalho, ele bloqueia a tela usando a nova tela de bloqueio.
  • Se você o estiver executando em um console virtual ou via SSH, ele bloqueia a tela usando a tela de bloqueio antiga .

Eu também tentei usar xdg-screensaver lock, mas funciona da mesma maneira que gnome-screensaver-command --lockfaz (só usa a nova tela de bloqueio quando é executada na área de trabalho).

A execução light-locker-command --locknão funcionou, pois light-lockernão está instalado.

Eu acho que deve haver algumas diferenças entre executar o mesmo comando na área de trabalho e executá-lo via SSH / console virtual, mas não consegui encontrar nenhuma diferença nas variáveis ​​de ambiente.

Portanto, minha pergunta é: como bloquear a tela usando a nova tela de bloqueio do Unity e não a tela de bloqueio antiga na linha de comando?

Essa pergunta provavelmente está relacionada, pois solicita o novo comando que precisa ser usado, então aqui está outra pergunta: Por que executar o mesmo comando de bloqueio fornece resultados diferentes?

Observe que gnome-screensavernão está mais sendo usado no 14.04, de acordo com este relatório de erro :

Isso não é realmente um bug do protetor de tela do gnome, esse componente deixou de ser usado em confiança.

Léo Lam
fonte
2
Eu gostaria de saber melhor. O uso dm-tool lockchega perto: ele bloqueia a tela, mas (ao contrário da tela de bloqueio padrão do Unity) também permite alternar usuários.
Aibara
2
dm-tool locke dm-tool switch-to-greeterparece estar fazendo a mesma coisa: leve você de volta à tela de login (greeter), que parece muito semelhante à tela de bloqueio.
Léo Lam

Respostas:

14

Não tenho gnome-screensaverinstalado e o único comando que posso encontrar que funciona é o seguinte:

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

Aibara
fonte
5
qdbus org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
Aquarius Power
Isso costumava funcionar, mas parece não funcionar mais em 15.10: /
Léo Lam
@ LéoLam Você está usando uma imagem ao vivo? Ainda estou usando o 14.04, mas testei meu comando e o Aquarius Power em 15.10 e os fiz funcionar. No entanto, eu tinha que permitir que a tela de bloqueio para obtê-lo a trabalhar através deste comandogsettings set org.gnome.desktop.lockdown disable-lock-screen false
Aibara
Não, está em uma instalação real do Ubuntu. gsettings get org.gnome.desktop.lockdown disable-lock-screenretorna false. Agora não há saída ao executar o dbus-send. Talvez o gnome-screensaver seja necessário para que isso funcione?
Léo Lam
1
Veja minhas respostas agradar, talvez 15.10 abandonou usando a org.gnome.ScreenSaverinterface de dbus, por isso é provavelmente melhor idéia para se comunicar com a interface dbus do Unity
Sergiy Kolodyazhnyy
3

A resposta aceita tem a ideia correta, exceto que a tela de bloqueio está relacionada ao painel de unidade, enquanto org.gnome.ScreenSaveré obviamente um tipo de esquema relacionado ao Gnome, portanto pode ou não funcionar.

Existe, no entanto, uma interface dbus para o Unity, e tudo o que precisamos é chamar esse método dessa com.canonical.Unity.Session.Lockmaneira

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

Nota lateral :

A prova do fato de estar relacionado ao painel de unidade é simples: quando a tela está bloqueada, o processo /usr/lib/unity/unity-panel-servicemuda para /usr/lib/unity/unity-panel-service --lock-modecomo observado em tty1.

Sergiy Kolodyazhnyy
fonte
isso funciona em uma sessão gráfica, mas falha em uma sessão SSH, mesmo ao definir $ DISPLAY manualmente. "O serviço 'com.canonical.Unity' não existe."
Léo Lam
Isso não tem nada a ver com DISPLAYvariável, mas com dbus. Não sei se o over ssh Unity não tem uma sessão de dbus ou não, então não posso ajudá-lo nessa parte. Vou perguntar, mas até agora é o máximo que posso dizer.
Sergiy Kolodyazhnyy
Tente correr dbus-launch --exit-with-session gnome-terminalantes disso. serverfault.com/a/411326
Sergiy Kolodyazhnyy
Também pode se conectar a uma sessão screen / tmux em execução no X e executar o comando a partir daí. Foi minha solução final para conectar-me à sessão dbus correta a partir de um vterm.
Iiridayn
2

Eu descobri recentemente que xdg-screensaver lock funciona bem e também é uma solução bastante simples!

Paulius Šukys
fonte
É mencionado no OP que ele não funciona em todos os casos. Somente quando você o executa localmente em um terminal da GUI.
Léo Lam
Trabalhei para mim remotamente em uma sessão SSH em uma máquina LTS 18.04.
Benjamin R
1

Você sempre pode enviar as teclas: xdotool key super+l.

wieczorek1990
fonte