OS X: jak uchronić komputer przed uśpieniem podczas sesji ssh

29

Kiedy ssh do komputera OS X w mojej sieci, sesja trwa, dopóki OS X nie przejdzie w tryb uśpienia .

Czy istnieje sposób, aby temu zapobiec podczas sesji SSH , oprócz fizycznego uderzenia myszy lub pisania na klawiaturze lub ręcznego wyłączenia funkcji uśpienia?

EDYCJA: Sesja normalnie byłaby zwykłym montowaniem sshfs.

Stefan
źródło
Czy nie chciałbyś również zapobiec zasypianiu przed sesją SSH?
SamB,

Odpowiedzi:

9

To nie jest gotowe rozwiązanie, ale prawdopodobnie zadziała, jeśli nikt inny nie wymyśli rozwiązania :-)

Możesz manipulować ustawieniami zarządzania energią za pomocą polecenia pmset. Więcej informacji na ten temat znajduje się na stronie podręcznika .

Interesującym ustawieniem, którym chcemy manipulować, jest sen :

sleep - systemowy wyłącznik czasowy (wartość w minutach lub 0, aby wyłączyć)

Możemy więc użyć następujących poleceń:

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

Teraz musimy uruchomić te polecenia po zalogowaniu i zalogowaniu. Jeśli dobrze pamiętam, Bash jest domyślną powłoką dla systemu Mac OS X, która przenosi nas do tych dwóch plików:

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

Edytuj lub utwórz je w katalogu domowym i dodaj odpowiednie polecenia. Jeśli chcesz, zapisz bieżącą wartość uśpienia w pliku tymczasowym i przywróć ją później.

Ostatnim problemem do rozwiązania jest monit o hasło sudo. Aby dać użytkownikowi uprawnienia do wywoływania pmset bez hasła, edytuj plik / etc / sudoers za pomocą sudoedit. Musisz użyć NOPASSWDtagu. Jeśli jest to dla Ciebie nowe, zapoznaj się z instrukcją sudoers .

echox
źródło
1
czy ta metoda działałaby, gdyby połączenie ssh było tylko montowaniem sshfs?
Stefan
1
Nie jestem pewien, ale nie sądzę, aby sshfs otworzył powłokę logowania, więc to nie będzie działać z sshfs.
echox
9

To pozwoliło mi używać mojego Maca przez SSH bez względu na wszystko, o ile Mac jest podłączony do źródła zasilania.

Preferencje systemowe, Oszczędzanie energii, Zapobiegaj automatycznemu uśpieniu komputera, gdy wyświetlacz jest wyłączony

Wszystko wyłącza się, gdy Mac odłącza się od źródła zasilania, więc nie musisz się martwić o żywotność baterii.

Benoit Duffez
źródło
1
Ta opcja jest bezużyteczna w systemie macOS Sierra. Mój iMac śpi niezależnie od tego ustawienia, budzi się przy dostępie SSH, a następnie śpi natychmiast po wylogowaniu z SSH. To jest naprawdę denerwujące.
Bruno Philipe,
Ta odpowiedź w końcu rozwiązała mój problem po wielu godzinach
spędzania
6

Wbudowane w OS X narzędzie pmset ma ustawienie, które może robić, co chcesz. Sprawdź na stronie pmsetpodręcznika ttyskeepawakeustawienia i towarzyszące im wyjaśnienia.

Następujące polecenie prawdopodobnie zrobi to, co chcesz:

sudo pmset -c ttyskeepawake 1

-cFlag czyni to ustawienie aktywnej szczególnie wtedy, gdy komputer jest zasilany z sieci elektrycznej (w przeciwieństwie do baterii lub zasilania UPS) oraz ttyskeepawake 1zapobiega jego spanie podczas aktywnej sesji tty (przypuszczalnie zdalnego jeden). Umożliwi to uśpienie, jeśli sesja była nieaktywna dłużej niż timer uśpienia, ale jeśli to jest problem, być może komputer w ogóle nie powinien być ustawiony na sen.

robo
źródło
6

Aby użyć SSH, aby otworzyć powłokę na zdalnym komputerze OSX i zapobiec jego uśpieniu na czas sesji SSH:

$ ssh -t me@mymacbook caffeinate -i bash
rozgwiazdy
źródło
5

Od wersji Mac OS X 10.8 polecenie powinno być możliwe caffeinate(8).

Spróbować caffeinate -s ssh server.example.com.

200_sukces
źródło
9
OP próbuje powstrzymać zdalny komputer Mac (tj. Serwer ssh) przed uśpieniem. O ile się nie mylę, twój przykład zapobiegnie tylko przespaniu się na terminalu klienta.
Owen,
3

Dodałem następujący skrypt w .bash_profile

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

Jeśli proces jest bezpośrednim potomkiem demona ssh, uruchom tę samą powłokę za pomocą komendy caffeinate (8), aby zapobiec uśpieniu systemu podczas sesji ssh.

Kubo Takehiro
źródło
2

Wyszukiwarka Mac zapobiegająca zasypianiu zawiera wiele dobrych informacji na temat narzędzi i sztuczek, których możesz użyć.

Jednak w twojej sytuacji podejrzewam, że tak naprawdę chcesz zrobić oddzielną sesję ssh, która uruchamia bardzo prosty program wiersza poleceń, który zapobiega uśpieniu komputera Mac. Apple podaje pełny kod źródłowy w dziale pytań technicznych 1160: Zapobieganie zasypianiu . (Niestety ta strona jest obecnie uszkodzona w witrynie Apple, ale możesz pobrać kopię z pamięci podręcznej Google).

Nie testowałem, aby sprawdzić, czy ten program można pomyślnie uruchomić z sesji ssh, ale wygląda na to, że mógłby.

Zauważ, że implementacje sshfs zwykle nie pozostają cały czas zalogowane w systemie zdalnym i po prostu uruchamiają sesję, kiedy chcą pliku lub katalogu. Potrzebujesz więc osobnej sesji ssh, działającej w zminimalizowanym oknie terminala, aby uruchomić program bezsenności.

Zaletą tego podejścia jest to, że nie trzeba używać sudo ani bałaganu w ustawieniach zarządzania energią systemu.

Neil Mayhew
źródło