Comando de tela de bloqueio One-Liner

62

Estou tentando descobrir se existe algum tipo de linha de comando equivalente que replique a funcionalidade exatamente idêntica da opção de menu 'Tela de bloqueio' disponível através do aplicativo Keychain no OS X 10.6

Estou ciente de todas as soluções 'usuais' (preferências de suspensão / proteção de tela para exigir uma senha na reativação), mas elas não são adequadas para mim.

Também estou ciente dessa opção:

/System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspend

o que também não é adequado para mim.

A funcionalidade perfeita é a opção 'Tela de bloqueio', mas ainda não encontrei uma maneira elegante de chamá-lo.

No momento, estou ligando via Automator, o que não é elegante!

Eu li muito sobre esse assunto e meu entendimento é que ninguém ainda encontrou o 'Santo Graal', mas estava pensando se isso poderia ter mudado.

user40433
fonte
Como você chama o Automator?
Matthieu Riegler
3
O que há de errado em definir as preferências de Segurança para exigir uma senha quando o protetor de tela estiver ativo e depois usar um canto quente para ativar o protetor de tela? Isso é rápido e elegante, mas você disse que não gostava dessa solução.
você precisa saber é o seguinte
3
É uma sugestão pragmática e que eu experimentei ao longo de muitos anos de uso, mas a natureza dos meus padrões de trabalho significa que isso atrapalha 80% do tempo. Eu preciso da capacidade de responder (fisicamente) a solicitações de engenharia e emergências e bloquear imediatamente a tela, mas também ter acesso remoto à caixa, enquanto ela também mantém todas as conexões existentes e tarefas em segundo plano.
user40433
11
Re: "onde está o menu da tela de bloqueio no chaveiro" Abrir chave ... preferências ... mostrar na barra de menus! Re: "o que ele faz?" Bloqueia a tela! Além disso, acho que expliquei meus requisitos (e minha aversão a "soluções" que algumas pessoas acreditam que atendem aos meus requisitos, mas não o fazem) completamente.
precisa saber é o seguinte
11
Veja também stackoverflow.com/questions/1976520/…
rogerdpack

Respostas:

50

No OS X 10.9 e posterior:

pmset displaysleepnow

Por si só, esse comando apenas faz com que a exibição fique inativa, resultando em uma tela preta. Ao configurar o seu computador para exigir uma senha imediatamente após o sono, esse one-liner funciona como um comando "bloquear computador". A preferência está disponível em Preferências do sistema> Segurança e privacidade> Geral .

Fonte: Como bloquear a tela no MacBook Air?

jordanbtucker
fonte
9
apenas para ser completo, isto só funciona se "password Rerquire após o sono ou protetor de tela começar a" opção de segurança está definido ligado nas preferências do sistema
Hofi
11
Isso parece mais equivalente a CTRL + SHIFT + Ejetar.
Jan Kyu Peblik
Isso não é equivalente ao item da barra de menus Chaveiro. Não bloqueia a tela; apenas coloca o computador em suspensão.
Radon Rosborough
11
@RadonRosborough Não, ele não coloca o computador no modo de suspensão. Ele coloca a tela no modo de suspensão. Se você acessar o Mac bloqueado remotamente, tudo estará funcionando. Essa pode ser a resposta mais curta e rápida, pois não passa por toda a GUI lenta do Keychain ou a GUI lenta do Finder.
dan
Esta é uma solução muito melhor do que a entrada do menu Keychain antiga e mal colocada placed🏻.
dan
41

Nota: Esta solução é única, pois usa a funcionalidade de status da barra de menus Acesso às Chaves, mas não requer que você ative a Show keychain status in menu baropção, como fazem os métodos AppleScript.

Eu também estava procurando uma solução para isso. Hoje, tive apenas um tempo para brincar e encontrei uma maneira de chamar programaticamente a funcionalidade no plug-in de menu de chaves. Esta solução funciona perfeitamente desde que a Apple não altere as partes relevantes no plug-in do menu de chaves. Você pode criar um pequeno binário para bloquear sua tela colando-o no seu terminal ...

# Do our work in the temporary directory that gets cleaned on boot
cd /tmp

# Create the source file
cat > main.m <<END_OF_FILE

#import <objc/runtime.h>
#import <Foundation/Foundation.h>

int main () {
    NSBundle *bundle = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class principalClass = [bundle principalClass];

    id instance = [[principalClass alloc] init];

    [instance performSelector:@selector(_lockScreenMenuHit:) withObject:nil];

    return 0;
}

END_OF_FILE

# Compile the source file
clang -framework Foundation main.m -o lockscreen

Execute o programa digitando:

./lockscreen
mrArkwright
fonte
Você poderia elaborar como usar isso? Copio e colo isso em um fluxo de trabalho do Automator? Ou fazer um Applescript com isso? Como está agora, é difícil fazer algo com sua resposta.
Saaru Lindestøkke 10/03/14
11
Este é um simples programa Objective-C. Copie-o para um arquivo chamado main.m. Em seguida, execute 'clang -framework Foundation main.m -o lockscreen' para compilar o programa. './lockscreen' executa o programa e bloqueia sua tela.
mrArkwright
Tentei, funciona como descrito. A compilação gera um aviso instance method '-_lockScreenMenuHit:' not found, mas o aplicativo de tela de bloqueio funciona mesmo assim. No entanto, ao clicar duas vezes, ele abre uma janela do Terminal antes de bloquear a tela. Após o desbloqueio, você deve fechar a janela manualmente. Existe uma maneira de fechar essa janela automaticamente?
Saaru Lindestøkke 10/03/2014
6
Eu coletei um OS X App: Lock Screen.app com base nesta resposta e no trabalho de alguém, conforme detalhado no link, ele simplesmente envolve esse código e adiciona um ícone bonito, para que possamos executá-lo diretamente, obrigado.
Mengdi Gao
11
Isso não funciona mais na versão 10.13 porque o MenuExtra foi removido. Em vez disso, funciona: stackoverflow.com/a/26492632/368409
Lloeki 30/17/17
15

Eu uso Alfred →

insira a descrição da imagem aqui

A tecla de atalho universal permite ativá-la usando um teclado.

Vaibhav Bajpai
fonte
Impressionante! A tecla de atalho universal está embutida ou faz parte do powerpack?
Dan Rosenstark
11
É built-in ... #
1145 Vaibhav Bajpai
2
Infelizmente, não é isso - ele também desliga a conexão com a Internet, enquanto o bloqueio do menu Keychain não funciona.
Marcin Bobowski 27/03
Há um equivalente na barra de lançamento também: "Lock Screen"
William Turrell
Isso não é equivalente ao item de menu Chaveiro. Ele não coloca o computador no modo de suspensão e também reproduz uma animação irritante.
Radon Rosborough
15

ATUALIZAÇÃO: 2019.

A tela de bloqueio para chaveiro não está mais disponível na versão atual do MacOS Mojave & High Sierra.

A Apple agora adicionou um item do menu Lock Screen no menu Apple. Isso tem o atalho de teclado padrão de crtl + cmd + Q

insira a descrição da imagem aqui


------------- Resposta antiga para o SO anterior abaixo --------------

A resposta do @Bart Arondson é usada para usar alguns códigos de teclas para navegar no menu Tela de bloqueio de chaveiro.

Todos os códigos de chave podem ser ignorados usando scripts da GUI para realmente atingir diretamente os itens de menu.

O uso de códigos de teclas para navegar nos menus pode ser um erro. E, por mais que eu não goste de scripts de GUI, porque também pode ser atingido e errado, é menos atingido neste caso.

Este código AppleScript: (atualizado em 18/05/2016, originado em Usando o AppleScript para bloquear a tela , confirmou o trabalho em El Capitan)

tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 where description is "Keychain menu extra")
        click
        click menu item "Lock Screen" of menu 1
    end tell
end tell

Pode ser usado em uma ação 'Executar Applescript' do Automator em um fluxo de trabalho de serviço do Automator.

insira a descrição da imagem aqui

Em seguida, você fornece ao serviço um atalho de teclado. Da maneira usual em Atalhos do teclado.

insira a descrição da imagem aqui

O serviço:

insira a descrição da imagem aqui

markhunte
fonte
Isso funcionou muito bem para o que eu precisava, obrigado!
Nictrix #
você também pode executar um comando terminal do automator, então eu usei isso. parecia mais "elegante" :). solução muito boa embora!
Sorin Buturugeanu
3
Eu usei esta solução por um longo tempo, mas desde OSX El Captain que não funciona mais :(.
Marcin Bobowski
Ainda olhando isso. Mas parece que o menu não se reporta para o próximo item a ser clicado. A execução dessas duas linhas funciona, mas é lenta. tell application "System Events" to tell process "SystemUIServer" to click (first menu bar item of menu bar 1 whose description is "Keychain menu extra") tell application "System Events" to click (menu item "Lock Screen" of menu 1 of menu bar item 1 of menu bar 1 of application process "SystemUIServer")
markhunte
8

Defina as preferências para bloquear a tela quando o protetor de tela estiver ativo.

Painel de Preferências de Segurança e Privacidade

Em seguida, você pode usar este comando do terminal para iniciar a proteção de tela.

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

Até onde eu sei, é exatamente isso que o item de menu Chaveiro faz.

Ɱark Ƭ
fonte
Obrigado pelo seu comentário, mas é com isso que luto há muito tempo e estou tentando encontrar uma alternativa.
precisa saber é o seguinte
11
Apenas para maior clareza e integridade, devo dizer que o item acima realmente inicia o protetor de tela, mas não faz o que a função de menu 'Bloqueio de tela' oferece.
precisa saber é o seguinte
11
Então você precisa ser mais específico sobre o que exatamente está procurando.
você precisa saber é o seguinte
Hmmm ... não tenho certeza se posso ser mais específico ou sucinto do que o parágrafo de abertura na minha pergunta original!
user40433
11
Eu tive a chance de testar em 10.6.8. Nesse sistema operacional, o monitor é desligado e a sessão é bloqueada. Eu encontrei uma maneira programática para fazer isso, mas não é construído dentro.
Ɱark Ƭ
3

Acho que a resposta para sua pergunta é "Não, não há uma maneira de fazer isso na linha de comando".

Como este é um item da barra de menus, não é algo que você possa acessar facilmente usando o Keyboard Maestro ou outra ferramenta semelhante.

No entanto, se você não tem aversão a uma solução usando um aplicativo de terceiros, o QuickLock permitirá que você faça isso.

É um aplicativo gratuito (aceito doações) que permite atribuir um atalho de teclado para bloquear a tela. Há também um item da barra de menus no qual você pode clicar para bloquear a tela.

O aplicativo permitirá que você defina uma senha (separada da senha da sua conta).

Não requer o uso de senha com protetor de tela, é tudo completamente separado.

Você pode ver um vídeo em ação em http://www.youtube.com/watch?v=SBHwykPB19o

ps quando a tela estiver bloqueada, digite sua senha para desbloqueá-la. Fiquei confuso porque esperava ver um campo de senha. Não há nenhum. Você acabou de digitar a senha.

pps Eu usei isso apenas por alguns minutos, por isso pode haver outros problemas com os quais não estou ciente, mas parece atender à conta.

TJ Luoma
fonte
Obrigado pela sua contribuição ... embora não seja o que eu propus procurar (eu amo os métodos open source e DIY!), Ele parece muito interessante e parece oferecer a funcionalidade que eu preciso, embora em um aplicativo de terceiros. Vou olhar mais de perto. Obrigado!
precisa saber é o seguinte
Eu adoraria encontrar uma maneira de fazer isso também, mas não acho que exista.
TJ Luoma
parece morto ...
rogerdpack 28/12
3

O Mac não foi projetado para fornecer essa opção. No entanto, este artigo explica uma solução alternativa usando o QuickSilver. Embora eu não entenda por que você não gosta da solução que a Apple fornece nativamente, desejo-lhe sorte em encontrar uma solução.

bispymusic
fonte
3

Uma maneira rápida de dormir sua máquina via linha de comando com a ajuda do AppleScript é

osascript -e 'tell application "Finder" to sleep'

Isso não bloqueia sua tela, a menos que você a configure para exigir uma senha imediatamente, o que eu não gosto de fazer. Estou apenas observando isso para a posteridade.

Bruno Bronosky
fonte
3

Alias ​​fácil. Adicione isso ao seu bashrc

alias afk="osascript -e 'tell application \"System Events\" to keystroke \"q\" using {command down,control down}'"

digite afkseu terminal para executar.

Aritro Paul
fonte
2

Eu usei o código postado acima pelo jnk. Então usei o appify para transformá-lo em um aplicativo do OS X, mathiasbynens.be/notes/shell-script-mac-apps . Em seguida, usei o Quicksilver para atribuir meu próprio atalho de teclado (escolhi cmd + L). O terminal não está abrindo / permanecendo aberto (como alguns estavam preocupados) com a configuração, porque estou lançando um aplicativo OS X.

  1. Siga a resposta acima por jnk, Lock Screen Command One-Liner
  2. Use o appify para transformá-lo em um aplicativo OS X seguindo o link acima no meu resumo.
  3. Instale o Quicksilver.
  4. Use o Quicksilver para atribuir um atalho de teclado para iniciar o novo aplicativo. Está em 'Triggers'. Gosto do Quicksilver porque adoro atalhos de teclado / teclas de atalho para iniciar aplicativos e sites no OS X.
jbrock
fonte
1

Eu também tive esse problema. /System/Library/CoreServices/Menu\ Extras/user.menu/Contents/Resources/CGSession -suspendfaz com que o sistema suspenda todas as tarefas, em vez de bloquear a tela.

JordanBtucker estava no caminho certo, aqui está a função completa que eu uso:

lockscr() {
  if [ "$(defaults read com.apple.screensaver askForPasswordDelay 2>/dev/null)" ]; then
    local Olddelay="$(defaults read com.apple.screensaver askForPasswordDelay)"
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults write com.apple.screensaver askForPasswordDelay -int "${Olddelay}"
  else
    defaults write com.apple.screensaver askForPasswordDelay -int 0 && \
        pmset displaysleepnow
    defaults delete com.apple.screensaver askForPasswordDelay
  fi;
}

Isso preserva as configurações do usuário, mas bloqueia a tela com segurança :)

jorvi
fonte
Em High Sierra, esses valores não são mais definidos pela interface do usuário. No entanto, se você os definir manualmente, a interface do usuário os honrará. defaults write com.apple.screensaver askForPassword -bool TRUEe defaults write com.apple.screensaver askForPasswordDelay -int 10 esses são meus valores padrão. Agora, o script acima se comportará como descrito.
Sean Perry
0

Eu uso o BetterTouchTool para esse fim e atribui um atalho de teclado a "Alternar para a tela de login" (que é a tela de bloqueio): não atende aos requisitos da linha de comando, mas pode ser útil para você de qualquer maneira.

atalho de teclado no BetterTouchTool para bloquear a tela

iolsmit
fonte
Obrigado pela sua ajuda e sugestão. Junto com o QuickLock mencionado acima pelo @TJLuoma, o BetterTouchTool (embora não seja o método que eu me propus a encontrar) parece estar muito próximo dos meus objetivos funcionais. Vou olhar mais de perto isso ... obrigado.
precisa saber é o seguinte
0

Não tenho muita certeza de entender seu problema aqui. Se você precisar de uma senha no protetor de tela, ela não interromperá a execução dos processos nem o impedirá de acessar remotamente o seu Mac. Eu tenho essa opção definida (usando o ControlPlane para ativá-lo no trabalho e desativá-lo em casa) e nunca tive o sistema se recusado a responder a uma conexão de Área de Trabalho Remota, VNC ou SSH. Em todos os casos em que o acesso à GUI é necessário, basta inserir a senha; O SSH usa o par de chaves, portanto, nenhuma senha é solicitada. Se você não deseja que os aplicativos durmam, verifique se as configurações de energia do sistema são tais que não entrem no modo de suspensão do sistema antes de retornar. Basta definir o tempo limite do sono para um longo atraso. Se você simplesmente não quiser se incomodar em digitar uma senha quando estiver sentado na frente do computador e trabalhando,

Eu uso ctrl-shift-eject para bloquear a tela. É rápido, simples e funciona. Essa é a maneira integrada de bloquear a tela. É provável que ninguém encontre uma alternativa simplesmente porque replicar as funções já inseridas no sistema operacional é um pouco redundante para alguém dedicar muito tempo à sua execução.

Até onde eu sei, não há opção de "tela de bloqueio" no Keychain na versão 10.8, então sua solução preferida não existirá se você atualizar. Edit: Não percebeu isso nas preferências do Keychain; sim, ainda está lá em 10.8.

Se você estiver usando o Automator para isso, não pode simplesmente empacotar o script como um aplicativo e atribuir uma combinação de teclas de atalho ou deixá-lo no Dock para acesso rápido?

dr.nixon
fonte
O ctrl-shift-eject realmente entra no modo "troca rápida de usuário". Pelo menos uma solução VPN (a que eu preciso usar para fins profissionais) não gosta disso e desconecta a VPN quando faço isso, encerrando as sessões subjacentes às quais eu possa estar conectado. Embora eu possa simplesmente reconectar-me à minha sessão VPN quando desbloquear o computador, pode ser uma experiência de mais de um minuto e, portanto, falha na opção "rápida". Portanto, esta não é, na IMO, uma solução precisa para a questão.
Jon V
0

Assim como o autor da pergunta, eu estava procurando uma maneira de usar a Tela de bloqueio de chaveiro de maneira rápida.

Combinando o conhecimento de uma dica antiga do Mac OS X e alguns scripts da Apple, vim com o seguinte:

Primeiro, siga as etapas da dica vinculada do Mac OS X para adicionar um atalho de teclado para a funcionalidade Keychains Lock Screen.

Para mim (na versão 10.8.4), isso não resolveu o problema, pois tive que pressionar ctrl+ F8para mudar o foco para a barra de status, pressionar downpara abrir a barra de menus Chaveiro e pressionar ctrl+ F9para bloquear a tela. Automatizei esse processo com o seguinte Applescript:

# Press ^F8
tell application "System Events"
    key code 100 using control down
end tell

# Press "down"
tell application "System Events"
    key code 125
end tell

# Press ^F9
tell application "System Events"
    key code 101 using control down
end tell

Abra o Automator, crie um novo Serviço, adicione um Run Applescriptmódulo, copie e cole o código acima e salve o Serviço do Automator com o nome desejado. Agora vá para Atalhos de teclado nas Preferências do sistema e adicione um atalho de teclado para o recém-criado Serviço Automator. Defino o meu como ctrl+ cmd+ L.

Agora pressione o atalho do teclado em qualquer aplicativo e sua tela será bloqueada instantaneamente.

Para aqueles que se perguntam por que não usar apenas outros métodos, aqui está minha opinião:

  • Troca rápida de usuário / tela de bloqueio
    Com esse método, sou desconectado da minha rede WPA2 corporativa. Isso não é bom, já que a reconexão às vezes leva anos.

  • Protetor de tela + senha
    Duplica a funcionalidade, mas isso significa que, se meu laptop estiver inativo por algum tempo enquanto eu estiver lendo um jornal ao lado, a tela será bloqueada quando eu quiser usá-lo novamente. Isso é indesejável. O acoplamento desse método a um hot-corner tem o efeito colateral de que usuários inexperientes do Mac possam acioná-lo por acidente, levando ao bloqueio da tela. Às vezes, também atingia um canto quente por acidente, o que atrasava consideravelmente o meu fluxo de trabalho.

  • Aplicativos de terceiros
    Tudo bem, mas por que executar um aplicativo de terceiros se ele estiver disponível nativamente no sistema operacional?

Saaru Lindestøkke
fonte
0

No 10.14.6 Mojave, inicio o mecanismo de proteção de tela usando este comando:

/System/Library/CoreServices/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

Akash Agarwal
fonte
Mas não travou. Apertei uma tecla e ela se abriu. Se importa se você ler os comentários de outras respostas sobre "exigir senha imediatamente após .." nas preferências do sistema e atualizar a sua de acordo?
ankii 27/09
-1

Eu uso a configuração de senha do Screensaver com um pressionamento de tecla (Ctrl + Shift + Eject) na 10.6.8 e, pelo que posso ver, faz o mesmo que o item Lock Screen do ícone da barra de tarefas Keychain Access.

Eu sei que isso é semelhante a algumas das outras respostas, mas em vez do "canto quente", ele usa um pressionamento de tecla, o que é mais conveniente para mim.

Esta solução é descrita em mais detalhes aqui, é de onde eu a obtive: http://osxdaily.com/2011/01/17/lock-screen-mac/

Já o usam há vários anos sem problemas.

nwinkler
fonte
11
Obrigado, mas infelizmente isso exige que a opção "exigir proteção de tela ao retornar do modo de suspensão ou proteção de tela" esteja marcada e, como mencionado anteriormente, isso não é algo que eu gostaria de ter envolvido.
precisa saber é o seguinte
-1

Bem, basta combinar duas das respostas acima. Execute este comando:

open -a /System/Library/Frameworks/ScreenSaver.framework//Versions/A/Resources/ScreenSaverEngine.app

Depois de definir as preferências de Segurança e Privacidade, solicite uma senha imediatamente. Crie um alias para o seu shell se você quiser facilitar a execução do comando.

Kirk McElhearn
fonte
3
Sim, mas, como mencionado acima, não desejo que as preferências de Segurança e privacidade exijam sempre uma senha imediatamente. É por isso que a funcionalidade de comando Bloquear tela (especificamente) é tão interessante - fornece o nível de segurança que eu exijo em uma base completamente ad hoc.
user40433
-1

FWIW, eu entendo sua situação e tenho procurado uma boa solução para isso. Passei por esse segmento porque estava procurando por um método um pouco mais rápido do que o que acabei inventando. Eu criei algo que, embora não seja exatamente o que eu esperava, funciona e é um compromisso aceitável. Estou usando o mesmo tipo de comandos de script da GUI que o @markhunte mostra (estrutura ligeiramente diferente, mas a mesma ideia), mas em vez de apenas colocar tudo em um fluxo de trabalho de serviço do Automator, eu o separei em um pacote .app criado com o Platypus. Fiz isso porque em minhas viagens e testes descobri que os serviços do Automator são executados muito lentamente sob certas condições. Se o seu Mac estiver sofrendo algum tipo de estresse, ou seja, uma verificação de disco em execução, o software A / V fazendo alguma coisa, o recebimento de e-mail pelo correio etc. o sistema operacional parece empurrar os serviços para o final da linha. Isso pode levar alguns segundos antes da execução do fluxo de trabalho (algumas vezes) e, ocasionalmente, alguns segundos antes da execução dos comandos da GUI no serviço. Muito chato se você está tentando "rapidamente" bloquear a tela e leva 10 segundos para fazer isso!

Ter um "aplicativo" independente também tem a vantagem de poder usar literalmente dezenas de aplicativos de terceiros diferentes para executá-lo, ou apenas usar o Spotlight ou um serviço Automator para iniciar o aplicativo. Qualquer um deles funciona. O mais rápido que encontrei é um antigo utilitário chamado Spark, que milagrosamente ainda funciona até na 10.8.4. Não me pergunte como desde a última vez que foi desenvolvido, o inimigo 10.4! Spark pode ser encontrado aqui - Spark

Além de tudo isso, lutei contra a questão dos comandos da GUI, às vezes executando lentamente, agrupando o cocoaDialog e chamando-o primeiro quando o aplicativo é executado para mostrar uma pequena bolha flutuante no meio da tela, indicando que uma tela de bloqueio está acontecendo. Normalmente, o bloqueio acontece logo depois, mas se houver um atraso, isso ao menos dará algum "feedback" visual de que você pressionou as teclas certas. Eu também fiz o auto-reparo - se "Habilitar acesso a dispositivos de assistência" não estiver ativado, ele alerta você com uma caixa de diálogo e permite que você a habilite imediatamente. Ele também garantirá que o Menu de acesso ao chaveiro seja exibido na barra de menus, pois isso é um requisito ou a falha na execução dos scripts da GUI.

Mike M
fonte
-2

Ctrl- Shift- ⏏ Eject(em Macs mais antigos),
Ctrl- Shift- ⌽ Power(em Macs mais recentes)

De nada.
fonte