Desativar requisito de senha do protetor de tela na linha de comando

11

Estou tentando ativar e desativar o requisito de senha do protetor de tela na linha de comando.

defaults read com.apple.screensaver

mostra uma variável askForPassword definida como 0 ou 1, dependendo se eu configurei um requisito de senha nas Preferências do Sistema ou não.

defaults write com.apple.screensaver askForPassword 1

e

defaults write com.apple.screensaver askForPassword 0

ativar e desativar a configuração de senha, ou assim eu pensei.

O que eu acho é que os comandos realmente marcam e desmarcam a caixa de seleção em Preferências do Sistema em Segurança, mas não afetam o protetor de tela.

Se eu habilitar a senha nas Preferências do Sistema e desabilitá-la usando o segundo comando de gravação de padrões, a caixa de seleção nas Preferências do Sistema estará desmarcada, mas o protetor de tela ainda solicitará uma senha. Somente marcar e desmarcar a caixa de seleção nas Preferências do Sistema pode alterar esse comportamento agora.

E se eu desativar a senha nas Preferências do Sistema e ativá-la usando o primeiro comando de gravação de padrões, a caixa de seleção em Preferências do Sistema está marcada, mas a proteção de tela não solicitará uma senha. Somente desmarcar e marcar a caixa de seleção em Preferências do Sistema altera o comportamento posteriormente.

O que está acontecendo?

Eu posso imaginar que essa é uma configuração global e devo modificar em /Library/Preferences/com.apple.screensavervez do domínio do usuário. Mas, nesse caso, por que há um efeito na caixa de seleção Preferências do sistema?

Andrew J. Brehm
fonte
Isso é um pouco desconcertante. Eu assisti a leitura / gravação de arquivos enquanto alternava a configuração 'pedir senha'. O único arquivo que vejo sendo modificado é com.apple.screensaver. Suponho que uma mensagem seja enviada para algum serviço quando esse botão for alternado na GUI, além de ser gravado no arquivo plist. Eu apostaria que a reinicialização do sistema ou o logoff / in pode fazer com que o arquivo seja relido pelo referido serviço, fazendo a alteração desejada.
macaco 16/05
1
Eu tinha razão! O logout e o logon novamente após alterar o arquivo plist fazem com que a alteração nas configurações seja refletida. Portanto, parece que você precisa descobrir qual serviço está controlando o comportamento 'pedir senha' e redefini-lo / recarregá-lo depois de modificar o plist.
macaco 16/05
Parece que a Apple está minando seu próprio mecanismo de plist.
Andrew J. Brehm
Ta. Espero que alguém saiba disso e responda aqui.
Andrew J. Brehm
1
É o processo 'loginwindow' que parece acessar esse arquivo depois que ele foi gravado pelas Preferências do Sistema. O que faz sentido. Infelizmente, interromper o processo da janela de login fará o logout forçado. Continue cavando!
macaco 16/05

Respostas:

7

Se você não for forçado a usar a gravação padrão, poderá usar o seguinte comando. Ele interage com o sistema operacional da mesma forma como se você utilizasse as Preferências do Sistema.

TESTADO EM:

  • 10.5.x
  • 10.6.x
  • 10.7.x
  • 10.8.x
  • 10.9.x

sudo osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

NOTA: Se o comando estiver sendo executado dentro de um script que recebeu privilégios de root, você não precisaria do sudo .

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
E1Suave
fonte
Agradável! Linha de comando AppleScript geralmente é uma boa solução para esse tipo de problema.
Daniel
@DanielLawson Obrigado, você está trabalhando no 10.7? Geralmente, gosto de postar em quais sistemas operacionais testei meus comandos e, infelizmente, nesta manhã, estou preso a uma máquina antiga do Snow Leopard e não terei acesso a uma máquina 10.7 até hoje mais tarde. Eu odiaria que ele funcionasse no 10.6.xe falhe no 10.7 :–( No entanto, estou bastante certo de que isso funcionará, pois as listas são muito semelhantes. Eu sei que o screensaver.plist do 10.5 é diferente e são necessários alguns ajustes De qualquer forma, obrigado novamente
.:
1
Eu testei isso na 10.7.5 no OS X Server e ele não funciona. O protetor de tela ainda requer uma senha e a preferência não está desmarcada.
1
Isso funciona para mim em 10.11 (El Capitan). Encontrei-o a partir desta discussão ( github.com/dustinrue/ControlPlane/issues/421 )
GTF
1
O método "osascript" não funciona no meu High Sierra Mac. O arquivo ~ / Library / Preferences / com.apple.screensaver.plist não parece ser afetado pela opção GUI no meu High Sierra Mac.
Kent
3

Corri para um problema semelhante e encontrei uma solução do usuário Guillaume nesta postagem do fórum . Basicamente, você precisa forçar o protetor de tela a reler a preferência de requisito de senha, o que você pode fazer com um programa C:

#include <CoreFoundation/CoreFoundation.h>

int main(int argc, char ** argv)
{
    CFMessagePortRef port = CFMessagePortCreateRemote(NULL, CFSTR("com.apple.loginwindow.notify"));
    CFMessagePortSendRequest(port, 500, 0, 0, 0, 0, 0);
    CFRelease(port);
    return 0;
}

E compile isso com:

cc -o /tmp/anywhereyouwantit/notif notif.c -framework CoreFoundation

Em seguida, ligue para este programa imediatamente após sua ligação para defaults write

Chris C
fonte
Atualização: no High Sierra (10.13.6) isso compila, mas relata este erro: "ld: warning: arquivo stub baseado em texto /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd e arquivo de biblioteca / System / Library /Frameworks//CoreFoundation.framework/CoreFoundation está fora de sincronia. Voltando ao arquivo da biblioteca para vinculação. " Falha com uma falha de segmentação quando executado.
TJ Luoma