20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件
20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件
2023/11/14 14:11
手机:Realme Q
笔记本电脑:HP
https://item.jd.com/100012583174.html
惠普(HP)战66 三代AMD版 14英寸轻薄笔记本电脑(锐龙7nm 六核 R5-4500U 8G 256G 一年上门+意外 2年电池)



百度:ubuntu BT蓝牙扫描 传输
https://download.csdn.net/blog/column/10505902/125683989
Ubuntu蓝牙Bluetooth命令行连接发送文件完整流程


1.确保bluez已安装好
$sudo apt install bluez
2.查看当前蓝牙阻塞状态
$sudo rfkill list
如果上面阻塞状态为yes,表示蓝牙关闭,则需要unblock打开蓝牙:
$sudo rfkill unblock bluetooth


3.执行bluetoothctl
$bluetoothctl
4.扫描其他蓝牙设备
$scan on
5.配对指定的蓝牙设备
$pair AA:AA:xxxxxx
$trust dev_address
pair 58:85:e9:2e:52:2a
trust 58:85:e9:2e:52:2a
connect 58:85:e9:2e:52:2a




6.如果没有安装bluez-tools则需要安装
$sudo apt install bluez-tools
使用bt-obex发送文件:
$bt-obex -p [remote_mac] [file]
譬如:
$bt-obex -p F0:6B:CA:A2:C4:69 ~/xxx.pdf
bt-obex -p 58:85:e9:2e:52:2a ~/readme.pdf
命令行监听接收则可以先执行命令:
$bt-obex -s [path]
譬如:
$bt-obex -s ~/Downloads


RealmeQ手机相关截图:









参考资料:
百度:bluetoothctl connect pair
https://blog.csdn.net/qq_28877125/article/details/134130625
【RP-RV1126】配置一套简单的板级配置
https://www.python100.com/html/82170.html
Bluetoothctl全解析
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ uname -r
5.15.0-88-generic
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ sudo apt install bluez
[sudo] password for rootroot:
Reading package lists... Done
Building dependency tree
Reading state information... Done
bluez is already the newest version (5.53-0ubuntu3.6).
bluez set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 102 not upgraded.
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ sudo rfkill list
0: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ bluetoothctl
Agent registered
[CHG] Device 48:B8:A6:3A:04:6D RSSI: -73
[CHG] Device 43:4C:5D:C5:0B:1F RSSI: -82
[CHG] Device 4C:E1:73:B8:8C:0F RSSI: -97
[CHG] Device 49:3C:99:18:0A:1B RSSI: -83
[CHG] Device 53:98:AF:96:B5:34 RSSI: -92
[CHG] Device 45:C9:70:CD:02:20 RSSI: -85
[CHG] Device 59:B2:26:FF:62:53 RSSI: -57
[CHG] Device 65:8F:BE:BC:26:29 RSSI: -89
[CHG] Device 98:DA:B0:07:6D:32 RSSI: -77
[NEW] Device 4E:EE:7C:E2:63:5D 4E-EE-7C-E2-63-5D
[CHG] Device 45:C9:70:CD:02:20 RSSI: -85
[CHG] Device 7A:1B:5D:D7:A2:FB RSSI: -87
[CHG] Device 52:BC:9A:84:72:0E RSSI: -93
[CHG] Device 53:98:AF:96:B5:34 RSSI: -90
[CHG] Device 49:3C:99:18:0A:1B RSSI: -88
[CHG] Device 54:28:76:FE:F0:88 RSSI: -86
[NEW] Device 6D:BB:E1:6C:93:CB 6D-BB-E1-6C-93-CB
[CHG] Device DC:F0:90:3F:BC:78 RSSI: -71
[CHG] Device 52:89:F4:C9:74:A7 RSSI: -74
[CHG] Device 52:89:F4:C9:74:A7 ManufacturerData Key: 0x004c
[CHG] Device 52:89:F4:C9:74:A7 ManufacturerData Value:
01 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 ......@.........
00 .
[CHG] Device 7A:1B:5D:D7:A2:FB RSSI: -97
[CHG] Device 90:E4:68:E2:FE:43 RSSI: -59
[CHG] Device 61:22:DF:10:F5:72 RSSI: -82
[CHG] Device 65:8F:BE:BC:26:29 RSSI: -89
[CHG] Device 24:8D:0C:DE:34:AB RSSI: -99
[CHG] Device 47:18:94:BC:80:8F RSSI: -93
[CHG] Device 4C:E1:73:B8:8C:0F RSSI: -96
[CHG] Device 5F:C0:39:33:B1:99 RSSI: -93
[CHG] Device 98:DA:B0:07:6D:32 RSSI: -72
[CHG] Device 36:7E:54:84:FD:F5 RSSI: -63
[CHG] Device 52:BC:9A:84:72:0E RSSI: -91
[CHG] Device 36:7E:54:84:FD:F5 RSSI: -61
[CHG] Device 43:72:FC:CA:8F:37 RSSI: -93
[CHG] Device 52:BC:9A:84:72:0E RSSI: -89
[CHG] Device 52:89:F4:C9:74:A7 RSSI: -79
[CHG] Device 52:89:F4:C9:74:A7 ManufacturerData Key: 0x004c
[CHG] Device 52:89:F4:C9:74:A7 ManufacturerData Value:
01 00 00 00 00 00 40 00 00 00 00 00 00 00 00 00 ......@.........
00 .
[CHG] Device 56:E8:2E:9D:A3:52 RSSI: -62
[CHG] Device 04:7F:0E:4B:F7:F4 RSSI: -83
[CHG] Device 49:3C:99:18:0A:1B RSSI: -89
[bluetooth]# pair 58:85:e9:2e:52:2a
Attempting to pair with 58:85:E9:2E:52:2A
Failed to pair: org.bluez.Error.AlreadyExists
[CHG] Device 6A:9C:5C:AC:BE:C6 RSSI: -71
[CHG] Device 78:4F:5F:A4:D0:7D RSSI: -84
[CHG] Device C8:76:25:6F:1E:36 RSSI: -75
[CHG] Device 34:5B:B4:1C:4A:48 RSSI: -95
[CHG] Device 1D:8F:FD:E3:96:99 RSSI: -64
[bluetooth]# trust 58:85:e9:2e:52:2a
Changing 58:85:E9:2E:52:2A trust succeeded
[CHG] Device 4A:92:48:B6:27:1F RSSI: -61
[CHG] Device 98:DA:B0:07:6D:32 RSSI: -70
[CHG] Device 9C:77:01:D3:8F:F2 RSSI: -80
[CHG] Device 9C:97:89:80:29:C1 RSSI: -90
[NEW] Device 42:61:52:B5:27:10 42-61-52-B5-27-10
[CHG] Device 50:58:94:C2:95:42 RSSI: -97
[CHG] Device 5B:80:5F:E4:B5:01 RSSI: -63
[CHG] Device 41:12:BF:5A:CF:50 RSSI: -90
[CHG] Device 11:4F:6E:39:E3:BE RSSI: -66
[bluetooth]# connect 58:85:e9:2e:52:2a
Attempting to connect to 58:85:e9:2e:52:2a
[CHG] Device 23:46:31:3B:23:62 RSSI: -89
[CHG] Device 66:66:11:EE:D5:FB RSSI: -88
[CHG] Device 9C:97:89:80:29:C1 RSSI: -90
[CHG] Device 1D:8F:FD:E3:96:99 RSSI: -67
[CHG] Device 5A:52:DD:82:B0:3B RSSI: -79
[CHG] Device 41:12:BF:5A:CF:50 RSSI: -86
[CHG] Device 71:A2:CF:F1:C4:35 RSSI: -87
[CHG] Device 90:E4:68:E2:FE:43 RSSI: -57
[CHG] Device 9C:97:89:80:29:C1 RSSI: -93
[CHG] Device 41:12:BF:5A:CF:50 RSSI: -85
[CHG] Device 3D:B5:F6:A6:A1:44 RSSI: -76
[CHG] Device 3D:B5:F6:A6:A1:44 ManufacturerData Key: 0x004c
[CHG] Device 3D:B5:F6:A6:A1:44 ManufacturerData Value:
13 07 02 07 77 fa 26 70 6b ....w.&pk
[CHG] Device 90:E4:68:E2:FE:43 RSSI: -56
[CHG] Device 4A:92:48:B6:27:1F RSSI: -76
[CHG] Device 9C:97:89:80:29:C1 RSSI: -94
[CHG] Device 7F:F4:25:34:0C:F8 RSSI: -75
[CHG] Device 11:4F:6E:39:E3:BE RSSI: -71
[CHG] Device 67:46:4A:79:15:04 RSSI: -93
[CHG] Device 90:E4:68:E2:FE:43 RSSI: -56
[NEW] Device 71:B0:FA:94:A7:2A 71-B0-FA-94-A7-2A
[CHG] Device 48:8B:F9:30:5F:64 RSSI: -91
[CHG] Device 5B:80:5F:E4:B5:01 RSSI: -74
[CHG] Device 4A:92:48:B6:27:1F RSSI: -76
[CHG] Device 52:23:C7:0A:67:1E RSSI: -53
[CHG] Device 5A:52:DD:82:B0:3B RSSI: -76
[CHG] Device 67:46:4A:79:15:04 RSSI: -80
[CHG] Device 11:4F:6E:39:E3:BE RSSI: -66
[CHG] Device 3D:B5:F6:A6:A1:44 RSSI: -77
[CHG] Device 52:5D:B9:9D:B6:33 RSSI: -80
[CHG] Device 5E:2C:7B:1A:25:51 RSSI: -94
[CHG] Device 5B:80:5F:E4:B5:01 RSSI: -71
[CHG] Device 41:12:BF:5A:CF:50 RSSI: -82
[CHG] Device 64:1D:CD:1E:A4:12 RSSI: -67
[CHG] Device 24:01:0E:9B:AC:56 RSSI: -68
[CHG] Device 6A:15:10:B9:3D:87 RSSI: -72
[CHG] Device 4B:F3:ED:9B:02:46 RSSI: -78
[CHG] Device 6A:15:10:B9:3D:87 RSSI: -73
[CHG] Device 36:D5:15:8A:8C:57 RSSI: -95
[CHG] Device 90:E4:68:E2:FE:43 RSSI: -55
[CHG] Device 66:66:11:EE:D5:FB RSSI: -89
[CHG] Device 3D:B5:F6:A6:A1:44 RSSI: -72
[CHG] Device 23:46:31:3B:23:62 RSSI: -86
[CHG] Device 11:4F:6E:39:E3:BE RSSI: -66
[CHG] Device 24:01:0E:9B:AC:56 RSSI: -68
[CHG] Device 5B:2B:52:0A:A7:EA RSSI: -89
[CHG] Device 1D:8F:FD:E3:96:99 RSSI: -57
[CHG] Device 58:85:E9:2E:52:2A Connected: yes
[CHG] Device 7B:3C:96:A7:E7:3D RSSI: -75
[CHG] Device E8:D1:E2:C2:F9:7D RSSI: -96
[CHG] Device 64:1D:CD:1E:A4:12 RSSI: -75
[CHG] Device 23:46:31:3B:23:62 RSSI: -85
[CHG] Device 71:A2:CF:F1:C4:35 RSSI: -88
[CHG] Device 52:5D:B9:9D:B6:33 RSSI: -71
[CHG] Device 1D:8F:FD:E3:96:99 RSSI: -57
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ sudo apt install bluez-tools
[sudo] password for rootroot:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
bluez-tools
0 upgraded, 1 newly installed, 0 to remove and 102 not upgraded.
Need to get 153 kB of archives.
After this operation, 1,048 kB of additional disk space will be used.
Get:1 http://mirrors.tuna.tsinghua.edu.cn/ubuntu focal/universe amd64 bluez-tools amd64 2.0~20170911.0.7cb788c-2build1 [153 kB]
Fetched 153 kB in 1s (104 kB/s)
Selecting previously unselected package bluez-tools.
(Reading database ... 213456 files and directories currently installed.)
Preparing to unpack .../bluez-tools_2.0~20170911.0.7cb788c-2build1_amd64.deb ...
Unpacking bluez-tools (2.0~20170911.0.7cb788c-2build1) ...
Setting up bluez-tools (2.0~20170911.0.7cb788c-2build1) ...
Processing triggers for man-db (2.9.1-1) ...
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$ bt-obex -p 58:85:e9:2e:52:2a ~/readme.pdf
[Transfer#readme.pdf] Waiting...
[Transfer#readme.pdf] Progress: 100%
[Transfer#readme.pdf] Completed
(bt-obex:3062): GLib-CRITICAL **: 14:53:07.194: g_atomic_ref_count_dec: assertion 'g_atomic_int_get (arc) > 0' failed
rootroot@rootroot-HP-ZHAN-66-Pro-A-14-G3:~$
相关文章:
20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件
20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机:Realme Q 笔记本电脑:HP https://item.jd.com/100012583174.html 惠普(HP)战66 三代AMD版 14英寸轻薄笔记本电脑(锐龙7nm 六核…...
【0234】PgBackendStatus 记录当前postgres进程的活动状态
1. 关于PgBackendStatus 每个存活的后端进场在共享内存中维护一个PgBackendStatus结构体,显示其当前活动状态。(结构体是根据BackendId分配的,但这并不重要。) 请注意: 进场状态收集器进程不参与、甚至不访问这些结构。 每个辅助进程还在共享内存中维护一个PgBackendStatu…...
存钱虚拟计划,嘚
存钱计划—虚拟 2024年 (第一年) 1月 2月 3月 4月 5月 6 月 7月 8月 9月 10月 11月 12月 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 2025年(第二年) 1w1w*102.5% A 懒得写A代替 A A A A A A A A A A 2026年(第三年) (1w1w*10…...
基于IDEA进行Maven工程构建
Java全能学习面试指南:https://javaxiaobear.cn 1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中…...
Openssl X509 v3 AuthorityKeyIdentifier实验与逻辑分析
Openssl是X509的事实标准,目前主流OS或个别安全性要求较高的设计场景,对X509的证书链验证已经不在停留在只从数字签名校验了,也就是仅仅从公钥验签的角度,在这些场景中,往往还会校验AuthorityKeyIdentifier和SubjectKe…...
聊聊logback的MDCFilter
序 本文主要研究一下logback的MDCFilter MatchingFilter ch/qos/logback/classic/turbo/MatchingFilter.java public abstract class MatchingFilter extends TurboFilter {protected FilterReply onMatch FilterReply.NEUTRAL;protected FilterReply onMismatch FilterR…...
Windows10安装麒麟桌面V10双系统
概述 想要在Windows10操作系统中安装麒麟V10的桌面操作系统(Kylin-Desktop-V10-Professional-Release-Build1-210203-X86_64) 安装前准备 1、先搞清楚自己的电脑类型 A MBR传统bios单硬盘 B MBR 传统bios双硬盘(SSD固态硬盘机械硬盘&…...
file_put_contents锁的问题
记一次线上生产file_put_contents锁的问题 php项目,很多地方加了日志记录,方法为 function logstr($namelog,$str"",$type"Ymd"){$file date("$type")._.$name..log;$add __DIR__./../runtime/cuslog/.date("Ym&q…...
工作中积累的对K8s的就绪和存活探针的一些认识
首先,我的项目是基于 Spring Boot 2.3.5 的,并依赖 spring-boot-starter-actuator 提供的 endpoints 来实现就绪和存活探针,POM 文件如下图: 下面,再让我们来看下与该项目对应的Deployment的YAML文件,如下…...
什么是会话固定以及如何在 Node.js 中防止它
什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话? 正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用…...
代码随想录算法训练营第五十二天|300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
第九章 动态规划part13 300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数…...
使用 Hugging Face Transformer 微调 BERT
微调 BERT有助于将其语言理解能力扩展到更新的文本领域。BERT 的与众不同之处在于它能够掌握句子的上下文关系,理解每个单词相对于其邻居的含义。我们将使用 Hugging Face Transformers 训练 BERT,还将教 BERT 分析 Arxiv 的摘要并将其分类为 11 个类别之一。 为什么微调 BER…...
Vue原型对象
原型对象 prototype 称为:显示的原型属性,用法:函数.prototype,例如:Vue.prototype __proto__称为:隐式的原型属性,用户:实例.proto,例如:vm.proto 不管如何 …...
向量数据库的分类概况
保存和检索矢量数据的五种方法: 像 Pinecone 这样的纯矢量数据库 全文搜索数据库,例如 ElasticSearch 矢量库,如 Faiss、Annoy 和 Hnswlib 支持矢量的NoSQL 数据库,例如 MongoDB、Cosmos DB 和 Cassandra 支持矢量的SQL 数据库&am…...
工业镜头的类别
工业镜头的类别 按照等效焦距分为: 广角镜头 中焦距镜头 长焦距镜头 广角镜头 等效焦距小于标准镜头(等效焦距为50mm)的镜头。特点是最小工作距离短,景深大,视角大。常常表现为桶形畸变。 中焦距镜头 焦距介于广角镜…...
实验11 SQL互联网业务查询-2
这就是SQL题带给我的自信😕 可能发题解到博客上,主要是写完一遍实在不想看第二遍,太长了,优化都不想优化,看着头疼。 技术栈 – WhiteNights Site 一 USE mydata; #请在此处添加实现代码 ########## Begin #######…...
C++知识点梳理:C++ templates
c模板包括:类模板、类(非模板类和模板类)方法模板、函数模板、别名模板、变量模板。 类模板模板参数列表说明: 1)类定义 仅模板参数列表声明,template<>行。 类名后无需参数说明<>。 2…...
uniapp form表单提交事件手动调用
背景: UI把提交的按钮弄成了图片,之前的button不能用了。 <button form-type"submit">搜索</button> 实现: html: 通过 this.$refs.fd 获取到form的vue对象。手动调用里面的_onSubmit()方法。 methods:…...
Accelerate 0.24.0文档 三:超大模型推理(内存估算、Sharded checkpoints、bitsandbytes量化、分布式推理)
文章目录 一、内存估算1.1 Gradio Demos1.2 The Command 二、使用Accelerate加载超大模型2.1 模型加载的常规流程2.2 加载空模型2.3 分片检查点(Sharded checkpoints)2.4 示例:使用Accelerate推理GPT2-1.5B2.5 device_map 三、bitsandbytes量…...
HackTheBox-Starting Point--Tier 2---Markup
文章目录 一 Markup测试过程1.1 打点1.2 权限获取1.3 权限升级 二 题目 一 Markup测试过程 1.1 打点 1.端口扫描 nmap -A -Pn -sC 10.129.95.1922.访问web网站,登录口爆破发现存在弱口令admin:password 3.抓包,发现请求体是XML格式 4.尝试使…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...
