mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 13:40:45 +00:00
2.3.0:手表界面精简 + 播放器 + 鼠标重做
手表端 - 功能页从 10 个杂项精简到 7 个(屏幕/鼠标/媒体/文件/电脑/语音/电源) - 删掉:游戏封锁、待办、掷骰子、抽奖、壁纸、显示器开关、定时关机、 剪贴板历史、性能/磁盘/电量、文件夹浏览、教室限制等 - 改成显式列按钮,不再把电脑端所有功能组无脑铺到表盘 - 远程鼠标控制重做:滑动区 + 左键/滚轮/右键三按钮 滚轮点按=中键、上下滑=滚动 - 新增视频/音乐播放器(手表本地播放):进度拖动、左右滑快进退10秒、 点画面播放暂停、上一/下一、播完自动下一首 电脑端 - 新增 kill_all(结束所有进程),白名单保护系统关键进程和自身 - 新增 media_list / media_pull(播放器数据源) 安全边界:只允许媒体目录,用 relative_to 判断,防同前缀兄弟目录绕过 中转站 - known_devices 从 ID 集合改成「设备ID -> 配对码」映射 - 修复:管理员改码后关机超过 6 小时,改码会被超时清理冲掉 - 老格式 state 文件平滑升级
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
r'''第一步:给服务器加 1G swap,并调好内存参数。
|
||||
|
||||
== 为什么必须先做这个 ==
|
||||
|
||||
机器只有 **1936MB 内存,而且一个 swap 都没有**。现在用了 566MB,
|
||||
看着还有富余 —— 但 Halo 是 **Java 应用**,JVM 默认会按物理内存的
|
||||
1/4 去要堆(1936/4 ≈ 470MB),加上元空间、线程栈、直接内存,
|
||||
很容易冲到 700MB+。
|
||||
|
||||
**没有 swap 的时候,内存一紧张就是 OOM Killer 直接杀进程** ——
|
||||
表现是"博客隔一阵就自己挂了",而且 systemd 里只留一句
|
||||
`Killed process (java)`,很难查。
|
||||
|
||||
有 1G swap 就多了一层缓冲:平时不用它(性能不受影响),
|
||||
突发时才借用,扛过去就没事了。
|
||||
|
||||
== 参数怎么选 ==
|
||||
|
||||
* **大小 1G**(用户指定)
|
||||
* **swappiness=10** —— 默认是 60,意思是"内存用到 60% 就开始往
|
||||
swap 里挪"。对服务器来说这太激进了,会把常用的页换出去导致变卡。
|
||||
10 表示"只有真要撑不住时才用 swap",正合适。
|
||||
* **vfs_cache_pressure=50** —— 默认 100,让内核更愿意保留
|
||||
dentry/inode 缓存(文件操作多的时候有用)。
|
||||
* **写进 /etc/fstab** —— 不然重启就没了。
|
||||
|
||||
== 一个坑 ==
|
||||
|
||||
`swapon` 之后再 `free -m` 才看得到。而且**如果 fstab 写错,
|
||||
系统可能起不来**(fstab 里有不存在的设备会进 emergency mode)。
|
||||
所以写完要用 `mount -a` 试一遍,能过才算数。
|
||||
'''
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
sys.path.insert(0, str(ROOT / "_build"))
|
||||
from lssh import run # noqa: E402
|
||||
|
||||
REMOTE = r'''
|
||||
set -e
|
||||
echo "==== 加之前 ===="
|
||||
free -m | sed 's/^/ /'
|
||||
echo
|
||||
|
||||
if swapon --show 2>/dev/null | grep -q .; then
|
||||
echo " 已经有 swap 了,跳过创建:"
|
||||
swapon --show | sed 's/^/ /'
|
||||
else
|
||||
echo "==== 创建 1G swap 文件 ===="
|
||||
# fallocate 比 dd 快得多,而且是稀疏分配 —— 但**有些文件系统
|
||||
# (比如 btrfs / 某些 overlay)上 fallocate 出来的文件不能当 swap**,
|
||||
# 所以先试 fallocate,失败就退回 dd。
|
||||
if ! sudo fallocate -l 1G /swapfile 2>/dev/null; then
|
||||
echo " fallocate 不行,改用 dd(慢一点但通用)"
|
||||
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024 status=none
|
||||
fi
|
||||
sudo chmod 600 /swapfile
|
||||
sudo mkswap /swapfile >/dev/null
|
||||
sudo swapon /swapfile
|
||||
echo " ✓ 已启用"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "==== 写进 /etc/fstab(重启后自动挂)===="
|
||||
if grep -qE '^\s*/swapfile\s' /etc/fstab; then
|
||||
echo " fstab 里已经有了"
|
||||
else
|
||||
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab >/dev/null
|
||||
echo " ✓ 已写入"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "==== 调内核参数 ===="
|
||||
sudo tee /etc/sysctl.d/99-ykxmz-swap.conf >/dev/null <<'EOF'
|
||||
# swap 调优(配合 halo 博客)
|
||||
#
|
||||
# swappiness 默认 60 太激进 —— 内存用到 60% 就往 swap 挪,
|
||||
# 会把常用页换出去导致变卡。10 = 只有真要撑不住时才用。
|
||||
vm.swappiness = 10
|
||||
# 默认 100,改成 50 让内核更愿意保留文件缓存
|
||||
vm.vfs_cache_pressure = 50
|
||||
EOF
|
||||
sudo sysctl -p /etc/sysctl.d/99-ykxmz-swap.conf | sed 's/^/ /'
|
||||
|
||||
echo
|
||||
echo "==== 校验 fstab(写错会导致开不了机!)===="
|
||||
if sudo mount -a 2>&1 | grep -q .; then
|
||||
echo " ⚠ fstab 有问题:"
|
||||
sudo mount -a 2>&1 | sed 's/^/ /'
|
||||
else
|
||||
echo " ✓ fstab 没问题(mount -a 无报错)"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "==== 加之后 ===="
|
||||
free -m | sed 's/^/ /'
|
||||
echo
|
||||
echo " --- swap 详情 ---"
|
||||
swapon --show | sed 's/^/ /'
|
||||
echo " --- 当前参数 ---"
|
||||
printf ' swappiness = %s\n' "$(cat /proc/sys/vm/swappiness)"
|
||||
printf ' vfs_cache_pressure = %s\n' "$(cat /proc/sys/vm/vfs_cache_pressure)"
|
||||
'''
|
||||
|
||||
|
||||
def main() -> int:
|
||||
print("=" * 62)
|
||||
print(" 第一步:加 1G swap")
|
||||
print("=" * 62)
|
||||
print()
|
||||
out = run(REMOTE, timeout=400, quiet=True)
|
||||
print(out[1] if isinstance(out, tuple) else out)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user