Сценарий достаточно распространенный и нужный. У меня например дома на raspberry pi поднят homebridge который управляет моими немногочисленными умными девайсами, в число которых входит и Windows ПК. И понятно, что идея включения и выключения компьютера с телефона через Homekit очевидна.
Для включения нам понадобится команда etherwake, которая посылает на удаленный хост Wake-On-LAN «Magic Packet» и для выключения, или перезагрузки, net rpc shutdown
В Ubuntu Linux вы можете установить эти программы путем установки следующих пакетов:
1 2 |
sudo apt-get install etherwake sudo apt-get install samba-common |
В Alpine Linux (очень популярный дистрибутив для контейнеров docker):
1 2 |
apk add --no-cache ether-wake apk add --no-cache samba samba-common-tools |
После чего, все сводится к двум простым командам:
1. Включить это etherwake xx:yy:zz:11:22:33 (где xx:yy:zz:11:22:33 — MAС-адрес целевой машины)
2. Выключить net rpc shutdown -f -t0 -S ip.address -U user%password
Помимо это конечно правильным образом должен быть настроен ваш Windows ПК, а именно: в BIOS’e должен быть активен WOL (Wake-On-LAN), а в операционной системе Windows должен быть открыт 445-й порт
Открыть его можно в powershell:
1 |
New-NetFirewallRule -DisplayName 'TCP Port 445' -Profile 'Private' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 445 |
Примечание: Обратите внимание на аргумент Profile, надо правильно указать тип сети в которой вы работаете.
Либо в классической командной строке:
1 |
netsh advfirewall firewall add rule name="TCP Port 445" dir=in action=allow protocol=TCP localport=445 |
Также при попытке выключения вы можете столкнуться дополнительно со следующими ошибками:
Проблема 1: Could not initialise pipe winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND
Для исправления включите службу удаленного реестра:
1 2 |
sc config RemoteRegistry start=auto sc start RemoteRegistry |
Проблема 2: WERR_CALL_NOT_IMPLEMENTED
В реестре по пути HKLM/Software/Microsoft/Windows/CurrentVersion/Policies/System
создайте ключ типа DWORD LocalAccountTokenFilterPolicy со значением 1
После этого вы с легкостью сможете включать и выключать свой Windows ПК через Linux через различные сценарии, которые вам понадобится реализовать на работе или дома.