发现一篇神文,解决了困扰许久的远程桌面OpenGL/GPU 等问题。。。

原地址在这:http://www.tanglei.name/how-to-run-gpu-programs-using-remote-connection/

有时候往往需要通过远程桌面连接进行coding工作,像一般的比如web之类的可能不需要GPU等支持的coding工作直接用windows远程桌面连接编码然后debug即可,而一些需要依靠显卡支持的工作如渲染、cuda等GPU操作时,往往远程桌面连接debug会失败。因为当用远程桌面连接电脑B时,比如本来电脑B是具有牛X显卡,驱动啥之类都没有问题,但此时用另外一台电脑A远程连接过去,在B上跑需要GPU支持的程序,如需要用到Opengl3.X的功能或者cuda,而此时B检测到是远程连接过来的,就不会给予相应的支持或者说没有相应的驱动能够使得远程连接过来的也能支持。啊。。晕了。意思就是说可能此时只能驱动OpenGL1.X,程序就会crash掉。下面用个实例来说吧。

比如我在电脑B上有一段代码时检测GPU 对CUDA的支持

此时我直接通过电脑A通过windows自带的远程桌面连接工具练过去,运行。

得到这样的结果,就是没有cuda相应的支持,而实际上,我直接通过本地执行时能够正常运行的。现在的问题是采取怎样的方式能够正常跑电脑B上的程序,就像自己本人在电脑B所在地本地操控电脑B一样。

开始设想通过QQ的远程控制能否解决?因为感觉QQ远程控制貌似就是传输图片,然后将在电脑A对电脑B传输过来的图片做相应鼠标等操作映射到电脑B上。于是有了如下的解决方案:电脑A、B各登陆1个QQ,QQ A 和QQ B,然后远程桌面连接过去,通过在电脑B上用B QQ申请 QQ A进行远程协助。然后断掉连接、QQ A上接受申请,然后就可以通过QQ的远程桌面控制电脑B了,然后再运行程序。结果……结果失败~ 意思就是这样还是解决不了问题。实验证明,不用远程连接,而直接让人在电脑B上操作,申请电脑A这边的远程协助,这样是可以的。但不能每次都得先让其他人在电脑B上帮忙申请下远程协助吧。

最后在@大鑫的帮助下得到解决。

方法:

1、电脑A用windows自带远程桌面连接到电脑B,在电脑B上登陆QQ B,电脑A这边已经登陆了QQ A。

2、在电脑B上通过QQ B申请远程协助QQ A。

3、电脑A上 QQ A接受邀请。

此时已经建立好连接了。并也能通过QQ的远程协助控制电脑B了。

4、关键,在windows自带的远程桌面连接工具中通过在电脑B上运行如下脚本。没有的话,copy一个过去。

脚本在这:

脚本名:login-as-local-user.cmd

脚本内容(只有一句):

for%%i in (0123456789)do (tscon %%i/dest:console )

注意得以管理员身份运行。运行后,此时通过windows远程连接的会话会断开。现在只能通过QQ的远程协助操作电脑B了。

5、下面就是见证奇迹的时刻了。

现在能够检测到电脑B上的显卡对cuda 支持。

以上演示是得到了显卡对Cuda支持的驱动,相应的OpenGL也一样。其实现在操作就跟在本地实际操作电脑B一样了。

原理:

个人认为,以上关键步骤中的那个脚本(那个脚本是个循环试探,其实可以在电脑B上通过命令行query session得到在线的准确的会话,然后运行那个命令得到准确的session切换)中有个应用程序tscon,其相应的语法用法可以参考这里。其实QQ远程协助也是用到了windows底层的RDP协议。从电脑A通过远程桌面通过QQ
B申请QQ A远程协助,此时被控电脑B有两个session,即一个QQ远程协助的另外一个windows远程桌面的。此时运行tscon是将session切换到QQ桌面的那个session。而这个session就是被控那台电脑的。因此gpu opengl啥驱动之类的就以为是本地执行的。因此才得以成功。

其实这也是个人猜测而已啦,实际上什么原理也还不清楚呢。能解决这个问题就好。也希望懂的童鞋给予解释下。另外有同学指出一些团队协助类的软件也能支持,没试过不清楚。

[转]如何远程连接运行OpenGL/Cuda 等GPU程序的更多相关文章

  1. windows下使用xShell远程连接virtualbox里面的linux

    第一阶段:基本安装 安装virtual box 在virtualbox里面安装xubuntu:是ubuntu+xfce桌面环境的一个linux的发行版本 在windows下安装Xmanager Ent ...

  2. UnifyRemoteManager-多国语言绿色版v1.3-20200315,统一远程连接自动登录软件,欢迎测试

    UnifyRemoteManager-多国语言绿色版v1.3-20200315,统一远程连接自动登录软件,欢迎测试 下载参考: 百度网盘:https://pan.baidu.com/s/15g-oXT ...

  3. Oracle-本地连接没问题,远程连接有问题解决方式

    1. 问题 我的环境是oracle11gr2,本地用plsql还是toad连接都没有不论什么问题,而用别的机器远程连接就提示 无监听程序等错误. 2. 原因 oracle安装路径  --- 比如: F ...

  4. Docker运行MongoDB及Redis及ssh端口映射远程连接

    Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...

  5. 运行MySQL远程连接

    方法一:修改MySQL自带的“mysql”数据库中的“USER”表 USE mysql; UPDATE USER SET HOST='%' WHERE USER='root'; SELECT * FR ...

  6. Windows下pycharm远程连接服务器调试-tensorflow无法加载问题

    最近打算在win系统下使用pycharm开发程序,并远程连接服务器调试程序,其中在import tensorflow时报错如图所示(在远程服务器中执行程序正常): 直观错误为: ImportError ...

  7. Windows远程连接Linux

    目录 xrdp方式 vnc方式 xrdp方式 ----------------------------------------------------------------------------- ...

  8. 虚拟机主机能互相ping通,但是无法远程连接

    首先将虚拟机关机,找到Edit virtual machine Settings(编辑虚拟机设置)

  9. 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

    注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...

随机推荐

  1. Ubuntu 16.04 构建 Headless VNC 服务器

    终于放弃 Vino 了, 稳定性太低了. 而且,拔了显示器之后,总出现分辨率不对的问题. 于是,构建了一个 xfce4 + tightvnc 的 解决方案. 1) 把Vino相关的自启动都关了. (v ...

  2. Polygenic score

    We estimate the maximum prediction accuracy for the risk of Alzheimer's disease based on disease pre ...

  3. Java基础加强总结(一)——注解(Annotation)

    一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...

  4. ORM--Object Relational Mapping

    ORM 对象关系映射   Object Relational Mapping, 简称ORM,或O/RM,或O/R mapping 一种程序技术 用于实现面向对象编程语言里       不同类型系统   ...

  5. linux文件管理之proc文件系统

    proc 文件系统 ==================================================================================== Linux ...

  6. BAT 大规模Hadoop集群实践

    百度高级架构师马如悦:我的Hadoop 2.0 http://www.csdn.net/article/2011-04-28/296869 腾讯大规模Hadoop集群实践 腾讯 hadoop 基线版本 ...

  7. vue生命周期 钩子函数

    首先,1.x和2.x的生命周期钩子对比: 钩子函数的树状图,红色的是我们可以利用的函数,绿色的是函数解析,蓝色的是函数执行时机 <!DOCTYPE html> <html> & ...

  8. php的符号的排序大小

  9. js 遍历

    for循环 var a = new Array("first", "second", "third") for(var i = 0;i &l ...

  10. Java中获得当前静态类的类名

    通常在打印日志的时候需要输出类名,普通类可以用this.getClass(),但是静态类没有this,直接写类名耦合度高. 参考了: https://stackoverflow.com/questio ...