分类 Linux 下的文章

前清提要:
为了方便使用,我用podman-compose 文件部署了pmail,配置如下:

#pmail-compose.yml                                             
version: '3'
services:
  pmail:
    image: ghcr.io/jinnrry/pmail:latest
    container_name: pmail
    restart: always
    ports:
      - "25:25"
      - "80:80"
      - "443:443"
      - "110:110"
      - "465:465"
      - "995:995"
      - "993:993"
    volumes:
      - "/root/podman/pmail/config:/work/config"

这样,更新pmail版本只需要执行:

podman stop  pmail
podman rm  pmail
podman rmi pmail:latest 
podman-compose -f pmail-compose.yml up -d

就能完成数据无损更新。

但是今天发现kmail无法正常连接邮件服务器,打开浏览器一检查后台,发现web后台也挂了,那肯定是后端服务出问题了。
遂SSH上线Debug。
podman logs -f pmail
发现日志疯狂刷新不带停的,Ctr+C 好几次后才停下来。报错和ssl.go等文件有关系,我不是开发者也看不明白,不过报错文件路径前有一句指向明确的英语意思是警告证书过期,这句倒是看懂了🤣。
那么接下来就是更新证书了,查看服务配置文件发现,我配置的是手动管理证书。
参见: 配置文件说明

{
    "logLevel": "",
    "domain": "linuxuser.site",
    "domains": [
        "linuxuser.site"
    ],
    "webDomain": "mail.linuxuser.site",
    "dkimPrivateKeyPath": "/work/config/dkim/dkim.priv",
    "sslType": "1",
    "SSLPrivateKeyPath": "/work/./config/ssl/private.key",
    "SSLPublicKeyPath": "/work/./config/ssl/public.crt",
    "dbDSN": "/work/config/pmail.db",
    "dbType": "sqlite",
    "httpsEnabled": 0,
    "spamFilterLevel": 1,
    "httpPort": 0,
    "httpsPort": 0,
    "weChatPushAppId": "",
    "weChatPushSecret": "",
    "weChatPushTemplateId": "",
    "weChatPushUserId": "",
    "tgBotToken": "",
    "tgChatId": "",
    "isInit": true,
    "webPushUrl": "",
    "webPushToken": ""
}

显然是当初部署的时候因为已经有服务器部署了ACME.sh更新证书所以不能用项目推荐的证书更新管理方式;这等于是又挖了个更新的坑————配置A-B服务器证书文件同步。

编写配置脚本:

首先要厘清我的服务架构,我在ClawHK服务器(也就是本博客所在的服务器)部署了ACME.sh管理证书并对其他服务器线路不佳的Web服务(RackNerd-USA)进行反代,因此证书本身是处于ClawHK上的,现在我需要把它同步到Racknerd-USA的指定路径供PMail使用。

先自己简单写出来基本操作流程,再用DeepSeek和ChatGPT进行细节润色。

#!/bin/bash
# PmailSSLSync.sh
# 本脚本应该运行在Racknerd-USA 

# 定义变量
local_private_key_path="/root/podman/pmail/config/ssl/private.key"
local_public_key_path="/root/podman/pmail/config/ssl/public.crt"
remote_private_key_path="/home/xfox/www/all_linuxuser.site/privkey.pem"
remote_public_key_path="/home/xfox/www/all_linuxuser.site/fullchain.pem"
temp_dir=$(mktemp -d /tmp/cert_sync_XXXXXX)

# 停止服务
sudo podman stop pmail

# 删除本地过期证书
sudo rm -f "$local_private_key_path" "$local_public_key_path"

# 从ClawHK同步证书文件到临时目录
sudo rsync -avz -e "ssh -i /root/.ssh/id_ed25519 -o StrictHostKeyChecking=no" \
  xfox@xfox.fun:"$remote_private_key_path" \
  xfox@xfox.fun:"$remote_public_key_path" \
  "$temp_dir/"

# 检查文件是否存在
if [ ! -f "$temp_dir/privkey.pem" ] || [ ! -f "$temp_dir/fullchain.pem" ]; then
  echo "证书同步失败!"
  sudo podman start pmail
  exit 1
fi

# 移动证书到最终位置
sudo mkdir -p "/root/podman/pmail/config/ssl"
sudo mv "$temp_dir/privkey.pem" "$local_private_key_path"
sudo mv "$temp_dir/fullchain.pem" "$local_public_key_path"
sudo chmod 600 "$local_private_key_path"
sudo chmod 644 "$local_public_key_path"

# 清理临时目录
rm -rf "$temp_dir"

# 重启服务
sudo podman start pmail

没错我是儿童(=-=)
摸鱼刷B站视频偶然看到的,当场下单两个。顺带花了14块买了充电器(经典上游渠道拆分货品配件各赚各的。)

配置:
2025-07-17T01:53:11.png
性能自然是没有的,但是作为手表貌似也足够了。
后续开发内容会同步上去。
手表支持WIFI、蓝牙、GPS可谓要素齐全。
另外确定中国电信澳门的卡也能用,但是没有拨号程序测试电话是否正常。

参考:
修正linux下wayland的chrome輸入與顯示錯誤
无法在Chrome(Wayland)中使用fcitx5
Wayland下使用UseOzonePlatform无法显示界面 #2300
support IME under native Wayland #33662
Vscode does not launch in wayland session #146349
Ozone-wayland: support text_input_v3 protocol

Chromium从98版本开始已经默认支持Wayland,用户可以通过--ozone-platform-hint=auto参数启用Wayland支持。问题根源在于 Chromium对Wayland的兼容措施还没有完全释出, text-input-v3 支持虽然已经合并但因为前者还存在一些问题。
2025-06-29T19:56:53.png
作为对wayland支持的努力,UseOzonePlatform现在是 chrome://flags/#ozon-platform-hint 中的一个实验性选项,默认没有启用。
启用后选择auto即可,但是理论上应该确保XDG_RUNTIME_DIR 和 WAYLAND_DISPLAY 等环境变量正常传递,这可能影响Chromium对当前运行环境的识别,
终端执行 echo $XDG_RUNTIME_DIRecho $WAYLAND_DISPLAY,正常应返回类似 /run/user/1000 wayland-0 的路径。
查找资料过程中发现用户使用--ozone-platform-hint=wayland 后只有第一次重新启动是正常的,第二次就无法启动
我的终端里可以看到刷屏的报错:

[10091:10136:0630/034118.878942:ERROR:gpu/command_buffer/client/client_shared_image.cc:133] Failed to map the buffer.
[10091:10136:0630/034118.878946:ERROR:gpu/command_buffer/client/client_shared_image.cc:231] ScopedMapping init failed.
[10091:10136:0630/034118.878951:ERROR:gpu/command_buffer/client/client_shared_image.cc:431] Unable to create ScopedMapping
[10091:10136:0630/034118.878957:ERROR:cc/raster/one_copy_raster_buffer_provider.cc:303] MapSharedImage Failed.
[10091:10136:0630/034118.878964:ERROR:ui/gfx/linux/client_native_pixmap_dmabuf.cc:49] Failed to mmap dmabuf: 权限不够 (13)

丢给Deepseek分析:

根据您提供的错误日志,问题核心在于 Chromium 在 Wayland 环境下尝试使用 DMA-BUF 共享内存时出现权限问题,导致 GPU 进程初始化失败。以下是针对性的解决方案:

- 阅读剩余部分 -

OS info

操作系统: Fedora Linux 42
KDE Plasma 版本: 6.4.1
KDE 程序框架版本: 6.15.0
Qt 版本: 6.9.1
内核版本: 6.15.3-200.fc42.x86_64 (64 位)
图形平台: Wayland
处理器: 16 × AMD Ryzen 7 5800H with Radeon Graphics
内存: 32 GiB 内存 (31.2 GiB 可用)
图形处理器: NVIDIA GeForce RTX 3060 Laptop GPU
制造商: MECHREVO
产品名称: Jiaolong Series GM5ZG0O

(base) [xfox@fedora ~]$ sudo dnf history list
[sudo] xfox 的密码:
ID Command line Date and time Action(s) Altered
10 dnf history undo 5 2025-06-29 15:33:23 25
9 dnf history undo 4 2025-06-29 15:27:40 185
8 dnf history undo 7 2025-06-29 15:27:27 9
7 dnf install mumble 2025-06-29 15:13:49 9
6 dnf install chromium 2025-06-29 15:13:24 5
5 dnf install fcitx5-rime 2025-06-29 15:13:02 25
4 dnf install steam 2025-06-29 15:06:00 185
3 dnf update 2025-06-29 14:52:55 1773
2 dnf5 --config /kiwi_dnf5.conf -y --disable-plugin=priorities,versionloc 2025-04-09 12:07:14 1977
1 dnf5 --config /builddir/result/image/build/image-root/kiwi_dnf5.conf -y 2025-04-09 12:05:15 286

at least after undo 5 (remove fcitx5-rime) system can run normaly .
Actualy undo 3 was not run ,because when I login tty network was not connect.
Now I will try install Steam , fcitx5-rime and other I needed software one by one and log system status after install anyone with reboot.

install steam ok ,sys status ok.
install clash-verge ok ,sys status ok.
install fcitx5-rime ok ,sys status Crash!
after remove fcitx5-rime in tyy and reboot ,sys normaly run.
IMG20250630001222.jpg
Now test will continue.
install mumble ok ,sys status ok.
install fcitx5-chinese-addons ok ,sys status Crash!
Now we know problem in fcitx5

2025-06-29T17:05:13.png
ABRT Analytics -Problem

后续

从问题繁多的ibus切换回Fcitx5-rime

Fedora42 KDE wayland Crash #138 Closed
在排查事故原因后,维护者认为这和fcitx5-qt软件包存在关联,我也确实在Fedora 和KDE 相关的bug反馈处找到了一些较为直接的证据,并且Github维护者提醒我,在Wayland下我其实并不需要这个包。
所以,如何在不安装这个包的前提下安装fcitx5-rime?
dnf 支持使用--setopt=install_weak_deps=False停用默认安装弱依赖项的行为。

  743  sudo dnf install fcitx5-configtool
  744  sudo dnf install fcitx5-rime --setopt=install_weak_deps=False

如此一来我就可以绕过存在问题的软件包继续使用fcitx5-rime。

使用公共服务:http://udp.xnkiot.com/ 在此感谢该公益服务提供者。

## Python 跨平台测试示例
import socket
# 创建一个 UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
message = b'Hello, UDPQwQ'
sock.sendto(message, ('8.135.10.183', 53093))
# 关闭 socket
sock.close()

为什么有这个测试?

那就...得问某个喜欢女装的港仔了。

我正在使用机械革命的设备,有得必有失,便宜的价格意味着某些硬件性能的阉割————比如糟糕的麦克风拾音效果。这主要是因为散热风扇的巨大底噪导致的。

好在,要解决这个问题理论上还不算太困难,语音降噪技术已经相当成熟,我们有许多降噪方案可以选择。
这次我打算试试NoiseTorch这个项目,如果部署体验一段时间后效果不错,我将会在Linux用户站同步更新部署方案。

尝试部署

从Github下载最新的二进制预编译程序,截至目前是v0.12.2
压缩包的结构如下:
2025-05-10T13:11:04.png
在压缩包所在目录执行:
tar -C $HOME -h -xzf NoiseTorch_x64_v0.12.2.tgz
此时desktop等文件应该已经位于正确的位置了,接着刷新桌面环境缓存使其正常显示在应用列表。
对于KDE用户:

kbuildsycoca5 --noincremental  # KDE5

kbuildsycoca6 --noincremental  # KDE6

对于Gnome用户:

gtk-update-icon-cache

在菜单搜索noise即可找到:
2025-05-10T13:39:40.png
你可能会看到如下窗口:
2025-05-10T13:42:04.png

窗口提示你 NoiseTorch 当前无法正常运行,因为它需要 CAP_SYS_RESOURCE 权限(一种 Linux 系统的高级权限)。如果你不了解此权限,可以点击下方的 “Grant capability (requires root)” 按钮,程序会尝试自动获取权限(需要输入 root 密码)。
如果你没有使用常见的桌面环境,可以手动执行命令授权:
sudo setcap cap_sys_resource+ep /home/$USER/.local/bin/noisetorch
如果你通过点击完成了授权,程序将在授权后自动重启,你会看到类似下图的窗口:
2025-05-10T13:59:46.png
默认开启了对麦克风的噪音过滤,你需要选择正确的PC麦克风设备(我的是Family 17h/19h/lah HD Audio Controller)并点击Load NoiseTorch
接下来,你会发现音频管理器里 多了一个输入设备:
NoiseTorch Microphone for Family 17h/19h/lah HD Audio Controller
随后,你可以在需要麦克风的设备中选择使用该设备即可实现麦克风降噪输入。
2025-05-10T14:05:02.png

效果体验:

坦白来说,效果不太理想。但是...这貌似不是因为软件导致的,因为我的麦克风真的是太烂了,我感觉他明显受到了某些电磁/震动干扰。或者说,我买回来的时候这玩意压根就是损坏的状态。
通过Audacity录音测试,我感觉是从完全不可用的状态到了很炸但是能听见人声的状态。
具体效果有待上游戏验证。录音太炸裂就不放了。
其实,就算用不了我也可以用MT6 Pro的麦克风,而且这个自带ENC降噪

关于翻译和打包问题

根据internalisation i18n,尽管项目目前还没有正式的支持多语言,但是显然社区都很乐意提供翻译支持,后续我可能会尝试fork 并提交第一个简体中文版本。
其次是有必要的话直接对项目进行打包生成便于安装部署的deb/rpm软件包。

你是否正在使用沉浸式翻译?或者划词翻译
前者可以通过开发者模式直接填写使用Deeplx ,而后者则不能直接兼容Deeplx API,需要根据划词翻译的自定义API格式对请求作转换处理,我们这里就使用到了Hcfy-Deepl Translation Adapter完成这一处理过程。

本文的免费原理:Claw Cloud 为注册用户免费提供5美元免费额度,其中Github账户注册时长180天以上的用户还可以每月免费获得5美元免费额度,因此我们可以利用免费额度运行一些资源占用较低的服务,比如:Deeplx及Hcfy-Deepl Translation Adapter

- 阅读剩余部分 -