В ОС Windows 8 / 8.1, как и предыдущих версиях клиентских ОС Microsoft, поддерживается только одно одновременное входящее RDP-подключение. Это означает что к компьютеру Windows 8 через удаленный рабочий стол может одновременно подключиться только один пользователь (одна сессия), локальная или удаленная. В большинстве случаев этого достаточно, но иногда хотелось бы иметь возможность одновременной работы сразу нескольких пользователей в собственных сессиях. Хорошим примером может быть компьютер в роли Media Center, когда в консольной сессии воспроизводится видео, и одновременно необходимо удаленно поработать с системой без прерывания видео на TV.
При попытке открыть вторую RDP-сессию к компьютеру с Windows 8, появляется сообщение о том, что уж в системе уже залогинен другой пользователь и его сессия может быть завершена.
Так, например, в серверной версии Windows поддерживаются два одновременных административных подключения с индивидуальными сессиями (в случае организации на базе Windows Server терминального сервера RDS , это число может быть еще большим).
Тем не менее, на просторах интернета можно найти специальный патч, позволяющий обойти это ограничение. Благодаря этому патчу несколько пользователей смогут одновременно подключиться по RDP к компьютеру с Windows 8 / Windows 8.1.
Итак, патч предполагает собой замену оригинального системного файла %SystemRoot%\System32\termsrv.dll (библиотека, используемая службой Remote Desktop Services).
Ссылки на модифицированную версию библиотеку termsrv.dll:
- Windows 8 – termsrv.dll-win8.zip
- Windows 8.1 — termsrv.dll-win8.1.zip
Перед заменой системной библиотеки создадим резервную копию файла termsrv.dll командой:
copy c:\Windows\System32\termsrv.dll termsrv.dll_old
Теперь, если что-то пойдет не так, всегда можно вернуться к начальной конфигурации, заменив текущий файл оригинальным termsrv.dll_old.
Скачайте архив с библиотекой для своей версии Windows.
В Windows 8 предварительно нужно изменить значение следующих ключей в ветке реестра HKLM\System\CurrentControlSet\Control\Terminal Server\:
- fDenyTSConnections (DWORD) —0 (ключ позволяет удаленно включить RDP на компьютере)
- fSingleSessionPerUser (DWORD) — 0
Эту же операцию можно выполнить из командной строки:
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
Затем переходим в каталог C:\Windows\System32, находим файл termsrv.dll и открываем его свойства.
По-умолчанию, владельцем этого файла является TrustedInstaller и даже у администратора нет прав на его замену.
Перейдем на вкладку Security и нажмем кнопку Edit. В списке доступа найдите группу локальных администраторов и предоставьте ей полные права на файл (Full Control) и сохраните изменения.
Следующий шаг перед заменой файла библиотеки, открыть консоль управления службами (services.msc) и остановить службу Remote Desktop Services.
Скопируем файл termsrv.dll из скачанного архива для своей версии Windows в каталог %SystemRoot%\System32\ (с заменой).
После замены файла запустите службу Remote Desktop Services и попытайтесь создать две RDP сессии с пропатченной машиной под разными учетными записями. Если вы все сделали правильно, должны открыться две независимые сессии удаленного рабочего стола.
В качестве решения, устойчивого к замене файла termsrv.dll при установке обновлений Windows, следует использовать открытое Open Source решение RDP Wrapper Library (доступен на GitHub), которое не правит файл termsrv.dll, и является прослойкой между службой Terminal Services и SCM. Подробнее об использовании RDP Wrapper Library можно почитать тут.
В таком случае, может ли одновременно один пользователь работать локально за компьютером, а другой — по RDP?
Да, можно
Спасибо!
А если не использовать патч, то можно ли будет также создать две RDP сессии, но при том, что одна из них будет консольная? Т.е. это команды:
mstsc.exe /v:»Имя/IP-адрес:порт» /f — Терминальное подключение RDP
mstsc /v:»Имя/IP-адрес:порт» /admin /f — Консольное подключение RDP
Нет, в клиентских ОС всегда идет RDP подключение на консоль. Ключи /admin и /console (в зависимости от версии RDP клиента) можно использовать для подключении к консоли в серверных ОС Microsoft.
универсальный способ решения вышеописанной проблемы от висты до 10ки : https://github.com/binarymaster/rdpwrap
по описанию — всё необходимое патчится на лету, не ломается при обновлении системы.
ваше мнение?
Судя по описанию — вполне себе годная и универсальная вещица.
Важный плюс — устойчивость к замене файла termsrv.dll при обновлении Windows.
Спасибо за инфу!
Долго мучался и не понимал, в чём дело.
Уже начал было думать, что очередной развод.
Потом оказалось, что при копировании через Тотал файл не заменяется, хотя выдаёт, что всё ОК.
После этого попробовал через проводник с изменением прав доступа и всё заработало.
Спасибо за полезную статью.
Дело в том, что у Вас, скорее всего, 64-битная ОС, а в тотале не включена опция «отключить перенаправление System32 -> SysWOW64», соответственно файл просто попадает не в ту папку.
Спасибо за замечание, 2 часа промучался…пока не прочитал Ваше замечание. И всё получилось!
Не получается изменить свойства termsrv.dll. галки не проставляются так как они неактивные.
Нужно поменять владельца файла.
Посмотрите тут: http://did5.ru/it/windows/kak-izmenyat-sistemnye-fajly-windows-7-trustedinstaller.html
При запуске ошибка код 126 , не найден модуль. У меня оригинальная Windows 8 build 9200 , а ваш файлик от системы build 9300 может поэтому??
Как галки проставить то? там все бледное у админа, как ему прав больше дать?
И так у меня главный вопрос. подключение RDP сессий в Windows 8 и 10 идет только по локальной сети или можно настроить на глобальную сеть?Всем день добрый. Я настроил только Локальную а мне нужно найти выход на глобальную сеть так как частые командировки и нужен выход на главный компютер.
Не имеет значения. Если компьютеру назначен «белый» ip-адрес или есть возможность настроить проброс порта 3389 с железки доступа в интернет, можно подключаться по rdp и снаружи.
Спасибо за ответ, но к сожалению из вне на 10 я не могу войти( параметры настроены вроде правильно, все как на 7, порты проброшены по 3389 на несколько внутренних айпи с 101 по 105) …на 7 которая сейчас стоит проблем нет. а вот на 10 увы..хотя внутри сети на 10 без проблем. если вам не сложно не могли бы по пунктам расписать как на 10 настроить сами настройки, может я действительно что то не так настроил, хотя повторюсь все брал как на 7. заранее спасибо.
Возможно дело в разных настройках брандмауэра? Попробуйте на 10 отключить его для всех профилей и проверить соединение.
Если Вам не сложно, можете по пунктам расписать настройку рдп на 10, так как я копировал настройки с 7 и возможно что то упустил. повторюсь по локальной сети есть удаленка, по глобальной нет, возможно что я где то что то упустил, заранее спасибо.
Попробуйте такими правилами для брандмауэра разрешить входящий RDP для всех профилей:
netsh.exe advfirewall firewall add rule name=»Remote Desktop — User Mode (TCP-In)» dir=in action=allow program=»%%SystemRoot%%\system32\svchost.exe» service=»TermService» description=»Inbound RDP traffic[TCP 3389]» enable=yes profile=any localport=3389 protocol=tcp
netsh.exe advfirewall firewall add rule name=»Remote Desktop — User Mode (UDP-In)» dir=in action=allow program=»%%SystemRoot%%\system32\svchost.exe» service=»TermService» description=»Inbound RDP traffic[UDP 3389]» enable=yes profile=any localport=3389 protocol=udp
Если Вам не сложно, можете по пунктам расписать настройку рдп на 10, так как я копировал настройки с 7 и возможно что то упустил. повторюсь по локальной сети есть удаленка, по глобальной нет, возможно что я где то что то упустил, заранее спасибо.
какой порт у Вас проброшен на 10 ?
Порт 3389 роутер д линк 300
после замены termsrv.dll, служба Remote Desktop Services больше не запускается, пишет отказано в доступе, если назад старую вернуть dll, служба запускается, что я не так сделал? Все шаги были выполнены верно, win 8.
Возможно, в каком-то патче обновилась версия библиотеки termsrv.dll. Лучше воспользуйтесь более универсальным решением — RDP Wrapper Library (https://winitpro.ru/index.php/2015/09/02/neskolko-rdp-sessij-v-windows-10/#h2_2)
Стоит Win 8.1 Проф
файл termsrv.dll есть только тут c:\Windows\WinSxS\amd64_microsoft-windows-t..teconnectionmanager_31bf3856ad364e35_6.3.9600.17415_none_7faa3caf28018a5e\termsrv.dll
Выполнение данных инструкций не спасает… Что сделать можно?
Может в 8.1 проф, за RDS какая-то другая библиотека отвечает?
Воспользуйтесь более универсальной утилитой, которая не зависит от версии файла termsrv.dll — RDP Wrapper Library https://winitpro.ru/index.php/2015/09/02/neskolko-rdp-sessij-v-windows-10/#h2_2
Мне потребовалось еще настроить брендмауэр — правила на общение с портом 3389 были отключены. А так — все работает! Спасибо!
Я подключаюсь к одному пользователю одновременно 2 раза, тоесть например основной компьютер (хост) там рабочий стол открыт и через rdp к этому же пользователю, и в итоге на хосте видно один экран а в rdp подключении другой. это нормально так и должно быть?
Да, это нормально. В данном случае вы создали независимую сессию. Если нужно видеть рабочий стол локального пользователя, RDP не подойдет.
В вашем случае подойдет что-то типа RemoteAssistance, TeamViewer, Radmin и т.п.
НА 2012 R2 такое прокатит?
Есть такой прожект на GitHub “RDP Wrap” называется.
DLL в системе не правит и работает даже на Win 10, ложится прокладкой между Терминал-сервов и Службой RDP.
Правда с автологином там трабл. Пароль ручками надо вводить. Но зато работает прямо.
Кто ищет, да обрящет……
Вы конечно простите, но нет доверия к чужим бинарным файлам.
Можете описать как байты надо править как это сделали здесь?