对于使用国产电脑搭载UOS系统且面临网络限制(向日葵、todesk已经被禁用)的用户来说,远程访问可能面临一些困难。

网络限制:

可以考虑内网穿透,反向代理:nps,gostc,stunnel frp  xeotier 等等。个人感觉openp2p 是最方便的,也避免了需要连接境外服务器。

系统兼容:

UOS不少软件包的版本还停留在2018年左右,但是图形界面却是基于Wayland的。老系统搭载了一个新的图形界面,这种奇葩组合导致目前的大部分方案都无法适用。

比如:

  • rustdesk,他的flutter与老的软件包不兼容。
  • gotohttp 需要xorg 支持。
  • 向日葵远程控制不支持wayland。
  • sunshine+moonlight 游戏串流,技术较新,不兼容老的软件包。
  • rdp (可修改端口避免网络限制),wayvnc  ,freerdp,realvnc 等,主控端兼容各平台的版本较少。尤其是手机端。

在折腾了一些方案没有结果以后,我脑子一热,搭上了一个半月的业余时间。

先用豆包搭个框架,提示词如下:

帮我做一款基于webrtc的UOS平台的远程控制软件。要求如下:

1、被控端软件安装在被控主机上。主控主机在浏览器打开被控端网页服务器提供的链接地址,连接被控端软件即可。受控端和主控端均处于同一局域网内,不考虑公网环境。

2、被控端软件只需要接收主控端发来的一个密码,如果密码正确的话则接受控制。

3、主控端可以通过鼠标键盘操作被控端的图形界面。

4、尽可能使用现有的软件库,但要注意兼容性,尤其是低版本的webrtc。要多输出程序运行日志,方便后续查找问题。

5、建立连接的代码要多几个备选方案,以应对各种软件不兼容情况。

6、主控端在建立连接以后,画面自动全屏,方便操控。将断开连接的按钮隐藏于屏幕上方,仅在鼠标碰触时显现。

7、被控端使用python,不能使用pyautogui,要使用xdotool。

说明:

在安装 pynput,pyautogui 的过程中,我发现他们存在一些底层的兼容性问题。需要修改系统的一些软件包。我发现UOS系统有些软件包,版本号和Ubuntu一致,但是名字里带有sign。UOS系统本就不稳定,替换包这种事是我要极力避免的。最终发现xdotool 是可用的。但是xdotool 的命令 要经过翻译才能在Wayland上运行,所以也存在点儿小问题:xdotool mousemove_relative 实际上相当于 xdotool mousemove 。这在代码中有体现。

有了框架以后,后续就是在VS code中用通义灵码不断对程序进行修改。这里分享一些AI写代码的经验。

AI写代码的经验:

1、现在的AI都喜欢宣传自己的上下文长度,但事实上这些AI最擅长的是根据用户的提示,对于输入的长上下文中的某一块儿进行重点理解。比如你问他代码中的某一块儿的作用是什么?或者代码中的某一块儿与用户的实际需求是不是不符?是不是要进行一些修改?这些他会做的很好。如果用户提出的是一些模糊问题,需要他关注全局的问题,他的能力就不够用了。而这一点在编程中是致命的。一定不能依赖与AI的全局理解能力。提问必须要问精确。

2、有些代码块,你知道那里出了问题,但是AI他自己脑海中有一些特定的习惯,或者说知识局限,他会反复打转。比如你说a是错的,他说改成b。然后你说b是错的,他说改成c。然后你说c是错的,他又改回了a。这种情况就要引导AI对于相关代码针对性的加入更多的日志。然后把日志输出结果交给AI,让他分析错误可能发生在哪里。 比如webrtc的传输过程。里面的几次握手涉及到大量细小参数。如果开发人员临时想学习的话,成本将会非常高。这是可以让AI把前后端连接建立的详细过程都输出。

3、在日志详尽的情况下可以把它先贴给豆包,让他做整体上的分析.猜测可能的出错原因在哪里?然后把这些出错的原因再贴回给通义灵码。之所以这样,是因为通义灵码的对话是有上下文环境的。所以上下文长度太长了,导致降智。

4、即便有详细的日志,可能仍有一些问题是解决不了的。这就需要开发人员对于程序的大致流程有一定的了解。可以帮忙分析一下,大概是别的相关联的模块出了问题,引导AI去解决。比如鼠标位置问题。通义灵码一直以为是主控端到被控端的屏幕坐标映射算法出错。我引导他从获取屏幕容器的大小,到容器是实际大小还是屏幕分辨率大小一步一步查找错误。 还有,鼠标卡顿的原因是命令拥塞。通义灵码一直认为是更新频率太低了。

5、另有一些情况,用户要明确告诉AI,某些地方有日志,但是程序运行的时候这些日志却没有输出。那么这些地方很有可能是有问题的。 比如刚才提到的屏幕坐标映射问题,通义灵码修改了鼠鼠标坐标映射的算法 但是它并没有应用到传输过程中。

6、AI给出的修改代码的建议,开发人员一定要审核。他会自作主张的精简部分代码。他还有自己的常用代码块,你不强调,他就把你的代码改成他的常用代码块,可能与当前系统版本不兼容。

这个远程控制代码我相信能适配大部分Linux系统,毕竟2018年的软件包都能适配。主控端是浏览器,除了手机屏幕太小,缩放不佳,其他设备均兼容。

代码在此:github

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐