问题描述
我在 Dockerized Django 应用程序的视图方法中有一个 ThreadPoolExecutor
对象(rdp_connector_global
),通过提交调用以下方法(_rdp_connect
),如下所示:
rdp_connector_global.submit(_rdp_connect,login.ip_address,login.remote_port,login.username,login.password,login.rdp_width_pixels,login.rdp_height_pixels)
def _rdp_connect(hostname_or_ip,port,username,password,rdp_width_pixels=1920,rdp_height_pixels=1080):
domain = None
username_simple = username
if "\\" in username:
split = username.split["\\"]
domain = split[0]
username_simple = split[1]
elif "@" in username:
split = username.split["@"]
username_simple = split[0]
domain = split[1]
connection = None
if domain is None:
xvfb_args_str = "/usr/bin/xvfb-run /usr/bin/xfreerdp /sec:tls /u:{0} /p:{1} /w:{2} /h:{3} /v:{4}:{5} /cert-ignore".format(username_simple,rdp_width_pixels,rdp_height_pixels,hostname_or_ip,port)
connection = subprocess.Popen(xvfb_args_str,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
else:
xvfb_args_str = "/usr/bin/xvfb-run /usr/bin/xfreerdp /sec:tls /d:{0} /u:{1} /p:{2} /w:{3} /h:{4} /v:{5}:{6} /cert-ignore".format(domain,username_simple,shell=True)
logging.info(connection.communicate())
connection.wait()
logging.info(connection.communicate())
Xvfb 和 freerdp 已正确安装在 Docker 容器中。当我从 Django shell 或 Docker 内的 shell 运行它时,登录命令成功。但是当通过代码运行时,相同的命令无法登录到远程 Windows 机器。在通过 Django 运行时,我在连接到 Windows 计算机的等待 30 秒失败后收到 ERRINFO_logoFF_BY_USER
。
解决方法
我终于解决了这个问题。它与 freerdp、Docker 或 Xvfb 无关! login.password在使用前没有解密,因此登录失败。