2024年3月

更新PVE UI带CPU 功率

command 1:

(curl -Lf -o /tmp/temp.sh https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh || curl -Lf -o /tmp/temp.sh https://ghproxy.com/https://raw.githubusercontent.com/a904055262/PVE-manager-status/main/showtempcpufreq.sh) && chmod +x /tmp/temp.sh && /tmp/temp.sh remod


command 2:

apt update ; apt install linux-cpupower && modprobe msr && echo msr > /etc/modules-load.d/turbostat-msr.conf && chmod +s /usr/sbin/turbostat && echo 成功!

定时关机

nano /etc/crontab

2024-03-25T05:56:33.png

加入自定义task

55 23 * * * root /sbin/shutdown -h now # pm 11.55 关机

如何快速实现一键锁屏?

正常情况下,当我们要暂时离开电脑时,可以通过快捷键“Windows+L”实现锁屏。

但是,在进行远程操作的时候,要想将远程被控制的电脑锁屏不方便,此时可以在远程电脑上写一个bat脚本来实现。

@REM 锁屏,相当于Win+L,远程控制时较有用

rundll32.exe user32.dll LockWorkStation

然后创建快捷方式,添加文件处加入上面代码,
2024-03-20T07:03:33.png
给一个快捷键,当你按下快捷键的时候屏幕会一键锁屏
2024-03-20T07:04:16.png
或者

start  C:\Windows\System32\rundll32.exe user32.dll LockWorkStation

将以上代码复制到一个.txt文件里,然后将.txt后缀改后为.bat后,双击就可以实现一键锁屏了。

致谢:轻松实现双击一键锁屏 - BAT 代码,代替Win+L

20210502153352830.png

接线

红-------------------------VCC
棕色----------------------GND
橙色----------------------信号线

原理

舵机的控制信号为周期是20ms (10bit 50hz) 的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0—180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。

控制电路板接受来自信号线相应的PWM控制信号,进而控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

舵机的控制需要MCU产生一个周期为20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机转动的角度
20210502154617563.png

代码

在Arduino中,可以使用servo库实现控制舵机控制。您可以在Arduino的lib管理器中搜索servo安装。

#include <Servo.h>
 ​
 Servo myservo;  // 创建舵机对象来控制舵机
 // 大多数板子上可以创建12个舵机对象
 ​
 int pos = 0;    // pos变量用于存储舵机位置
 int speed = 15; // speed变量用于控制舵机转动的速度,单位ms
 int pin = 9;    // pin变量用于选择控制舵机的引脚 只能使用pwm引脚 
 // Arduino UNO中,pwm引脚是3、5、6、9、10和11
 ​
 void setup() 
 {
   myservo.attach(pin,500,2500);  // 将舵机连接到9号引脚的舵机对象,最小脉宽500us,最大脉宽2500us,(50hz)
 }
 ​
 void loop() {
   for (pos = 0; pos <= 180; pos += 1) // 从0度逐渐转动到180度 每次正方向转动1度
   { 
     myservo.write(pos);              // 告诉舵机转到变量'pos'所表示的位置
     delay(speed);                       // 等待15毫秒,让舵机到达目标位置
   }
   for (pos = 180; pos >= 0; pos -= 1)// 从0度逐渐转动到180度 每次负方向转动1度
   {
     myservo.write(pos);              
     delay(speed);                     
   }
 }

一、内网穿透简介

互联网上两个不同的主机进行通信首先需要知道对方 IP。根据 IP 协议,只有分配了公网IP的设备才能在互联网上通信和传输数据。而中国人口/设备众多,分配到的IPv4资源又少,因此绝大部分情况是通过路由器/交换机转换公网IP后才上网。

位于路由器/交换机后的设备一般是内网设备,分配的IP地址以 192.168/172.16/10.0 开头,属于内网 IP。要让内网设备对外提供服务,就需要进行内网穿透。

常见穿透工具包括:FRP, ZeroTier 等,本文仅介绍 FRP 的使用。

二、FRP 简介

FRP(Fast Reverse Proxy)是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

基本原理:

在带有公网 ip 的云服务器上部署 frp 的服务端 frps
在需要穿透的内网服务器上部署 frp 的客户端 frpc
每个客户端都会有一个配置文件用于和服务器连接
公网服务器充当代理服务器,用户访问 公网ip + 端口时,公网服务器的 frps 服务会根据端口号,自动转发到对应的内网服务器上,从而访问到内网服务

三、FRP 配置及使用

两种方式:一种下载frp软件,另一种使用docker。

3.1 第一种方式:下载 FRP(推荐)
服务端和客户端使用的都是同一份文件,只是配置文件和启动文件不同。因此只需要下载一份文件,并按类型分成两份。

下载地址:https://github.com/fatedier/frp/releases

服务器上输入uname -m是 x86_64 架构,因此下载 linux_amd64 版本

通过命令行下载并解压:

wget -c https://github.com/fatedier/frp/releases/download/v0.53.2/frp_0.53.2_linux_amd64.tar.gz
tar -xvf frp_0.53.2_linux_amd64.tar.gz
mv frp_0.53.2_linux_amd64 frp

查看目录:

.
├── frpc
├── frpc.toml
├── frps
├── frps.toml
└── LICENSE

这些文件分成两部分。

客户端,也即内网的服务器,需要 frpc 和 frpc.toml
服务端,也即公网的服务器,需要 frps 和 frps.toml
剩下的是LICENSE,可以不用管
将两类文件分别打包

mkdir client server
mv frpc* client
mv frps* server

3.1.1 服务端配置
将 server 目录上传到公网服务器任意路径。如果需要自动启动,看下一节。如下编辑 frps.toml,参数见注释。

[common]
# frp监听的端口,默认是7000,可修改
bindAddr = "0.0.0.0"
bindPort = 7000

# 开启Dashboard用于管理和查看服务状态。Dashboard端口、用户名和密码,请改成更复杂的。
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123456"

# 授权码,请改成更复杂的,这个token之后在客户端会用到
auth.method = "token"
auth.token = "e10adc3949ba59abbe56e057f20f883e"

# 去除访问限速
transport.tcpMux = false

# frp日志配置
log.to = "./frps.log"
log.level = "info"
log.maxDays = 3

这里有几个参数需要根据需要手动修改:

bindPort:frp 服务端监听的端口,也即服务入口,建议修改 
auth.token:授权码,这个授权码之后在客户端还会用到 
webServer.port:监控流量页面的端口,建议修改 
webServer.user:监控流量页面的用户名 
webServer.password:监控流量页面的密码 
log.to:日志文件路径,根据需要修改 其中认证token可以用 pwgen 命令来生成,这个授权码之后在客户端还会用到。

sudo apt install pwgen -y
pwgen -s 32 1

运行服务:

./frps -c frps.toml

记得防火墙打开云服务器的7500端口和其他所有提到的端口,这些端口可以用’,'分割,在一个规则中同时打开。然后网页输入公网IP:7500,输入设置的Dashboard账户和密码,登录后即可看到 frp 的状态。

3.2.2 客户端与服务端自启动(推荐)
把 frps 添加为系统服务,这一来当系统重启时,Frps 服务会自动启动,并且不需要手动再次启动。

然后云服务端新建文件:frps.service,

cd /etc/systemd/system
sudo vim frps.service

内容如下:

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/home/user/software/frp/frps -c /home/user/software/frp/frps.toml
Restart=always
RestartSec=15s

[Install]
WantedBy=multi-user.target

设置自启动,并启动服务:

sudo systemctl enable frps  # 允许自启动
# 执行成功会提示“Created symlink /etc/systemd/system/multi-user.target.wants/frps.service → /usr/lib/systemd/system/frps.service.”
sudo systemctl start frps  # 启动客户端服务

后续如果更改了配置文件,执行下边命令重启服务:

sudo systemctl daemon-reload
sudo systemctl restart frps

查看服务状态:

sudo systemctl status frps # 查看服务状态

注:以上为云服务端配置,内网客户端也需要配置

3.3.3 客户端配置

将 client 目录上传到内网服务器,原来frpc.toml的内容删了,按照如下编辑 frpc.toml,参数见注释。

[common]
# 服务端公网IP、监听端口bind_port
serverAddr = "公网IP地址"
serverPort = 7000

webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "username"
webServer.password = "password"

# 授权码
auth.method = "token"
auth.token = "e10adc3949ba59abbe56e057f20f883e"
# 设置心跳
auth.additionalScopes = ["HeartBeats"]
# 去除访问限速
transport.tcpMux = false

# frp日志配置
log.to = "./frpc.log"
log.level = "info"
log.maxDays = 3

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2288

# name 为服务名称,下方解释:访问frp服务端的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# localIP 为中转客户端实际访问的IP
# localPort 为目标端口
# remotePort 为远程端口,记得服务端的防火墙打开这个端口

同样地,本地执行 ./frpc -c frpc.toml 即可启动客户端。

**注:frpc.toml可以改名;frpc.toml每一行内容的后面不可以加注释,否则会报错。建议使用 tmux 在后台启动服务
内网服务器一定要能够访问外网(如果是校园网,网络断开的话要重新登陆才行,否则服务也会断开)**

回到服务器的dashboard界面,找到tcp端口,可以看到2288端口已经是online状态,即绑定成功。以上所有相当于公网IP:2288对应127.0.0.1:22

3.3.4 访问内网其他服务
在上面的client端,也就是frpc.toml文件末尾添加:

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9800
remotePort = 9000

3.2 第二种方式:通过docker启动服务

使用frp软件时,在某些服务器上是二进制文件,通过sudo chmod +x frpc等指令也无法执行,那么docker可以完美解决所有问题。

3.2.1 使用方法:

过程同第一种类似。只有在./frps -c frps.toml和./frpc -c frpc.toml的时候,换成通过docker启动即可,首先安装docker:

# 安装docker
sudo apt install docker.io -y
# 创建用户组
sudo groupadd docker
# 将用户添加到 docker
sudo usermod -aG docker $USER
# 重启docker服务(生产环境慎用):
sudo systemctl restart docker
# 添加访问和执行权限:
sudo chmod a+rw /var/run/docker.sock
# 查看当前 docker 用户列表
sudo cat /etc/group | grep docker

公网的服务端:
编辑配置文件,可以放在/etc/frpc/frps.toml,内容如下:

[common]
# frp监听的端口,默认是7000,可修改
bind_port = 7000

# 开启Dashboard用于管理和查看服务状态。Dashboard端口、用户名和密码,请改成更复杂的。
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123456

# 认证token,增加安全性。请改成更复杂的,这个token之后在客户端会用到
token = e10adc3949ba59abbe56e057f20f883e
# 去掉速度限制
tcp_mux = false

# frp日志配置
log_file = ./frps.log
log_level = info
log_max_days = 3

然后启动docker:

# docker镜像:snowdreamtech/frps
# 重启:always
# 网络模式:host
# 文件映射:/your-toml-path/frps.toml:/etc/frp/frps.toml

docker run --restart=always --network host -d -v /your-toml-path/frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps

内网客户端:
编辑配置文件,可以放在/etc/frpc/frpc.toml,内容如下:

[common]
# 服务端公网ip、监听端口bind_port
server_addr = 公网IP地址
server_port = 7000

# 服务端的授权码
token = e10adc3949ba59abbe56e057f20f883e

# 去掉速度限制
tcp_mux = false

[single step web ui]
type = tcp 
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288

然后启动docker:

# docker镜像:snowdreamtech/frpc
# 重启:always
# 网络模式:host
# 文件映射:/your-toml-path/frpc.toml:/etc/frp/frpc.toml

docker run --restart=always --network host -d -v /your-toml-path/frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc

注:公网的服务端和内网的客户端区别在于:docker镜像不一致。

四、心跳设置

如不设置心跳,FRP 创建的连接可能在间隔较长时间后会断开,重新连接需刷新几次才能成功。FRP 本身提供了心跳机制来维持连接。

注:如果上边FRP自带的心跳已经满足需求,直接滑到后边域名绑定

另外,如果你依然想要使用 crontab 作为保持连接的方法,你可以按照以下步骤设置:
在服务端输入 crontab -e,添加定时任务:

* * * * * curl localhost:8080 --max-time 5  >/dev/null 2>&1

客户端 toml 文件添加相应的 heartbeat 字段:
如果用github下载的软件启动,添加以下字段:

[[proxies]]
name = "heartbeat"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080

如果用docker启动,添加以下字段:

[heartbeat]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080

如果未生效或者担心心跳是否设置成功,可以查看cron日志:

# 如果要查看crontab日志,需要将服务端的指令修改为:
* * * * * curl localhost:8080 --max-time 5 > /var/log/cron 2>&1
# 修改好后需要2min后生效,这时候可以输入下面这行使cron立即生效
sudo service cron restart
# 输入下面的指令查看日志
sudo tail -f /var/log/cron

**注:
将/var/log下的cron文件权限改成可写,chmod 777 /var/log/cron 即可。
将云服务端的8080端口打开**

请注意,使用 crontab 的方法并不是最优的解决方案,因为它可能会给服务器带来不必要的负担,尤其是当服务不需要这么频繁的心跳检测时。优先考虑使用 FRP 自带的心跳机制。如果你认为 FRP 的心跳机制不足以维持连接,再考虑使用 crontab。

五、域名绑定

使用备案好的域名访问使用FRP进行内网穿透的服务,你需要配置FRP服务端(frps)、客户端(frpc)以及进行域名解析。以下是各配置的示例:
FRP服务端配置,frps.toml文件最后添加下面的内容:

# HTTP和HTTPS服务监听的端口(用于域名访问的HTTP和HTTPS请求,防火墙打开这两个端口)
vhost_http_port = 80
vhost_https_port = 443

# 使用的域名(将一级域名替换yourdomain.com,就是你购买的域名)
subdomain_host = yourdomain.com

FRP客户端配置,frpc.toml文件最后添加下面的内容:

[[proxies]]
name = "domin"
# 使用http类型
type = http
localIP = "127.0.0.1"
localPort = 8080
# 自定义域名前缀,完整域名将是 service.yourdomain.com
subdomain = service

域名解析设置

登录到你的域名管理控制台。
进入DNS管理或域名解析设置页面。
添加A记录,指向FRP服务端的公网IP地址。
假设你的域名是yourdomain.com,你希望通过service.yourdomain.com来访问内网服务,那么你需要添加如下的解析记录:

记录类型:A
主机记录:service
解析线路:默认
记录值:your_public_ip(FRP服务端的公网IP)
TTL(生存时间):根据需要设置,通常是默认值或最短值
完成以上配置后,你需要重启FRP服务端和客户端以应用新的配置。在FRP服务端和客户端成功启动并连接后,你应该可以通过域名service.yourdomain.com来访问你的内网服务。

请确保服务器的防火墙或云服务器的安全组设置允许外部访问上述配置的端口,特别是HTTP和HTTPS端口(80和443)。同时,记得检查内网服务的防火墙设置,确保FRP客户端能够访问到内网服务的端口。

注:域名解析可能需要一些时间才能生效,这取决于DNS提供商和TTL设置。一旦DNS解析生效,且FRP配置正确无误,你就可以通过你的域名来访问内网服务了。笔者刚设置完上边的frps,frpc以及域名解析,访问不了,去食堂吃个饭回来就可以访问了,大概十几分钟。

现在既可以通过IP+Port访问,也可以通过域名访问,快去爽吧。

六、域名备案的一些知识点

哪里买的,哪里进行备案。笔者使用的是阿里的域名和云
备案是国内对网络(网站)的一种管理机制。其实就是向有关部门提交一下域名使用人员活公司的实名信息。比如说这个域名主要是用来做什么的,然后负责人的联系方式是什么。只有备案了的域名才能被正常的DNS解析,也就是只有备案的域名才能被正常的访问。如果你的DNS解析服务器在国外,那么也可以不备案,但是不建议这么做。备案以后会少很多麻烦。传统的备案时间较长,可能有20-30天,现在腾讯或者阿里的小程序备案只要7个工作日基本就能搞定了。

备案流程:进入备案小程序--->填写备案信息--->云审核--->管局审核--->备案成功
有问题云这边会有工作人员call你,帮你修改好有问题的地方。

阿里云有很多新人优惠,第一次买1块钱一年。笔者买了个玩玩,买好后进行域名认证。域名认证一般官方提示需要22min(节假日也是这个时间,其实会快一点)。

填写备案域名和相关信息
网站名称:个人新站
网站服务内容:其他
备注:个人作品展示,个人信息展示
最后是人脸验证等。

提交后云那边有小姐姐帮你审核,如果有问题,会给你打电话,告诉你怎么改。这段时间记得看手机。如果没问题,他们会帮你提交到相应的管局,然后你会收到一条带验证码的短信,你需要在24h内核验链接,验证你的手机号,否则管局会驳回你的备案申请。不过驳回了也没啥事,小姐姐会帮你重新提交。如果这个没问题,应该就等管局那边审核了,几个工作日就好。等通过了会收到短信,再提示你公安部备案,如果你是个人网站或者小型网站,就不用了,因为很麻烦。

好了,就先记录这么多。

原文链接:https://blog.csdn.net/weixin_43804047/article/details/135174832

安装 Nano编辑器

要安装Nano编辑器,请按照以下步骤进行操作:

打开终端或命令行界面。

输入以下命令来安装Nano编辑器:

对于Ubuntu或Debian系统:sudo apt-get install nano
对于CentOS或Fedora系统:sudo dnf install nano
对于Mac系统(使用Homebrew):brew install nano
对于Windows系统(使用Chocolatey):choco install Nano

等待安装完成,安装过程可能需要输入管理员密码进行确认。
安装完成后,你就可以使用Nano编辑器了。只需在终端中输入“nano”,然后按回车键即可启动编辑器。