OS X: como impedir que o computador durma durante uma sessão ssh

29

Quando ssh em um computador OS X na minha rede, a sessão dura até que o OS X entre no modo de suspensão .

Existe uma maneira de impedir que isso aconteça durante a minha sessão SSH , além de bater fisicamente no mouse ou digitar teclas ou desativar manualmente a função de suspensão?

EDIT: A sessão ssh normalmente seria uma montagem simples do sshfs.

Stefan
fonte
Você também não gostaria de impedir que ele durma antes da sua sessão SSH?
SamB

Respostas:

9

Esta não é uma solução pronta para uso, mas possivelmente funcionará se ninguém encontrar uma solução :-)

Você pode manipular as configurações de gerenciamento de energia com o comando pmset. Veja a página de manual para mais informações.

A configuração interessante que queremos manipular é o sono :

sleep - temporizador de suspensão do sistema (valor em minutos ou 0 para desativar)

Portanto, podemos usar os seguintes comandos:

sudo pmset sleep 25      # go to sleep after 25 minutes
sudo pmset sleep 0       # disable sleep

Agora temos que acionar esses comandos após um login e logut. Se bem me lembro, o Bash é o shell padrão do Mac OS X que nos leva a esses dois arquivos:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bash_logout
          The individual login shell cleanup file, executed when a login shell exits

Edite ou crie-os no diretório inicial e adicione os comandos apropriados. Se desejar, salve o valor atual de suspensão em um arquivo temporário e restaure-o depois.

O último problema a resolver é o prompt de senha do sudo. Para dar ao usuário a permissão de chamar o pmset sem nenhuma senha, edite seus / etc / sudoers com sudoedit. Você precisa usar a NOPASSWDtag. Se isso é novo para você, consulte o manual do sudoers .

echox
fonte
1
este método funcionaria se a conexão ssh fosse apenas uma montagem sshfs?
Stefan
1
Não tenho certeza, mas acho que o sshfs não abrirá um shell de logon, portanto isso não funcionará com o sshfs.
echox 8/09/10
9

Isso me permitiu usar meu mac sobre SSH, não importa o quê, desde que o mac esteja conectado a uma fonte de energia.

Preferências do sistema, Economia de energia, Impedir que o computador durma automaticamente quando a tela estiver desligada

Tudo é desligado quando o Mac desliga sua fonte de energia, para que você não precise se preocupar com a duração da bateria.

Benoit Duffez
fonte
1
Esta opção é inútil no macOS Sierra. Meu iMac dorme independentemente dessa configuração, ativa o acesso SSH e dorme imediatamente após o logon do SSH. É realmente irritante.
11267 Bruno Philipe
Esta resposta finalmente resolveu meu problema depois de mexer no ~ / .ssh / config por horas no iMac do Mojave
n1000 04/04
6

O utilitário pmset embutido no OS X possui uma configuração que pode fazer o que você deseja. Verifique a página de pmsetmanual para a ttyskeepawakeconfiguração e a explicação que o acompanha.

O comando a seguir provavelmente fará o que você deseja:

sudo pmset -c ttyskeepawake 1

O -csinalizador ativa essa configuração especificamente quando o computador está funcionando com energia CA (ao contrário da bateria ou da UPS) e ttyskeepawake 1impede que o computador durma durante uma sessão tty ativa (presumivelmente remota). Ele vai permitir que o sono se a sessão esteve inactiva durante mais tempo do que o temporizador de sono, mas se isso é um problema, talvez o computador não deve ser definido para dormir.

robô
fonte
6

Para usar o SSH para abrir um shell em uma máquina OSX remota e impedir que ele durma durante a sessão SSH:

$ ssh -t me@mymacbook caffeinate -i bash
starfry
fonte
5

Desde o Mac OS X 10.8, você deve poder usar o caffeinate(8)comando.

Tente caffeinate -s ssh server.example.com.

200_success
fonte
9
O OP está tentando impedir o Mac remoto (ou seja, o servidor ssh) de dormir. A menos que eu esteja enganado, seu exemplo impedirá apenas o sono no terminal do cliente.
Owen
3

Eu adicionei o seguinte script em .bash_profile

if expr "$(ps -o comm= $PPID)" : '^sshd:' > /dev/null; then
  caffeinate -s $SHELL --login
  exit $?
fi

Se o processo for filho direto de um daemon ssh, execute um mesmo shell através do comando caffeinate (8) para impedir que o sistema durma durante a sessão ssh.

Kubo Takehiro
fonte
2

Uma pesquisa na web para impedir o sono do mac traz muitas informações boas sobre utilitários e truques que você pode usar.

No entanto, na sua situação, suspeito que o que você realmente deseja fazer é ter uma sessão ssh separada que execute um programa de linha de comando muito simples que impede o Mac de dormir. A Apple fornece o código-fonte completo na seção Perguntas e respostas técnicas 1160: Prevenção do sono . (Infelizmente, esta página está quebrada no site da Apple atualmente, mas você pode obter uma cópia do cache do Google.)

Não testei para ver se este programa pode ser executado com êxito em uma sessão ssh, mas parece que poderia.

Observe que as implementações do sshfs geralmente não ficam conectadas ao sistema remoto o tempo todo e apenas executam uma sessão quando desejam um arquivo ou diretório. Portanto, você precisa de uma sessão ssh separada, executando em uma janela de terminal minimizada, para executar o programa insônia.

A vantagem dessa abordagem é que você não precisa usar o sudo ou mexer nas configurações de gerenciamento de energia do sistema.

Neil Mayhew
fonte