发现一篇神文,解决了困扰许久的远程桌面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. Getting started with Processing 第十一章——数组

    Getting started with Processing 第十一章——数组 从变量到数组: 使用数组,无需为每一个变量创建一个新的名称/这让代码变得更短,更容易理解,更方便更新. 创建数组的三个 ...

  2. 带参数EXE

    有时候我们需要让软件带参数运行,使用参数控制软件的部分行为, C#默认窗口应用是不带参数的,不过在Main函数的参数手动加上就可以得到参数了. 举例如下: /// <summary> // ...

  3. English trip M1 - AC11 May I Help You? 我能帮到你吗? Teacher:Lamb

    In this lesson you will learn to ask for things in shops  在本课程中,您将学习如何在商店中寻找东西 课上内容(Lesson) How are ...

  4. numpy---one

    import numpy as np #创建数组(给array函数传递Python序列对象) a = np.array([1,2,3,4,5]) b = np.array((1,2,3,4,5,6)) ...

  5. php 常用函数总结

    1. is_numeric() // 判断变量是不是数字或者数字字符串 2. array_column() // 获取某一列 3. array_search() // array_search(val ...

  6. loj#528. 「LibreOJ β Round #4」求和

    求:\(\sum_{i=1}^n\sum_{j=1}^m\mu(gcd(i,j))^2\) 化简可得\(\sum_{i=1}^{min(n,m)}{\lfloor \frac{n}{i} \rfloo ...

  7. 6月13 ThinkPHP框架基础

    ThinkPHP 一.php框架基础介绍 真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维 ...

  8. node模块之path——path.join和path.resolve的区别

    1.path.join([...paths]) path.join() 方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径. 长度为零的 path 片段会被忽略. 如果 ...

  9. jetty 插件启动指定端口号

    clean jetty:run -Djetty.port=端口号

  10. python-day73--django-分页

    ''' 批量导入数据:bulk_create Booklist=[] for i in range(100): Booklist.append(Book(title="book"+ ...