远程桌面连接上的远程桌面连接

不到一周前,腾讯干了一些大好事,导致一大批QQ机器人一夜间没了。为什么不试试一种模拟鼠标和键盘的方法来获取和发送消息,代替对协议的分析呢?一想到这里,腾讯的下一步计划一定就是清理掉一切电脑用户了吧。坏时代,来临力。

模拟人的操作总是可行的,但是获取信息的程度和效率比不上分析协议,并且细节问题非常多。比如,服务器通常并不会长期运行图形界面,即使是运行Windows Server的服务器也是如此。Windows服务器会在被远程桌面连接时为用户启动UI,而一旦远程桌面断开连接,甚至客户端将远程桌面窗口最小化,都会停止服务器对图形界面的处理,基于图形界面的自动化工具也会因此无法继续工作。

远程桌面窗口最小化时停用图形界面的“优化”可以通过添加下列注册表项来关闭:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Terminal Server Client]
"RemoteDesktop_SuppressWhenMinimized"=dword:00000002

但是,断开连接后,虽然远程桌面会话中的程序仍能继续运行,可图形界面只能关闭。这个问题无法解决,所以只能解决掉产生这个问题的原因。

原因是“远程桌面会话”

神奇的是,只有远程桌面会话有这样的特性,而名为“console”的会话——比如个人电脑开机后进入的默认会话——并不会因为没有外接显示器而不持续运行图形界面。更神奇的是,完全可以把远程桌面会话倒进(连接到)名为console的会话。这一步骤使用下面的命令可以一步完成。其原理是使用query.exe(多用户查询实用程序)找出当前会话ID,再用tscon.exe(会话连接实用程序)将其连接到名为console的会话上。

for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon %%s /dest:console)

在执行此命令后,与客户端的远程桌面连接将断开,但其中的程序与图形界面保持运行。若客户端再次连接服务器,则会话恢复为远程桌面会话。

原因是“断开连接后”

那多简单啊,只要客户端一直不关掉远程桌面窗口就行了。客户端用什么都行:

  • 可以用自己的电脑。
  • 可以找一台闲置的电脑。
  • 可以再买一台服务器,专门用来连远程桌面。
  • 可以用服务器自己连自己。

大可选一个最生草的方案。

据说Windows的远程桌面不允许连接到127.0.0.1。我使用Windows 7附带的远程桌面连接工具测试可以连接。不过如果真的不让套娃,还可以连接到127.0.0.2、127.127.127.127、127.114.5.14、127.191.98.10……

似乎同一个用户账户只能被一个远程桌面会话连接。(为什么不能让多个客户端同时登入一个用户账户,在屏幕上显示五颜六色的鼠标指针、七彩的键盘焦点光标?)我在服务器的一个账户的桌面上创建了一个远程桌面连接配置文件,连接到这个账户自己。只要双击它,就能把自己踢下线。再登上去的时候,就会看到那个把自己踢下线的远程桌面连接被自己踢下线了。所以,需要多个账户来实现用服务器自己连自己的操作。另外,一台服务器(在没有额外购买授权的情况下)只能同时被连两个用户。为了突破限制,可以试试RDP Wrapper Library


本文中的一些信息综合自Stack Overflow问题Can the GUI of an RDP session remain active after disconnect的数篇答案

远程桌面连接上的远程桌面连接》上有1条评论

  1. Pingback引用通告: CTF校赛;木鼠子ii;HP DeskJet 2300 series;TeX标尺 | satgo1546's ocean

发表评论

电子邮件地址不会被公开。 必填项已用*标注