《树莓派4B家庭服务器搭建指南》第二十一期:安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制

news2024/11/25 12:56:08

title: 《树莓派4B家庭服务器搭建指南》第二十一期:安装开源远程桌面服务rustdesk, 内网丝滑,外网流畅控制Windows,macOS,Linux设备
tags:

  • 个人成长
    categories:
  • 树莓派不吃灰

前段时间, 有一台老式MacBook Pro被我改造成了影视资源解码主机, 《树莓派4B家庭服务器搭建指南》第十七期:树莓派配合性能更好的闲置笔记本搭建开源免费jellyfin私人影院 https://v2fy.com/p/2023-06-10-jellyfin-1686388142000/ , 我想通过远程桌面访问这台MacBook Pro, 发现Mac虽然原生支持VNC连接,但实际用起来经常画面撕裂,于是我找了一款开源的远程桌面程序rustdesk, 将其服务部署在树莓派上,实现局域网设备丝滑访问, 外网设备也可以通过内网穿透直接访问macOS

rustdesk 的Github开源地址 https://github.com/rustdesk/rustdesk

在树莓派部署rustdesk,实现局域网Windows控制macOS

# 创建挂载目录
mkdir -p /opt/rustdesk
chmod 755 -R /opt/rustdesk
# 创建用于存放docker-compose.yml的目录
mkdir -p /opt/rustdesk-docker-compose-yml
chmod 755 -R /opt/rustdesk-docker-compose-yml
# 创建docker-compose.yml
touch /opt/rustdesk-docker-compose-yml/docker-compose.yml 

docker-compose.yml中写入配置内容

cat << 'EOF' > /opt/rustdesk-docker-compose-yml/docker-compose.yml
version: '3'

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r rustdesk.example.com:21117
    volumes:
      - /opt/rustdesk:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - /opt/rustdesk:/root
    networks:
      - rustdesk-net
    restart: unless-stopped
EOF
  • 启动服务
cd /opt/rustdesk-docker-compose-yml/
sudo docker-compose up -d

image-20230912100942170

我的树莓派局域网IP为192.168.50.10, 将192.168.50.10 填入rustdesk 的客户端即可(发起端和被控端都需要下载安装rustdesk客户端,并填写好ID Server), rustdesk客户端下载地址 https://github.com/rustdesk/rustdesk/releases

image-20230912101426079

客户端保存后,会显示配置成功

image-20230912101459339

配置完成后,我们就可以通过树莓派运行的rustdesk服务,进行局域网内设备相互远程控制了

image-20230912102038004

被控制主机的ID不会变(除非用户主动改),但密码经常会随机变化,如果你想使用固定密码,可以直接按照下图进行设置

image-20230912102601840

image-20230912102727070

显示方面可以自定义设置,局域网的延迟可以到5ms, 用Windows控制macOS非常顺滑跟手

image-20230912103259426

遇到的一个小坑:如果MacBook不外接显示器合上盖子,rustdesk经常会几十秒就自动断开,如果你也是想控制MacBook,请不要合上盖子。

让家里树莓派的rustdesk服务支持外网访问

外网访问其实也很简单,用frp做几个端口映射就好了

image-20230912111138990

  • 在树莓派的frpc.ini文件中新增以下配置,重启frpc即可
[rustdesk-tcp-21115]
type = tcp
local_ip = 127.0.0.1
local_port = 21115
remote_port = 21115


[rustdesk-tcp-21116]
type = tcp
local_ip = 127.0.0.1
local_port = 21116
remote_port = 21116


[rustdesk-udp-21116]
type = udp
local_ip = 127.0.0.1
local_port = 21116
remote_port = 21116


[rustdesk-tcp-21117]
type = tcp
local_ip = 127.0.0.1
local_port = 21117
remote_port = 21117


[rustdesk-tcp-21118]
type = tcp
local_ip = 127.0.0.1
local_port = 21118
remote_port = 21118


[rustdesk-tcp-21119]
type = tcp
local_ip = 127.0.0.1
local_port = 21119
remote_port = 21119

如果想让内网主机A可以接收外网连接,我们需要将内网主机A的ID server设置为云服务器IP(云服务器的IP为公网IP, 会接收请求,并转发到树莓派)

当然,外网发起控制的主机,也要设置外网IP, 才能发起控制。

image-20230912135153485

如果发起控制端在家庭内网环境下,可以将ID server 设置为树莓派内网IP,也可以设置为云服务器公网IP

直接将rustdesk服务放到服务器运行不就好了,为何要放在树莓派运行?

rustdesk有两个服务,hbbs负责验证签名,hbbr负责转发远程控制产生的数据包。

170487506-8ef1f025-ad42-47f9-8d82-b49d0ec759ad

我们在设置界面,只填写了hbbs信息(ID server) ,没有填写hbbr信息,hbbr就会自动判断是否走公网流量。

如果我们的被控主机发起控制的主机都在内网,二者就会直接走内网流量,体验将无比丝滑。

当然控制端或被控端,一旦离开了内网,就走云服务器转发流量。

image-20230912141949102

那ID server到底应该怎么填

只要在外网,控制端和被控制端,一律填写外网IP!

如果在内网,控制端和被控端,依然可以全部填写外网IP;(如果被控端和控制端设备同时在内网,会自动走内网流量,无比顺滑)

如果某台设备,只希望被内网的设备连接,则填写内网IP!

(内网IP是指树莓派IP, 外网IP是指云服务器IP)

小结

我看到有些youtuber把mac mini改成了家庭服务器,由于macOS对VNC协议的负优化,导致画面撕裂,于是只能捏着鼻子用ssh连接服务器,但我感觉放弃macOS顺滑的动画太可惜了, 于是就有了树莓派运行开源rustdesk的方案。

虽然有Teamviewer , ToDesk , 向日葵等方案,但都无法实现内网丝滑流畅的远程桌面体验。

这个树莓派rustdesk方案保证了远程桌面内网丝滑,外网流畅,即使没有树莓派,也可以通过虚拟机运行rustdesk服务器实现,让老旧的MacBook焕发流光溢彩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老师怎样发布查询

作为一名老师&#xff0c;我们经常需要向家长发布各种查询&#xff0c;比如成绩查询、作业查询等。以往&#xff0c;我们可能会将查询结果整理成Excel表格&#xff0c;然后通过各种渠道发送给家长&#xff0c;这样既繁琐又不够高效。幸好&#xff0c;现在有了易查分&#xff0c…

MybatisPlus(4)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在之前我们讲解了大部分查询相关的操作&#xff0c;接下来进行增删改的学…

SpringBoot项目--电脑商城【增加/减少购物车商品数量】

1.持久层[Mapper] 1.1规划需要执行的SQL语句 1.更新该商品的数量.此SQL语句无需重复开发 update t_cart set num?,modified_user?,modified_time? where cid? 2.首先进行查询需要操作的购物车数据信息【查看该条数据是否存在】 SELECT * FROM t_cart WHERE cid?2.接口…

如何解决实时语音通讯技术的延迟问题?

实时语音通讯技术的延迟问题一直是人们关注的焦点。在实时通讯中&#xff0c;延迟会影响到通话的质量和用户体验&#xff0c;因此如何解决实时语音通讯技术的延迟问题是一个重要的挑战。本文将探讨如何解决实时语音通讯技术的延迟问题。 一、延迟的定义和分类 延迟是指从说话…

C语言和汇编到底谁更厉害呢?

今日话题&#xff0c;C语言和汇编到底谁更厉害呢&#xff1f; 有位毕业生与我分享了他的经历。在学校&#xff0c;他学习了汇编和C语言。毕业后&#xff0c;他加入了一家嵌入式企业&#xff0c;发现C语言因其可移植性、开发效率和可读性而更为通用和适用。事实证明&#xff0c;…

排序算法-----冒泡排序与选择排序

目录 前言: 冒泡排序 原理图 代码实现 分析总结 选择排序 原理图 代码实现 分析总结 前言: 今天我们就开始学习排序算法&#xff0c;排序算法也是数据结构与算法在重要组成部分之一&#xff0c;排序算法是最经典的算法知识。因为其实现代码短&#xff0c;应该广&#x…

【设计模式】桥接模式在开发中的应用

1. 概述 桥接模式是一个非常简单的设计模式&#xff0c;可能大家在开发的过程中已经使用到了这种模式而不自知。总的来说&#xff0c;桥接模式最大的作用就是解耦&#xff0c;所谓的解耦&#xff0c;就是通过转换代码的设计&#xff0c;减少类与类&#xff0c;模块与模块之间的…

监听器,过滤器,拦截器

参考博文 文章目录 作用三者区别启动顺序拦截器简要说明实现接口HandlerInterceptor自定义拦截器配置拦截器 过滤器简要说明在springboot 启动类添加该注解ServletComponentScan写个过滤器类&#xff0c;实现Filter接口 监听器简要说明如何使用自定义事件自定义过滤器接口调用…

图片怎么转换成pdf格式?几种方法轻松转换

图片怎么转换成pdf格式&#xff1f;将图片转换成PDF格式的主要原因是方便共享和存储。PDF格式可以在不同的设备和操作系统上轻松打开和查看&#xff0c;而且可以保持原始图片的质量和分辨率。如果你需要将一些图片转换成PDF格式&#xff0c;你可能会问&#xff0c;“该如何做呢…

12个最受欢迎的3D打印机械臂【开源|DIY|套件】

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 机器人手臂的用途各不相同&#xff0c;但大多数都能够执行拾取和放置任务&#xff0c;而有些则配备用于 CNC 工作、激光雕刻&#xff0c;甚至 3D 打印。 机械臂具有广泛的应用和各个领域&#xff0c;从执行精密手术和进行工…

两行代码实现Redis消息队列,简单易用

Redis列表数据类型非常适合作为消息队列使用。将新的消息插入到列表尾部&#xff0c;然后从列表头部取出消息进行处理。该方案简单易用&#xff0c;并且支持多个消费者并行处理消息。 两行核心代码即可实现消息队列&#xff0c;如下&#xff1a; // 推送消息 redisTemplate.o…

Java中级编程大师班<第一篇:初识数据结构与算法-数组(2)>

数组&#xff08;Array&#xff09; 数组是计算机编程中最基本的数据结构之一。它是一个有序的元素集合&#xff0c;每个元素都可以通过索引进行访问。本文将详细介绍数组的特性、用法和注意事项。 数组的基本特性 数组具有以下基本特性&#xff1a; 有序性&#xff1a; 数…

初探词法分析实验

本次实验使用C对编译过程中的分词进行初步探究&#xff0c;以下是实验代码&#xff0c;输入文件需要在main函数中自己填写文本所在地址 #include <iostream> #include <stdlib.h> #include <stdio.h> #include<string> #define M 20 using namespace…

核心实验15_端口安全_ENSP

项目场景&#xff1a; 核心实验15_端口安全_ENSP 可指定该接口下最多接入几个设备&#xff08;通过mac绑定实现&#xff09;&#xff0c;人为增加设备时可设置接口自动down掉等&#xff0c;详见补充 实搭拓扑图&#xff1a; 具体操作&#xff1a; sw1: [Huawei]int g0/0/1 [H…

编辑视频无需第三方软件,在iPhone上也可以轻松编辑视频

如果你学会了如何在iPhone上编辑视频,你可以在很大程度上把匆忙拍摄的视频变成适合好莱坞的视频。好吧,也许这有点夸张了,但至少,你可以通过使用照片应用程序中的编辑工具,让你的视频看起来更令人印象深刻。 虽然它不一定能与最好的视频编辑软件相匹配,但它仍然非常适合…

MySQL 8.0 新密码策略的细节补充

前情提要 MySQL 8.0 截⽌到⽬前已经发布到了 8.0.34 版本&#xff0c;经过一系列的版本更新&#xff0c;对于密码方面也做了较多的加强⼯作&#xff0c;这⾥我们不再过多介绍 MySQL 8.0 对于密码功能的加强&#xff0c;相关的介绍可以移步先前公众号的⽂章&#xff0c;这⾥给到…

Pytorch 多卡并行(3)—— 使用 DDP 加速 minGPT 训练

前文 并行原理简介和 DDP 并行实践 和 使用 torchrun 进行容错处理 在简单的随机数据上演示了使用 DDP 并行加速训练的方法&#xff0c;本文考虑一个更加复杂的 GPT 类模型&#xff0c;说明如何进行 DDP 并行实战MinGPT 是 GPT 模型的一个流行的开源 PyTorch 复现项目&#xff…

paddleocr关闭log日志打印输出

问题背景 问题分析 可以看到paddleocr输出logging主要有两种&#xff0c;DEBUG和WARNING&#xff0c;因此关闭这两种打印日志即可。 解决方法 import logginglogging.disable(logging.DEBUG) # 关闭DEBUG日志的打印 logging.disable(logging.WARNING) # 关闭WARNING日志的…

Python二分查找详解

在计算机科学中&#xff0c;二分查找算法&#xff08;英语&#xff1a;binary search algorithm&#xff09;&#xff0c;也称折半搜索算法&#xff08;英语&#xff1a;half-interval search algorithm&#xff09;、对数搜索算法&#xff08;英语&#xff1a;logarithmic sea…

Pyinstaller打包EXE时添加版本信息、作者信息并在运行时读取外部配置文件

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…