vi /usr/lib/lua/luci/view/sysauth.htm
<!-- 登录前 一键网络唤醒按钮 -->
<%
-- 在这里执行唤醒命令
if luci.http.formvalue("wake") then
    luci.sys.call("/usr/bin/etherwake -D -i 'br-lan' -b 'D8:5E:D3:6A:EA:5C' > /dev/null 2>&1")
end
%>

<div style="text-align:center; margin:20px auto; max-width:320px;">
    <form method="post" style="margin:0;">
        <button 
            type="submit" 
            name="wake" 
            value="wake"
            style="
                background:#007bff; 
                color:white; 
                border:none; 
                padding:12px 24px; 
                border-radius:6px; 
                font-size:16px; 
                cursor:pointer;
                width:100%;
                font-weight:bold;
            ">
            🖥️ 一键开机(网络唤醒)
        </button>
    </form>
</div>
<br>

使用 docker compose 安装rustdesk

mkdir /etc/rustdesk && touch /etc/rustdesk/docker-compose.yml && cd /etc/rustdesk
# docker-compose.yml 内容

networks:
  rustdesk-net:
    external: false

services:
  hbbs:
    container_name: hbbs
    ports:
      - 21115:21115
      - 21118:21118
      - 21116:21116
      - 21116:21116/udp
    image: rustdesk/rustdesk-server
    command: hbbs 
    volumes:
      - /etc/rustdesk:/root
    networks:
      - rustdesk-net
    depends_on:
      - hbbr
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 64M

  hbbr:
    container_name: hbbr
    ports:
      - 21117:21117
      - 21119:21119
    image: rustdesk/rustdesk-server
    command: hbbr
    volumes:
      - /etc/rustdesk:/root
    networks:
      - rustdesk-net
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 64M

启动服务

docker-compose up -d

up:启动服务。
-d:让服务在后台运行(detached mode)。

验证服务运行情况

运行以下命令查看容器是否正常启动:

docker-compose ps

停止并移除服务

如果你不再需要运行这些服务,可以通过以下命令停止并移除容器:

docker-compose down

该命令会停止容器并删除相关的网络和容器,但不会删除数据卷。如果你想删除数据卷并完全清除环境,可以运行:

docker-compose down --volumes

下载客户端

下载rustdesk客户端,在文件名后面接上-host=<ip或者域名>,key=</etc/rustdesk/id_ed25519.pub的内容>
并试着连接即可。

其他注意事项

防火墙需要开放如下端口:

# 需要开放如下端口
# TCP(21115, 21116, 21117, 21118, 21119)
# UDP(21116)

# 对于 Ubuntu/Debian 系统,使用 ufw 命令来管理防火墙。
ufw allow 21115:21119/tcp
ufw allow 21116/udp
ufw enable


# 对于 CentOS/RHEL/Fedora 系统,使用 firewalld 命令
firewall-cmd --permanent --add-port=21115-21119/tcp
firewall-cmd --permanent --add-port=21116/udp
firewall-cmd --reload
# 查看开放端口
firewall-cmd --list-ports


# 对于 Alpine Linux 和其他系统,iptables 通常是默认工具
iptables -A INPUT -p tcp --dport 21115:21119 -j ACCEPT
iptables -A INPUT -p udp --dport 21116 -j ACCEPT
/etc/init.d/iptables save

使用 docker 安装

或者直接使用docker

sudo docker image pull rustdesk/rustdesk-server
sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v /etc/rustdesk/:/root -td  --restart=always   rustdesk/rustdesk-server hbbr
sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v /etc/rustdesk/:/root -td  --restart=always  rustdesk/rustdesk-server hbbs 

要编辑 MP3 文件的标签(如标题、艺术家、专辑等),可以使用 Python 中的 mutagen 库。mutagen 是一个处理音频元数据的库,支持 MP3、FLAC、AAC 等多种格式。

安装 mutagen

如果你还没有安装这个库,可以通过以下命令来安装:

pip install mutagen

编辑 MP3 标签的示例代码

下面是一个编辑 MP3 标签的 Python 代码示例:

from mutagen.easyid3 import EasyID3
from mutagen.id3 import ID3, TIT2, TPE1, TALB, TDRC

def edit_mp3_tags(file_path, title=None, artist=None, album=None, year=None):
    # 加载MP3文件的ID3标签
    try:
        audio = EasyID3(file_path)
    except mutagen.id3.ID3NoHeaderError:
        # 如果文件没有ID3标签,创建新的标签
        audio = mutagen.File(file_path, easy=True)
        audio.add_tags()
    
    # 编辑标签信息
    if title:
        audio['title'] = title
    if artist:
        audio['artist'] = artist
    if album:
        audio['album'] = album
    if year:
        audio['date'] = year
    
    # 保存标签
    audio.save()

# 调用示例
file_path = 'example.mp3'
edit_mp3_tags(file_path, title="新歌名", artist="新艺术家", album="新专辑", year="2024")

解释:

  • EasyID3 是一个简化的接口,可以直接通过键(如 titleartist 等)访问常见的标签。
  • 如果 MP3 文件没有 ID3 标签,代码会为它创建一个新的标签。
  • 你可以通过 edit_mp3_tags 函数修改 MP3 文件的各种元数据。

你可以根据自己的需求修改这些代码来批量处理文件或设置其他类型的标签。

打开powershell,输入:

$(New-Object -ComObject InternetExplorer.Application).Visible=$true

或者新建一个 .cmd 的 ANSI 编码文件,内容如下:

powershell -command "$(New-Object -ComObject InternetExplorer.Application).Visible=$true"

或者新建一个 .vbs 的 ANSI 编码文件,内容如下(Win11 可能已经失效):

CreateObject("InternetExplorer.Application").Visible = true

或者 打开 internet option ,program 标签页,click Manage add-ons ,Finally, click the Learn more about toolbars and extensions link on the left.

https://winaero.com/how-to-launch-internet-explorer-on-windows-11-if-you-really-need-it/
https://blog.csdn.net/chj_1224365967/article/details/130701129
https://freyagrace.cn/index.php/archives/289/

raw_headers = """Host: open.tool.hexun.com
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.3
Accept: */*
Referer: http://stock.hexun.com/gsxw/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8"""
def get_headers(header_raw):
 """
 通过原生请求头获取请求头字典
 :param header_raw: {str} 浏览器请求头
 :return: {dict} headers
 """
 return dict(line.split(": ", 1) for line in header_raw.split("\n") if line != '')
def get_cookies(cookie_raw):
 """
 通过原生cookie获取cookie字段
 :param cookie_raw: {str} 浏览器原始cookie
 :return: {dict} cookies
 """
 return dict(line.split("=", 1) for line in cookie_raw.split("; "))