Não saber a senha torna as coisas complicadas, mas talvez a solução seja: é possível apagar temporariamente a senha de um usuário? (E depois reconfigurá-la para o que era antes.)
Como um começo:
Primeiro, obtenha a janela de login para exibir. Basta desconectar o usuário atual, usar a troca rápida de usuário ou usar o SSH:
cd "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/" sudo ./CGSession -suspend
Ou, para mudar imediatamente para um usuário específico, o que provavelmente mostrará a janela de login (isso de repente não funciona mais no meu 10.5 Leopard):
sudo ./CGSession -switchToUserID 501
O que é mostrado agora depende um pouco das Preferências do Sistema, mas vamos supor que sejam os ícones dos usuários e seus nomes. Para ativar um nome, teríamos que digitar as primeiras letras. Então, depois de Return, o prompt de senha é exibido. Alternativamente, pode-se selecionar qualquer nome (como pressionando a seta para baixo) e pressione Option-Return para ser solicitado para
Portanto, para selecionar o primeiro nome de usuário (aleatório) e pressione Option-Return, digite um nome de usuário específico, pressione Return e digite a senha:
sudo osascript -e 'tell app "System Events" key code 125 keystroke return using option down keystroke "the username" delay 1.0 keystroke return delay 1.0 keystroke "the password" delay 1.0 keystroke return end tell'
O texto acima mostra um erro que, até onde eu sei, não limita o uso:
osascript[285] : 3891612: (connectAndCheck) Untrusted apps are not allowed to connect to or launch Window Server before login. _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
Como alternativa, use o script específico do idioma de " Script da janela de Login pelo Apple Remote Desktop " ( talvez um dia os comentários nesse site mostrem uma solução melhor):
tell process "SecurityAgent" set value of text field 1 of group 1 of window 1 to "the username" set value of text field 2 of group 1 of window 1 to "the password" end tell click button "Log In" of window 1 of application process "SecurityAgent"
Mas o problema principal é: isso ainda precisa da senha . No entanto: obviamente, nenhuma senha é necessária quando um usuário tem uma senha em branco. Na verdade, para senhas em branco basta clicar no ícone de um usuário para que seja necessário. Então, se o envio de pressionamentos de tecla usando o AppleScript é aceitável, então talvez "tudo" que resta para descobrir:
-
É possível apagar temporariamente a senha de um usuário para permitir iniciar (ou retomar) a sessão sem saber a senha ...?
-
Pode-se tornar o AppleScript à prova de erros? Como:
- Como dizer se a janela de login está visível? (talvez
stat -f%Su /dev/console
possa ajudar, como isso produzroot
enquanto a janela de login é exibida) - Como identificar qual janela de login é exibida? (Como: um mostrando ícones e nomes de login, ou uma lista suspensa, ou talvez apenas um prompt de senha, se alguém selecionou para mudar para um usuário específico?)
- Livre-se dos atrasos.
- E essa mensagem de erro?
- Como dizer se a janela de login está visível? (talvez
(Nota para testar: ao usar o Compartilhamento de tela, parece que definir a preferência Ao controlar computadores: Criptografar somente senhas e pressionamentos de teclas também mantém a conexão quando a janela de login é mostrada ou após um usuário Ao usar o Criptografar todos os dados da rede , meu Mac precisa restabelecer a conexão de compartilhamento de tela cada vez que um login for exibido ou um usuário for alternado.