রিমোট ব্যবহারকারীরা রিমোট ডেস্কটপ সার্ভিস (RDP) ব্যবহার করে নিজেদের উইন্ডোজ ১০ এবং ১১ কম্পিউটারে সংযোগ করতে পারে। ডিভাইস সেটিংসে RDP সক্রিয় করে যেকোনো রিমোট ডেস্কটপ ক্লায়েন্ট দিয়ে কম্পিউটারে সংযোগ করা যায়। কিন্তু একসাথে RDP সেশন সংখ্যার একটি লিমিট আছে — শুধু একটি রিমোট ইউজার একসাথে কাজ করতে পারে। দ্বিতীয় RDP সেশন খোলার চেষ্টা করলে প্রথম ইউজারের সেশন ডিসকানেক্ট করার জন্য ওয়ার্নিং আসে।
Another user is signed in. If you continue, they’ll be disconnected. Do you want to sign in anyway?
সকল ডেস্কটপ উইন্ডোজ ভার্সন (Win 10 এবং 11 সহ) রিমোট ডেস্কটপ সার্ভিস ব্যবহারে কিছু সীমাবদ্ধতা রয়েছে:
- RDP দিয়ে রিমোট সংযোগ শুধু উচ্চার উইন্ডোজ এডিশনে (Professional এবং Enterprise) করা যায়। Windows Home এবং Single Language এডিশনে ইনকামিং রিমোট ডেস্কটপ সংযোগ নিষিদ্ধ;
- শুধু একটিই সিমালটেনিয়াস RDP সংযোগ সাপোর্ট করা হয়। দ্বিতীয় RDP সেশন খোলার চেষ্টা করলে একটিভ সংযোগ বন্ধ করার প্রম্পট আসে;
- যদি কোনো ব্যবহারকারী কম্পিউটারের কনসোলে লোকালি কাজ করছেন, তবে নতুন রিমোট RDP সংযোগ তৈরি করার চেষ্টা করলে কনসোল সেশন ডিসকানেক্ট হয়। রিমোট RDP সেশনও জোরপূর্বক ডিসকানেক্ট হয় যদি ব্যবহারকারী লোকালি লগইন করার চেষ্টা করে।

বাস্তবে, উইন্ডোজে সিমালটেনিয়াস RDP সংযোগের সংখ্যা লাইসেন্স দ্বারা সীমাবদ্ধ (কোনো টেকনিক্যাল দিক থেকে নয়)। তাই এই সীমাবদ্ধতা ওয়ার্কস্টেশনকে মাল্টি-ইউজার টার্মিনাল RDP সার্ভার হিসেবে ব্যবহার করতে দেয় না। মাইক্রোসফ্টের লজিক সিম্পল: টার্মিনাল সার্ভার দরকার হলে উইন্ডোজ সার্ভার লাইসেন্স, RDS CALs কিনুন, এবং Remote Desktop Session Host (RDSH) রোল ইনস্টল ও কনফিগার করুন।
টেকনিক্যালি, পর্যাপ্ত র্যাম থাকলে যেকোনো উইন্ডোজ ভার্সন কয়েক দশক রিমোট ইউজারের সিমালটেনিয়াস অপারেশন সাপোর্ট করতে পারে। গড় করে প্রতি ইউজার সেশনের জন্য ১৫০-২০০ MB র্যাম লাগে (রানিং অ্যাপস বাদে)। তাই, সিমালটেনিয়াস RDP সেশনের সর্বোচ্চ সংখ্যা তাত্ত্বিকভাবে শুধু কম্পিউটার রিসোর্স দ্বারা সীমাবদ্ধ।
আসুন উইন্ডোজ ১০ এবং ১১-এ সিমালটেনিয়াস RDP সংযোগ সক্ষম করার দুটি পদ্ধতি দেখি: RDP Wrapper টুল ব্যবহার করা বা termsrv.dll সিস্টেম ফাইল প্যাচ করা।
নোট. লেখায় বর্ণিত সিস্টেম মডিফিকেশনগুলো মাইক্রোসফ্ট লাইসেন্স এগ্রিমেন্টের লঙ্ঘন বলে বিবেচিত হয় এবং আপনি নিজের রিস্কে এগুলো করবেন।RDP Wrapper: উইন্ডোজে একাধিক RDP সেশন সক্ষম করা
RDP Wrapper Library ওপেন সোর্স প্রজেক্ট termsrv.dll ফাইল রিপ্লেস না করেই উইন্ডোজ ১০-এ একাধিক RDP সেশন সক্ষম করতে দেয়। এই টুল SCM (Service Control Manager) এবং Remote Desktop Services-এর মধ্যে একটি লেয়ার হিসেবে কাজ করে। RDPWrap একাধিক সিমালটেনিয়াস RDP সংযোগ সাপোর্ট সক্ষম করার পাশাপাশি উইন্ডোজ Home এডিশনে RDP সার্ভার তৈরির সুযোগও দেয়। RDP Wrapper termsrv.dll ফাইলে কোনো পরিবর্তন আন না, শুধু পরিবর্তিত প্যারামিটারসহ termsrv লাইব্রেরি লোড করে।
তাই, termsrv.dll ফাইল আপডেট হলেও RDPWrap কাজ করবে। উইন্ডোজ আপডেটের ভয় নেই।
গুরুত্বপূর্ণ. RDP Wrapper ইনস্টল করার আগে নিশ্চিত হন যে আপনি আসল (আনপ্যাচড) termsrv.dll ফাইল ব্যবহার করছেন। অন্যথায়, RDP Wrapper অস্থির হতে পারে বা চালু হবেনা।RDP Wrapper GitHub রিপোজিটরি থেকে ডাউনলোড করুন https://github.com/binarymaster/rdpwrap/releases (লেটেস্ট উপলব্ধ ভার্সন RDP Wrapper Library v1.6.2)। প্রজেক্ট ২০১৭ সাল থেকে আপডেট হয়নি, কিন্তু উইন্ডোজ ১০-এর সব নতুন বিল্ড এবং উইন্ডোজ ১১-এও ব্যবহার করা যায়।
RDPWrap-v1.6.2.zip আর্কাইভে কিছু ফাইল থাকে:
- RDPWinst.exe — RDP Wrapper Library ইনস্টল/আনইনস্টল প্রোগ্রাম;
- RDPConf.exe — RDP Wrapper কনফিগারেশন টুল;
- RDPCheck.exe — RDP চেক ইউটিলিটি (Local RDP Checker);
- install.bat, uninstall.bat, update.bat — RDP Wrapper ইনস্টল, আনইনস্টল, আপডেটের জন্য ব্যাচ ফাইল।

RDPWrap ইনস্টল করতে install.bat ফাইল অ্যাডমিনিস্ট্রেটর হিসেবে চালান। প্রোগ্রাম C:\Program Files\RDP Wrapper ডিরেক্টরিতে ইনস্টল হবে।

ইনস্টলেশন শেষে RDPConfig.exe চালান। ইনস্টলেশনের সাথে সাথে টুলটি দেখাবে যে RDP wrapper চলছে (Installed, Running, Listening), কিন্তু কাজ করছে না। লাল ওয়ার্নিং [not supported] লক্ষ্য করুন। এটিতে রিপোর্ট করা হয়েছে যে এই উইন্ডোজ ১০ ভার্সন (ver. 10.0.19041.1320) RDPWrapper দ্বারা সাপোর্টেড নয়।

হকিকতে, প্রতিটি উইন্ডোজ ১০ ভার্সনের জন্য rdpwrap.ini কনফিগারেশন ফাইলে বর্ণনা থাকতে হয়। আপনার কনফিগ ফাইলে আপনার উইন্ডোজ ১০ বিল্ডের জন্য কোনো সেটিং নেই।
rdpwrap.ini ফাইলের বর্তমান ভার্সন এখান থেকে ডাউনলোড করা যায় https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini
এই পেজের কন্টেন্ট ম্যানুয়ালি কপি করে "C:\Program Files\RDP Wrapper\rdpwrap.ini" ফাইলে পেস্ট করুন। অথবা PowerShell cmdlet Invoke-WebRequest দিয়ে ফাইল ডাউনলোড করুন (প্রথমে Remote Desktop সার্ভিস বন্ধ করুন):
Stop-Service termservice -Force
Invoke-WebRequest https://raw.githubusercontent.com/sebaxakerhtc/rdpwrap.ini/master/rdpwrap.ini -outfile "C:\Program Files\RDP Wrapper\rdpwrap.ini"

কম্পিউটার রিস্টার্ট করুন, RDPConfig.exe টুল চালান। চেক করুন Diagnostics সেকশনের সব আইটেম গ্রিন এবং ক্যাপশন [Fully supported] দেখায়। নিচের স্ক্রিনশটে দেখানো হলো এই নতুন কনফিগরেশন দিয়ে RDP Wrapper উইন্ডোজ ১১-এও ভালো কাজ করছে।

আপনার কম্পিউটারে কয়েকটি RDP সেশন তৈরি করার চেষ্টা করুন (যেকোনো RDP ক্লায়েন্ট: mstsc.exe, rdcman, ইত্যাদি ব্যবহার করুন)। এটি কাজ করল (সেভ করা RDP ক্রেডেনশিয়ালও ব্যবহার করা যায়)! এখন আপনার উইন্ডোজ ১০ দুটি (এবং অধিক) রিমোট ইউজারের জন্য আলাদা RDP সেশন সিমালটেনিয়াসলি ব্যবহার করার সুযোগ দিচ্ছে।

RDPWrap টুল সব উইন্ডোজ এডিশনে সাপোর্টেড, তাই আপনি যেকোনো উইন্ডোজ ডিভাইসে আপনার নিজস্ব টার্মিনাল (RDS) সার্ভার বানাতে পারেন।
এছাড়া, RDP Wrapper দিয়ে:
- Remote Desktop সক্ষম করা;
- Hide users on logon screen অপশন দিয়ে উইন্ডোজ লগ অন স্ক্রিন থেকে ইউজার লিস্ট লুকানো;
- Single session per user অপশন ডিসেবল করলে একই ইউজার অ্যাকাউন্টের অধীনে একাধিক সিমালটেনিয়াস RDP সেশন অনুমোদিত (রেজিস্ট্রি প্যারামিটার fSingleSessionPerUser = 0 সেট হয়
HKLM\SYSTEM\ CurrentControlSet\Control\Terminal Server\fSingleSessionPerUserকী-এ); - RDP Port — রিমোট ডেস্কটপ পোর্ট নম্বর TCP 3389 থেকে যেকোনো অন্য পোর্টে পরিবর্তন করা;
- Session Shadowing Mode সেকশনে RDP সেশনে রিমোট কন্ট্রোল (শ্যাডো) কানেকশন মোড কনফিগার করা।
GPO ব্যবহার করে RDP সেশন ডুরেশন লিমিট সেট করা যায়।
উইন্ডোজ ১০-এ RDP Wrapper কাজ না করলে কী করবেন
কিছু কেসে, RDP Wrapper টুল প্রত্যাশা অনুযায়ী কাজ করে না এবং আপনি একাধিক RDP সেশন দিয়ে আপনার উইন্ডোজ হোস্টে সংযোগ করতে পারেন না।
ইফ ইউটিলিটি স্ট্যাটাস সেকশনে [not supported] দেখায়, তবে rdpwrap.ini ফাইলে আপনার উইন্ডোজ বিল্ডের কনফিগারেশন নেই। উপরে বর্ণিতভাবে rdpwrap.ini ফাইল আপডেট করুন।
rdpwrap.ini ফাইল আপডেট করার পরও RDP Wrapper কাজ না করলে, rdpwrap.ini ফাইল খুলুন এবং আপনার উইন্ডোজ ভার্সনের জন্য বর্ণনা সেকশন খুঁজুন। rdpwrapper কনফিগ ফাইলে আপনার উইন্ডোজ ভার্সনের সাপোর্ট আছে কিনা জানতে পারেন কীভাবে?
নিচের স্ক্রিনশটে দেখা যাচ্ছে যে আমার উইন্ডোজ ১০ ভার্সন (10.0.19041.1320)-এর জন্য দুটি বর্ণনা সেকশন রয়েছে:
[10.0.19041.1320] ….. [10.0.19041.1320-SLInit] …..

কনফিগ ফাইলে আপনার উইন্ডোজ ভার্সনের জন্য কোনো সেকশন না থাকলে, Google-এ আপনার উইন্ডোজ বিল্ডের জন্য rdpwrap.ini স্ট্রিংস সার্চ করুন। পাওয়া লাইনগুলো ফাইলের শেষে যোগ করুন।
RDPWrapper-এ সমস্যা হলে, https://github.com/stascorp/rdpwrap/issues-এ ইস্যু খুলুন। এখানেও আপডেটেড rdpwrap.ini ফাইল পাওয়া যায়।
সিকিউরিটি আপডেট ইনস্টল বা উইন্ডোজ ১০ বিল্ড আপগ্রেড করার পর যদি RDP Wrapper সঠিকভাবে কাজ না করে, তবে Diagnostics সেকশনে "Listener state: Not listening" দেখায় কিনা চেক করুন।

rdpwrap.ini ফাইল আপডেট করুন, এবং তারপর সার্ভিস রি-ইনস্টল করুন:
rdpwinst.exe -u
rdpwinst.exe -i
হয়তো আপনি ভিন্ন ইউজার অ্যাকাউন্টের অধীনে দ্বিতীয় RDP সংযোগ তৈরি করার চেষ্টা করলে একটি ওয়ার্নিং দেখছেন:
The number of connections to this computer is limited and all connections are in use right now. Try connecting later or contact your system administrator.

এই কেসে, Local Group Policy Editor (gpedit.msc) ব্যবহার করে "Limit number of connections" পলিসি সক্ষম করুন Computer Configuration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections সেকশনে। এর মান 999999 সেট করুন।

কম্পিউটার রিস্টার্ট করুন GPO আপডেট এবং সেটিংস প্রয়োগ করার জন্য।
Termsrv.dll মডিফাই করে একাধিক RDP সেশন সক্ষম করা
RDPWrapper ছাড়া উইন্ডোজ ১০-এ কাঙ্কারেন্ট RDP ইউজার সংযোগের সীমাবদ্ধতা সরাতে আসল termsrv.dll ফাইল রিপ্লেস করা যায়। এটি রিমোট ডেস্কটপ সার্ভিস দ্বারা ব্যবহৃত মূল লাইব্রেরি ফাইল। ফাইলটি অবস্থিত C:\Windows\System32 ডিরেক্টরিতে।
termsrv.dll ফাইল এডিট বা রিপ্লেস করার আগে, এর একটি ব্যাকআপ কপি তৈরি করা উচিত। প্রয়োজনে আসল ফাইলে ফিরে যেতে এটি সাহায্য করবে। এলিভেটেড কমান্ড প্রম্পট খুলুন এবং কমান্ড দিন:
copy c:\Windows\System32\termsrv.dll termsrv.dll_backup
তারপর ফাইলের অনারশিপ (ownership) নিন। TrustedInstaller থেকে লোকাল Administrators গ্রুপে ওনারশিপ পরিবর্তন করতে কমান্ড:
takeown /F c:\Windows\System32\termsrv.dll /A
SUCCESS: The file (or folder): c:\Windows\System32\termsrv.dll now owned by the administrators group
এখন icacls.exe ব্যবহার করে লোকাল administrators গ্রুপকে termsrv.dll ফাইলে Full Control পারমিশন দিন:
icacls c:\Windows\System32\termsrv.dll /grant Administrators:F
processed file: c:\Windows\System32\termsrv.dll Successfully processed 1 files; Failed processing 0 files.

এরপর, Remote Desktop Service (TermService) বন্ধ করুন services.msc কনসোল বা কমান্ড প্রম্পট থেকে:
Net stop TermService
Remote Desktop Services UserMode Port Redirector সার্ভিসও এর সাথে বন্ধ হবে।

আগে বড়ে, আপনার উইন্ডোজ ১০ ভার্সন (বিল্ড নম্বর) জানতে হবে। PowerShell কনসোল খুলুন এবং কমান্ড দিন:
Get-ComputerInfo | select WindowsProductName, WindowsVersion
আমার কেসে, উইন্ডোজ ১০ বিল্ড 21H1 ইনস্টলড।
তারপর termsrv.dll ফাইল যেকোনো HEX এডিটর (যেমন Tiny Hexer) দিয়ে খুলুন। আপনার উইন্ডোজ বিল্ডের উপর ভিত্তি করে, নিচের টেবিল অনুযায়ী স্ট্রিং খুঁজে রিপ্লেস করুন:
| Windows build | Find the string | Replace with |
| Windows 11 RTM (21H2 – 22000.258) | 39 81 3C 06 00 00 0F 84 4F 68 01 00 | B8 00 01 00 00 89 81 38 06 00 00 90 |
| Windows 10 x64 21H2 | 39 81 3C 06 00 00 0F 84 DB 61 01 00 | |
| Windows 10 x64 21H1 | 39 81 3C 06 00 00 0F 84 2B 5F 01 00 | |
| Windows 10 x64 20H2 | 39 81 3C 06 00 00 0F 84 21 68 01 00 | |
| Windows 10 x64 2004 | 39 81 3C 06 00 00 0F 84 D9 51 01 00 | |
| Windows 10 x64 1909 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
| Windows 10 x64 1903 | 39 81 3C 06 00 00 0F 84 5D 61 01 00 | |
| Windows 10 x64 1809 | 39 81 3C 06 00 00 0F 84 3B 2B 01 00 | |
| Windows 10 x64 1803 | 8B 99 3C 06 00 00 8B B9 38 06 00 00 | |
| Windows 10 x64 1709 | 39 81 3C 06 00 00 0F 84 B1 7D 02 00 |
Tiny Hexer এডিটর termsvr.dll ফাইল সিস্টেম32 ফোল্ডার থেকে সরাসরি এডিট করতে পারে না। ডেস্কটপে কপি করুন, মডিফাই করার পর আসল ফাইলটি রিপ্লেস করুন।
উদাহরণস্বরূপ, আমার উইন্ডোজ ১০ x64 বিল্ড 21H1 (19043.1320) termsrv.dll ফাইল ভার্সন 10.0.19041.1320। Tiny Hexer-এ termsrv.dll খুলুন, তারপর টেক্সট খুঁজুন:
39 81 3C 06 00 00 0F 84 2B 5F 01 00
এবং এর সাথে রিপ্লেস করুন:
B8 00 01 00 00 89 81 38 06 00 00 90

ফাইল সেভ করুন এবং TermService চালু করুন।
যদি কিছু ভুল হয় এবং Remote Desktop সার্ভিসে সমস্যা হয়, সার্ভিস বন্ধ করে মডিফাইড termsrv.dll ফাইল আসল ভার্সন দিয়ে রিপ্লেস করুন:
copy termsrv.dll_backup c:\Windows\System32\termsrv.dll
PowerShell ব্যবহার করে Termsrv.dll প্যাচ করা
HEX এডিটর দিয়ে ম্যানুয়ালি termsrv.dll ফাইল মডিফাই না করে, নিচের PowerShell স্ক্রিপ্ট ব্যবহার করে স্বয়ংক্রিয়ভাবে প্যাচ প্রয়োগ করা যায়। এই স্ক্রিপ্ট উইন্ডোজ পাওয়ারশেল ভার্সন trên ভিত্তি করে তৈরি এবং মডার্ন PowerShell Core-এ কাজ করে না। স্ক্রিপ্টটি ইউনিভার্সাল এবং উইন্ডোজ ১০ (1809+) এবং উইন্ডোজ ১১-এর সব এডিশনে termsrv.dll ফাইল প্যাচ করতে ব্যবহার করা যায়।
# Stop RDP service, make a backup of the termsrv.dllfile and change the permissions
Stop-Service UmRdpService -Force
Stop-Service TermService -Force
$termsrv_dll_acl = Get-Acl c:\windows\system32\termsrv.dll
Copy-Item c:\windows\system32\termsrv.dll c:\windows\system32\termsrv.dll.copy
takeown /f c:\windows\system32\termsrv.dll
$new_termsrv_dll_owner = (Get-Acl c:\windows\system32\termsrv.dll).owner
cmd /c "icacls c:\windows\system32\termsrv.dll /Grant $($new_termsrv_dll_owner):F /C"
# search for a pattern in termsrv.dll file
$dll_as_bytes = Get-Content c:\windows\system32\termsrv.dll -Raw -Encoding byte
$dll_as_text = $dll_as_bytes.forEach('ToString', 'X2') -join ' '
$patternregex = ([regex]'39 81 3C 06 00 00(\s\S\S){6}')
$patch = 'B8 00 01 00 00 89 81 38 06 00 00 90'
$checkPattern=Select-String -Pattern $patternregex -InputObject $dll_as_text
If ($checkPattern -ne $null) {
$dll_as_text_replaced = $dll_as_text -replace $patternregex, $patch
}
Elseif (Select-String -Pattern $patch -InputObject $dll_as_text) {
Write-Output 'The termsrv.dll file is already patch, exitting'
Exit
}
else {
Write-Output "Pattern not found "
}
# patching termsrv.dll
[byte[]] $dll_as_bytes_replaced = -split $dll_as_text_replaced -replace '^', '0x'
Set-Content c:\windows\system32\termsrv.dll.patched -Encoding Byte -Value $dll_as_bytes_replaced
# comparing two files
fc.exe /b c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll
# replacing the original termsrv.dll file
Copy-Item c:\windows\system32\termsrv.dll.patched c:\windows\system32\termsrv.dll -Force
Set-Acl c:\windows\system32\termsrv.dll $termsrv_dll_acl
Start-Service UmRdpService
Start-Service TermService
সম্পূর্ণ স্ক্রিপ্ট কোড আমার GitHub রিপোজিটরিতে পাওয়া যাবে: https://github.com/maxbakhub/winposh/blob/main/termsrv_rdp_patch.ps1
স্ক্রিপ্ট এক্সিকিউট করতে, এটিকে কম্পিউটারে ডাউনলোড করুন। বর্তমান সেশনের জন্য PowerShell এক্সিকিউশন পলিসি পরিবর্তন করুন:
Set-ExecutionPolicy Bypass -Scope Process -Force
এবং স্ক্রিপ্ট চালান:
C:\users\root\desktop\termsrv_rdp_patch.ps1

উইন্ডোজ আপডেট ইনস্টল করার পর এই স্ক্রিপ্ট চালাতে পারেন যাতে termsrv.dll ফাইলে অবিলম্বে পরিবর্তন প্রয়োগ হয় (প্রতিবার আপডেট ইনস্টলেশনের পর HEX এডিটরে termsrv.dll মডিফাই করতে হয় না)।
termsrv.dll ফাইল রিপ্লেস করে উইন্ডোজ ১০ বা ১১-এ একাধিক RDP সেশন সক্ষম করার সুবিধা হলো অ্যান্টিভাইরাসগুলো এই পদ্ধতিতে রিয়াক্ট করে না (RDPWrap-এর বিপরীতে, যা অনেক অ্যান্টিভাইরাস Malware/HackTool/Trojan হিসেবে ডিটেক্ট করে)।
প্রধান ডメリカ হলো উইন্ডোজ ১০ বিল্ড আপগ্রেড করার সময় (বা মাসিক কিউমুলেটিভ আপডেটে termsrv.dll ভার্সন আপডেট হওয়ায়) আপনাকে ম্যানুয়ালি termsrv.dll ফাইল এডিট করতে হবে। আর RDPWrapper ব্যবহার করলেও উইন্ডোজ আপডেট ইনস্টলের পর rdpwrap.ini ফাইল আপডেট করতে হবে।
এই লেখায় আমরা দেখেছি কীভাবে সিমালটেনিয়াস RDP ইউজার সংযোগের সীমাবদ্ধতা সরিয়ে ডেস্কটপ উইন্ডোজ ভার্সনে ফ্রি টার্মিনাল সার্ভার চালানো যায়।