分类 Linux 下的文章

前段时间我去爬山,回来写了文章:朱雀国家森林公园痛苦一日游
上传图片的时候发现当前时代的浏览器并不支持浏览HEIF格式的图片,但是这一标准在苹果和许多较新安卓设备上都已经开始推广,并且压缩率不错,所以能不能想办法让浏览器显示HEIF格式的图片呢?

找到所需开源项目:

hoppergee/heic-to Convert HEIC/HEIF images to JPEG, PNG in browser
我的需求显然早就有人在做了,这个项目利用javascript提供了一个在前端将HEIF格式图片转换成jpeg/png的方案。

引用heic-to

工作原理:

  1. 自动检测所有带有.heic或.HEIC扩展名的图片
  2. 使用fetch API获取原始HEIC文件
  3. 在浏览器中转换为JPEG格式
  4. 替换图片的src属性显示转换后的图片
<script type="module">
// 导入CSP安全版本的HEIC转换模块 需要支持ES6特性
import { heicTo } from 'https://cdn.jsdelivr.net/npm/[email protected]/dist/csp/heic-to.js';

document.addEventListener('DOMContentLoaded', async function() {
    // 检查浏览器是否支持所需API
    if (!window.fetch || !window.URL || !window.Blob) {
        console.warn('浏览器不支持HEIC转换所需API');
        return;
    }
    
    // 处理HEIC图片转换
    async function processHEICImages() {
        const images = document.querySelectorAll('img[src$=".heic"], img[src$=".HEIC"]');
        if (images.length === 0) return;
        
        console.log(`找到 ${images.length} 张HEIC图片,开始转换...`);
        
        for (const img of images) {
            const src = img.src;
            const originalAlt = img.alt || '';
            const originalClass = img.className;
            
            try {
                // 添加加载状态
                img.alt = 'HEIC图片转换中...';
                img.classList.add('heic-loading');
                
                // 获取HEIC文件
                const response = await fetch(src);
                if (!response.ok) throw new Error(`HTTP错误! 状态码: ${response.status}`);
                
                const blob = await response.blob();
                
                // 转换为JPEG
                const jpegBlob = await heicTo({
                    blob: blob,
                    type: "image/jpeg",
                    quality: 0.8
                });
                
                // 创建对象URL并替换
                const jpegUrl = URL.createObjectURL(jpegBlob);
                img.onload = function() {
                    URL.revokeObjectURL(jpegUrl); // 释放内存
                    img.classList.remove('heic-loading');
                    img.classList.add('heic-converted');
                };
                img.src = jpegUrl;
                img.alt = originalAlt;
                img.className = originalClass;

            } catch (err) {
                console.error('HEIC转换失败:', err);
                img.alt = originalAlt + ' [HEIC转换失败]';
                img.classList.remove('heic-loading');
                img.classList.add('heic-error');
            }
        }
    }
    
    await processHEICImages();
});
</script>

<style>
.heic-loading {
    position: relative;
    min-height: 100px;
    background: #f5f5f5 url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle cx="50" cy="50" r="40" stroke="%233498db" stroke-width="8" fill="none" stroke-dasharray="62.8 188.8"><animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform></circle></svg>') no-repeat center;
    background-size: 50px;
}
.heic-converted {
    border: 2px solid #2ecc71;
}
.heic-error {
    border: 2px dashed #e74c3c;
}
</style>

使用方法:

你可以引用上面的代码到任意html页面,通常我们把他放在header或footer里。
在Typecho上我们可以把它放在主题文件的: header.php 中

本文代码已在Github以MIT协议开源,感谢自由软件与开源社区!
DisplayMyHEIC

测试图片

测试图片1-人物
测试图片2-缆车

作者: 未知狐 时间: 2025-3-22 分类: 随手记,Linux,折腾=-=
我,人在西安,它,宕在郑州。
人已麻。
没事别动/etc/fstab ,有事也别tm动。
预计下次回家才能修,那就已经是清明节了,啊啊啊啊啊啊。

2025年4月5日更新
经过清明节至今天凌晨的抢修已彻底恢复 nas.xfox.fun和LinuxUse.site的反代。
同时,今后Frp将仅用作防失联的措施之一,不作为任何服务的主要对外访问渠道。
上述所有站永久切入HK三网优化线路,不再使用第三方反代业务。

顺带一提,修复排查的时候用了DeepSeek R1 和V3 但是发现回答会受到输入的错误配置文件的干扰使其产生幻觉。
所以我建议如果你想偷懒,最好让AI重新写配置文件而不是输入可能存在问题的配置信息让他修改。
Momo5418
2025年4月5日21:39
在学校配置家里软路由的nginx搞得端口占用了,访问后台直接403,本打算回家弄,结果回到家它自己好了。

回复
未知狐未知狐
2025年4月5日22:57
我猜是nginx启动了占用了80/443又没有配置对后台管理Web服务反代 导致无法访问,回家的时候nginx又因为没有设置Systemd保活 down了,于是乎后台又能正常访问了。

回复
GoodBoyboyGoodBoyboy
2025年3月23日17:03
这些高风险操作我向来是不敢远程弄的,怕一个reboot后就再也连不上ssh了😂

回复
未知狐未知狐
2025年3月23日19:02
我还是大意了,无所谓了,暂时也不用往NAS上放什么东西,等有空回家了再修,我已经远程关电了。

回复
EricQwQEricQwQ
2025年3月28日0:09
emmm遠程開機也救不了嗎

回复
未知狐未知狐
2025年3月29日16:13
会挂载不上盘,直接卡在开机过程。索性直接远程拔电了。

https://web.archive.org/web/20250416075550/https://xfox.fun/archives/2088/ 恢复
作者: 未知狐 时间: 2025-3-22 分类: 随手记,Linux,时间轴,折腾=-=
购买新的服务器后,我也不打算继续续费sakurafrp了,所以反代提供公网IPv4访问的工作需要转移到Claw HK机上,同样地Mumble服务器的IPv4转发也需要迁移到Claw HK机器上。
除了博客本身直接部署,所有需要反代,转发的服务都通过WireGuard组网后虚拟局域网转发完成。

Nginx反代配置

nas.xfox.fun

# HTTPS 强制跳转配置
server {
    listen 80;
    listen [::]:80;
    server_name nas.xfox.fun;
    return 301 https://$host$request_uri;
}

# 主 HTTPS 服务配置
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nas.xfox.fun;

    # 更新后的SSL证书路径
    ssl_certificate /home/xfox/www/all_xfox.fun/fullchain.pem;
    ssl_certificate_key /home/xfox/www/all_xfox.fun/privkey.pem;

    # SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_session_tickets off;
    add_header Strict-Transport-Security "max-age=63072000" always;

    # 反向代理配置
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        proxy_redirect off;
        proxy_pass http://10.10.0.2:5212;

        # 超大文件支持 client_max_body_size 缺省单位->字节 ,k千字节,m兆字节,g千兆字节
        client_max_body_size 16g;
        proxy_request_buffering off;
        proxy_buffering off;
    }
}

Mumble IPv4转发 && 数据库与配置文件同步

我尝试使用iptables转发失败了,然后换了nftables还是失败了,懒得折腾了。
直接把Mumble服务器也迁移到Claw HK上。
后续直接写脚本同步数据库和配置文件。

Mumble数据库和配置文件
两个属于root的文件:

-rwxrwxrwx 1 root root 16K 12月16日 20:26 /etc/mumble-server.ini
-rwxrwxrwx 1 root root 1016K  3月22日 16:06 /var/lib/mumble-server/mumble-server.sqlite

接下来先把家庭服务器的Mumble服务器配置同步到ClawHK服务器

# 同步配置文件
sudo rsync -avz -e "ssh -i /home/xfox/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
  /etc/mumble-server.ini \
  [email protected]:/etc/

# 同步数据库文件
sudo rsync -avz -e "ssh -i /home/xfox/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
  /var/lib/mumble-server/mumble-server.sqlite \
  [email protected]:/var/lib/mumble-server/

启动Mumble服务器发现:
Mar 22 09:58:29 ClawHK mumble-server[50320]: 2025-03-22 09:58:29.869 Initializing settings from /etc/mumble-server.ini (basepath /etc)
Mar 22 09:58:29 ClawHK mumble-server[50320]: 2025-03-22 09:58:29.870 MetaParams: Failed to read /home/xfox/www/all_xfox.fun/fullchain.pem
看上去Mumble-server没权限读取证书。

sudo chmod +x /home/xfox /home/xfox/www /home/xfox/www/all_xfox.fun

即可。

仅有一条评论
EricQwQEricQwQ
2025年3月28日0:17
sakurafrp還是不錯的…免費版真香,主要是穩定+方便

回复

应用选型:Mailu

Mailu项目仓库

架构规划

主要设备

服务器名称硬件网络用途
境内Server AEliteDesk800G3 SSF ,G4600,2*8GB RAM无公网IP运行mailu 容器
境外Server BRackNerd VPS,1*Vcpu,768MB RAM有公网IP提供公网IPv4 地址

网络规划

考虑到方案1可能违反SakuraFrp的用户协议,暂定方案2。

方案实施风险
方案1在A上运行FRP,开出公网端口用于与B的通信;在B上运行socat转发必要端口到A,实现A-B双向通信。依赖第三方服务(如FRP)的稳定性,可能存在性能瓶颈或配置复杂性。
方案2在A、B上运行WireGuard,实现10.10.0.0/24虚拟组网。配置较为复杂,涉及跨境组网,网络波动可能导致通信失败。

- 阅读剩余部分 -

双喜临门,首先给自己找了个专业不对口的技工活干(只是和所学专业不对口,实际上我有操作相关设备的工作经验)。要先外派到西安作为学徒工学习和工作几个月,等郑州这边厂区建好了再回来继续干,工资待遇还不错,也给交五险一金。
其次是今天接到通知,新年的时候参加RWKV生态内容征集大赛写了一个自用的字幕替换小工具substitute也符合了活动基本要求,喜提参与奖。
以后出门就有帆布手提袋子用了,还有个RWKV徽章和冰箱贴。另外就是一个T恤,以后可以参加其他开源项目活动的时候穿着,也算是支持国内开源项目了。
2025-02-11T06:54:33.png

环境:Fedora41 KDE Fcitx5-rime

1.修改

确定必要的包已安装:
sudo dnf install fcitx5-qt fcitx5-gtk

2.修改微信desktop文件:

[Desktop Entry]
Name=wechat
Name[zh_CN]=微信
Exec=env GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx /usr/bin/wechat %U
#Exec= /usr/bin/wechat %U
StartupNotify=true
Terminal=false
Icon=/opt/wechat/icons/wechat.png
Type=Application
Categories=Utility;
Comment=Wechat Desktop
Comment[zh_CN]=微信桌面版

Exec= 后直接添加:
env GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx
重新启动微信即可。

本文是对计划表中:基于人工+AI的开源与自由软件和科技采集发布,旨在复刻老王叔叔的linux.cn模式 的具体实践。

确定域名

昨天晚上,我买下了一个新域名:linuxuser.site 寓意:“linux用户站
为什么是用户/User而不是“粉丝/Fans”或者“玩家”呢?
我认为“用户”一词是最普遍的,最能囊括受众群体的。

服务部署

同一时间,我在本地部署了“linux用户站”的web服务器,和本博客相同的typecho。也算是一种路径依赖吧,我已经很难接受WP那种臃肿的PHP应用,这次的部署与之前有所不同,我没有使用MySQL/MariaDB而是选择了SQLite。
现在你可以访问https://linuxuser.site 查看这个简陋的站点。

现状与未来

国内有许多人,特别是年轻人对Linux的印象还停留在:黑客之选、极客玩具、普通人用不了、必须用命令行 这样的刻板印象。
除此之外,还有许多人虽然每天在互联网上把Linux挂在嘴边,频繁浏览相关视频,频繁发布相关评论,却从不在实际生产生活中使用Linux内核和各种Linux发行版。这种人在互联网上有一个很贴切的新名词:云玩家

搭建这个站点,既是为了圆我曾经对自由软件和开源的一腔热血,也是为了做点公益,冲淡充斥互联网的低质量口水文章,给希望以及正在使用Linux发行版的朋友们指引方向。
这个站点的建设也与linux.cn停运有着不可割舍的关系,在我看来老王叔叔是一个值得敬佩的Linux传道者,linux中国的文章也一度惠及我和身边的朋友,搭建这个站点亦有复刻Linux中国复活社区的意味。也许不久的将来我们有机会重现一个新的炎黄角马。

站点的收支

目前来看,我完全有能力自己承担域名和服务器的基本运维。甚至有余力时不时发点文章或者科普,在站点规模持续扩大超出作为我的业余爱好的对应资费水平之前,我不打算给服务器添加任何广告。我也不打算把站点打造成一个盈利工具,站点的一切收入会全部投入站点运营本身。如果侥幸有所盈余,就捐给联合国儿童基金会吧。

蒸馏技术的发展以及DeepSeek多模态大模型Janus-Pro-7B,更是成为加速ChatGPT死亡的最后一根稻草。
现在我的本地模型只剩下deepseek-r1:7b (DeepSeek-R1-Distill-Qwen-7B)
原有的
llama3.2:latest a80c4f17acd5 2.0 GB 3 weeks ago
llama3.2-vision:latest 085a1fdae525 7.9 GB 4 weeks ago
已被我彻底移除。
我确信未来我的硬核灌水流程会更轻松。