Windows 7 выходит из спящего режима при открытии удаленного рабочего стола

24

Можно ли каким-то образом автоматически отключить компьютер с Windows 7 при попытке подключиться к нему с помощью удаленного рабочего стола?

Опция энергосбережения машины, к которой я хочу подключиться (обеспечивается групповой политикой, я полагаю), состоит в том, чтобы спать через 30 минут, что означает, что я должен либо физически пройтись, чтобы нажать клавишу, либо запустить отдельный Wake-on- LAN инструмент, чтобы вывести его из спящего режима.

Было бы неплохо, если бы клиент Remote Desktop Connection автоматически отправлял пакет Wake-on-LAN - возможно ли это?

Джон Сибли
источник
2
Разве у новых материнских плат нет этой функции?
Dalin Seivewright
@DalinSeivewright Да, они делают - моя новейшая машина разработки делает это автоматически сейчас :)
John Sbly

Ответы:

13

Вам нужно будет отправить волшебный пакет (для пробуждения по локальной сети) через маршрутизатор. Трудно , потому что маршрутизатора не вперед это по умолчанию, но есть обходные пути , как найти здесь :

Чтобы разбудить компьютер из Интернета, вам необходимо широкополосное соединение с маршрутизатором, подключенным к модему, которое поддерживает ваше соединение (вам нужен маршрутизатор, даже если у вас статический IP-адрес).

Пробуждение компьютера от удаленного компьютера осуществляется путем отправки волшебного пакета через Интернет с использованием вашего IP-адреса в Интернете и MAC-номера компьютера, который вы собираетесь активировать.

Если вы не знаете свой IP-адрес:

Ссылка на: Как найти интернет-адрес моего компьютера / сервера из удаленного местоположения.

Вы должны подготовить систему для Wake Up через Интернет.

Откройте порт с точки зрения маршрутизатора и программного брандмауэра (используйте большой номер порта, чтобы он не конфликтовал ни с каким другим портом, хороший пример - 5850).

Назначьте порт внутреннему IP-адресу компьютера, который вы хотите использовать в WOL (вы можете использовать порт только для одного компьютера).

Получите эту утилиту, которая позволит вам определить порт для WOL.

Ссылка на: Wake on LAN для графического интерфейса пользователя Windows (WOL GUI)

Возьмите с собой копию графического интерфейса WOL и запишите номер MAC. В удаленном местоположении запустите WOL GUI и введите свой MAC-номер, введите Интернет-адрес (Интернет-IP), введите номер порта, который вы оставили открытым. Нажмите «Разбуди меня», и это должно сработать.

Утилита:

альтернативный текст

Утилита GUI Magic Package является бесплатной.


Вы также можете использовать горячую клавишу, чтобы активировать ее вместе с версией командной строки Wake On LAN :

Синтаксис:

C:\path\to\wolcmd.exe [Mac address] [IP address] [Subnet mask] [port number]

Делать вещи проще:

  • Скачать AutoHotkey
  • Используйте этот скрипт:
! w :: Run, C: \ wolcmd.exe 009027a324fe 195.188.159.20 255.255.255.0 8900
  • Alt+ wразбудит удаленный компьютер

измените сценарий соответствующим образом, чтобы пути к wolcmd.exeисполняемому файлу и MAC, IP и подсеть были правильными.

Джон Т
источник
Привет Джон - да, это инструмент, который мне сейчас нужно использовать, если я хочу вывести этот компьютер из спящего режима. Мне было интересно, возможно ли для удаленного рабочего стола сделать это автоматически?
Джон Сибли
1
Собственно, я не знаю, как сделать это автоматически, и если я использую AutoHotkey, чтобы разбудить его автоматически при открытии удаленного рабочего стола, открытие RDC по другой причине все равно разбудит ваш домашний компьютер, который вам не нужен, поэтому я отредактировал свой ответ чтобы узнать, как установить горячую клавишу, чтобы разбудить ваш удаленный компьютер.
Джон Т
1
Ответ Джона Т блестящий. Все, что я могу добавить, это то, что я создал ярлык на рабочем столе с помощью: wol -i 192.168.1.61 -p 00: 24: 8C: 1F: 90: 23 wol 00: 24: 8C: 1F: 90: 23 (Can ' не помню, почему я добавил две подобные команды) Затем я назначаю сочетание клавиш, например, Ctrl + shift + j. Отлично подходит для настольного компьютера. Но борется с ником моего ноутбука.
Гай Томас
Спасибо всем за отзывы. Версия для командной строки выглядит очень многообещающе - я думаю, что решение (по крайней мере для меня) состоит в том, чтобы создать командный файл: вызвать инструмент командной строки, подождать 5 секунд или около того и запустить mstsc.exe mycomputer.rdp
Джон Симбл
3

Улучшение ответа Джона Сибли ... если в окнах вы можете избежать C # кода, используя команду "timeout", как показано ниже.

ECHO OFF
CLS
WolCmd.exe MAC_OF_NIC IP_ADDR MASK 7
timeout 10
ECHO Starting remote desktop connection
start mstsc.exe mycomputer.rdp

Посмотрите этот ответ в StackOverflow для получения дополнительной информации о разделе сна файла .cmd: /programming/4317020/windows-batch-sleep

Деннис
источник
Полезная команда - я должен помнить это для будущих командных файлов :)
Джон Симбл
2

Удаленный рабочий стол не имеет встроенной функции удаленного включения.

Возможно, вы сможете настроить свою сетевую карту для пробуждения по любому пакету. Однако это, вероятно, не будет работать так, как вы предполагали, поскольку не будет различать попытку подключения к удаленному рабочему столу и то, что кто-то просто сканирует вашу сеть или скрытый пакет от службы, которую вы использовали.

На данный момент вам, вероятно, придется согласиться с двухэтапным процессом: 1) разбудить компьютер с одним приложением, 2) подключиться через удаленный рабочий стол.

Джейсон Р. Кумбс
источник
2

Используя информацию из других ответов, я создал папку, содержащую следующие файлы:

connect.bat
mycomputer.rdp (remote desktop connection file)
sleep.exe (a little program to wait a specified number of milliseconds)
wolcmd.exe

Запустив connect.bat, я просыпаюсь, жду 10 секунд, а затем открываю подключение к удаленному рабочему столу.

connect.bat содержит следующее:

ECHO OFF
CLS
WolCmd.exe 0011AA22BB33 10.1.255.255 255.255.0.0 7
ECHO Sleeping...
Sleep.exe 10000
ECHO Starting remote desktop connection
start mstsc.exe mycomputer.rdp

Вы можете сгенерировать sleep.exe, сохранив приведенный ниже исходный код как sleep.cs и скомпилировав его с помощью компилятора C #, который поставляется с .NET framework:

csc /out:sleep.exe c:\sleep.cs

Источник для sleep.cs

using System;
using System.Threading;

namespace Sleep
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length == 1)
            {
                int period = 0;
                Int32.TryParse(args[0], out period);
                Console.WriteLine("Sleeping for {0} ms", period);
                Thread.Sleep(period);
            }
        }
    }
}
Джон Сибли
источник
2

Вам нужен сетевой адаптер, который поддерживает разгрузку ARP и шаблон пробуждения TCP SYN, как указано в http://technet.microsoft.com/en-us/library/ee617165%28v=ws.10%29.aspx

Если эти функции поддерживаются и включены, то при включении удаленного рабочего стола операционная система не будет предупреждать вас о политике сна / гибернации.

CZZ
источник
Я заметил, что это работает на моей новейшей машине разработчика - наверное, это и есть причина.
Джон Симбл
1

Существуют различные причины типа, связанные с появлением сообщения об ошибке.

Недостаточно памяти

Закройте другие программы и попробуйте снова подключиться. Если проблема не устранена, перезагрузите компьютер и повторите попытку подключения. Если вы по-прежнему не можете подключиться, обратитесь к администратору сети или в службу технической поддержки. (Для получения дополнительной информации см. Предотвращение проблем с нехваткой памяти.)

Сбой в работе сети

Убедитесь, что ваше сетевое соединение работает, например, получая доступ к какому-либо локальному или глобальному домену, или если кабель Ethernet подключен к сетевому адаптеру или включен беспроводной коммутатор.

Удаленный компьютер не может быть найден

Убедитесь, что удаленный рабочий стол включен. Проверьте, работает ли удаленный компьютер (ни в спящем, ни в режиме гибернации). Проверьте имя компьютера или его IP-адрес и убедитесь, что вы ввели его правильно.

Подключение домашнего компьютера к компьютеру в корпоративном домене требует промежуточного шага для обеспечения связи компьютеров, например, для установления соединения виртуальной частной сети (VPN) с корпоративной сетью.

Или другое приложение может использовать тот же порт, что и RDP.

Более подробные примеры, чем мои самые распространенные случаи, или подробности о каждом из них смотрите в:

strpeter
источник