Windows下通过nssm将piclist-core安装成服务

准备工作

  1. 官网下载:https://nssm.cc/download
  2. 解压后出nssm.exe后,不要移动 / 删除 nssm.exe,注册服务后它是服务载体NSSM
  3. 右键【开始菜单】→ 以管理员身份打开 CMD / PowerShell(必须管理员权限)
  4. cd 进入 nssm 所在目录

安装piclist-core

  1. 通过npm命令安装
1
npm install piclist-core -g
  1. 查询安装的路径
1
2
npm list -g --depth 0 # 查看全局安装的包
npm get prefix # 查看全局安装路径

找出picgo-server安装的具体路径。

通过nssm安装Windows服务

  1. 注册服务
1
2
# nssm install <service_name> <executable_path>
nssm install picgoServer $path/picgo-server.cmd -c "C:\Users\$username\AppData\Roaming\piclist\config.json"

注意:注册服务时,config.json路径需要使用双引号包裹在执行 nssm install 命令前,$path/picgo-server.cmd -c "C:\Users\$username\AppData\Roaming\piclist\config.json"可以先测试命令执行后功能是否正常

  1. 启动服务
1
nssm start picgoServer
阅读更多

Fedora COSMIC Atomic 后需要安装必要的软件

安装第三方源

docker配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
curl -fsSL https://download.docker.com/linux/fedora/docker-ce.repo -o docker-ce.repo

sudo install -o root -g root -m 644 docker-ce.repo /etc/yum.repos.d/docker-ce.repo

sudo rm -f /etc/yum.repos.d/docker-ce.repo

sudo tee /etc/yum.repos.d/docker-ce.repo > /dev/null <<'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/fedora/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/fedora/gpg
EOF

安装nofree源

1
2
3
rpm-ostree install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

安装高频软件

1
2
3
rpm-ostree install fcitx5 fcitx5-rime fcitx5-configtool fcitx5-gtk3 fcitx5-gtk4 fcitx5-qt5 fcitx5-qt6 \
vim net-tools intel-media-driver \
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1
systemctl reboot
阅读更多

Fedora Atomic安装docker

安装软件包

下载 docker 官方 repo 文件到系统 etc

ostree 只读,不能 dnf config‑manager

1
2
curl -fsSL https://download.docker.com/linux/fedora/docker-ce.repo -o docker-ce.repo
sudo install -o root -g root -m 644 docker-ce.repo /etc/yum.repos.d/docker-ce.repo

替换 docker‑ce.repo 为阿里云源

1
2
3
4
5
6
7
8
9
10
sudo rm -f /etc/yum.repos.d/docker-ce.repo

sudo tee /etc/yum.repos.d/docker-ce.repo > /dev/null <<'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/fedora/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/fedora/gpg
EOF

安装软件

1
2
3
sudo rpm-ostree install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

systemctl reboot

配置docker服务

1
2
3
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 没有报错,但实际会执行失败
sudo gpasswd -a s$USER docker # 用此命令替换,仍然执行失败

失败原因
docker 组由 docker‑ce rpm 在 **/usr/lib/group**注册,没有写入可写的 /etc/group
gpasswd / usermod 只会读写 /etc/group

把 docker 组条目复制到可写的 /etc/group

1
2
getent group docker | sudo tee -a /etc/group
grep docker /etc/group

输出应当看到 docker:x:964:

此时再次执行sudo usermod -aG docker $USER 。把用户加入 docker 组。通过id命令查询到groups 列表里面出现 docker

测试

1
docker run --rm hello-world

Fedora Atomic安装node.js和npm

原因

Atomic /usr 是只读OSTree镜像;系统nodejs的npm默认全局目录指向 /usr/lib/node_modulesroot也无法写入,会直接报错 EACCES。

sudo npm‑g 不仅会权限报错,npm脚本以root执行还有安全风险。

通过NVM安装

node、npm、全部全局包都放在家目录,完全不碰系统layered包。

1
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

写入shell配置,重启终端:

1
source ~/.bashrc

安装LTS版本:

1
2
3
4
5
nvm install --lts
nvm use --lts

# 查看默认的全局包位置,通常在用户的home目录下
npm config get prefix

安装成功之后就可以不需要sudo安装全局包:

1
npm install -g typescript

全程不需要sudo,全局包自动放在 ~/.nvm/versions/node/* 下面。

优点:可以随意切换node版本;系统rpm‑ostree操作完全不影响node环境。


排查命令

1
2
3
4
5
6
7
8
# npm全局安装路径
npm config get prefix

# 看PATH是否包含npm‑global bin
echo $PATH

# 列出已经安装的全局包
npm list -g --depth=0

cosmic桌面系统中增加dns配置解决github无法访问的问题

GitHub访问慢可能的原因

GitHub访问慢大概率是是因为DNS污染,无法解写GitHub域名。

解决方案

通常可以通过本机的网络的DNS配置来解决。现代Linux系统DNS配置通常是由取自DHCP服务,由系统网络管理服务自动配置,因此我们可以通过修改本机网络服务,增加额外的DNS服务器即可解决此问题。在cosmic桌面环境中可以在 cosmic settings → network & wireless → 选择链接的网络上connected(三个点)→ settings → IPV4 settings → Additional DNS servers 增加DNS服务配置,如果增加多个可以用英文逗号隔开,如223.5.5.5,8.8.8.8

万象输入法自定义配置

wanxiang_pure输入法自定义配置

主要是在万象pure输入配置中增加常用的lua和OpenCC和简繁体转换。其中lua来自与wanxiang base,OpenCC和简繁体转换来自于moran。简化配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# 将以下内容拷贝到wanxiang_pure.custom.yaml文件中。
# 1. 需要从moran输入法中拷贝opencc目录(只需要保留和emoji和简中转繁体相关配置即可)
# 2. 从wanxiang base配置中拷贝lua文件夹
patch:
#候选数量
menu/page_size: 5

schema/dependencies/=:
- wanxiang_mixedcode #混合编码
- wanxiang_reverse #反查
- wanxiang_english #英文

switches/=:
- name: ascii_mode
states: [中文, 英文]
- name: ascii_punc
states: [中标, 英标]
- name: full_shape
states: [半角, 全角]
- name: emoji
states: [ 表情关, 表情开]
reset: 1
- options: [ std_s, std_s2t ]
states: [ , ]

# 输入引擎,增加常用功能
engine/processors/=:
- lua_processor@*wanxiang.super_processor
- ascii_composer
- recognizer
- key_binder
- speller
- punctuator
- selector
- navigator
- express_editor
engine/segmentors/=:
- ascii_segmentor
- matcher
- matcher@recognizer_secondary
- abc_segmentor
- punct_segmentor
- fallback_segmentor
engine/translators/=:
- punct_translator
- script_translator
- lua_translator@*wanxiang.shijian
- table_translator@custom_phrase
- table_translator@wanxiang_english
- table_translator@wanxiang_mixedcode
engine/filters:
- lua_filter@*wanxiang.super_lookup
- simplifier@emoji
- simplifier@std_s2t
- uniquifier #去重,必须在最后

# 主翻译器,自定义用户字典
translator/+:
user_dict: custom/cn.pure

# 中文、英文、数字、符号等混合词汇
wanxiang_english:
dictionary: wanxiang_english
user_dict: custom/en.pure
enable_completion: true
enable_sentence: false
initial_quality: 2.1
comment_format:
- xform/^~.+$//
english_spacing: smart
spacing_timeout: 5
max_candidates: 5
trigger: "\\"

wanxiang_mixedcode:
dictionary: wanxiang_mixedcode
db_class: stabledb
enable_completion: true
enable_sentence: false
initial_quality: 2
comment_format:
- xform/.*//

super_processor:
enable_backspace_limit: true
enable_seg_loop: true
enable_tone_fallback: true
enable_predict_space: false
kp_number_mode: auto
limit_repeated: "8,40" #格式:"最大重复声母数,最大候选字数"
select_character: "[,]" # 开启以词定字,自动拆解第一位上屏首字,第二位上屏尾字

# 部件拆字反查
wanxiang_reverse:
tag: wanxiang_reverse
dictionary: wanxiang_reverse
enable_completion: true
prefix: "`"
tips: "〔反查:拆分|笔画〕"

wanxiang_lookup:
tags: [abc]
key: "`"
lookup: [wanxiang_reverse]
data_source: [db]
enable_tone: true
enable_direct: false

emoji:
opencc_config: moran_emoji.json
option_name: emoji
tips: none
tags: [abc, number]

std_s2t:
opencc_config: s2t.json
option_name: std_s2t
tags: [abc, number]

recognizer_secondary:
patterns:
english: '(^[A-Za-z]{4}[A-Za-z]*)|(^[A-Z][A-Za-z]*)|(^[a-z][A-Z][a-zA-Z]*)|(^[a-z][a-z][A-Z][a-zA-Z]*)'

# 拼写设定
speller/alphabet: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA`;/\›
speller/initials: zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA/›

# 处理符合特定规则的输入码,如网址、反查
recognizer/patterns/=:
punct: "^/([0-9]|10|[A-Za-z]+)$"
wanxiang_reverse: "^`[A-Za-z;]*$"
sjc: "^[/v]rc\\d+[-+=op]?$"
email: "^[A-Za-z][-_.0-9A-Za-z]*@.*$" # email @ 之后不上屏
url: "^(www[.]|https?:|ftp[.:]|mailto:|file:).*$" # URL

# 导入足够的符号,用于/查询符号
punctuator/=:
digit_separators: ",."
__include: wanxiang_symbols:/symbol_table
__patch: wanxiang_symbols:/symbols

# 从 default 继承快捷键
key_binder/shijian_keys: ["/", "v"]

# 设置时间格式
date_formats:
- "Y年m月d日"
- "Y-m-d"
- "Y/m/d"
- "Y.m.d"
- "Ymd"
time_formats:
- "H:M"
- "H点M分"
- "H:M:S"
datetime_formats:
- "Y-m-d H:M:S"
- "YmdHMS"
- "Y年m月d日 H点M分"

阅读更多

在Zed中配置opencode

在zed和opencode继承有两种方式:

  1. 通过agent server自动安装,这是一个黑盒安装方式,进度不明
  2. 通过手工配置opencode和zed继承

下载opencode

首先下载opencode二进制文件,然后将其放置在合适的位置,例如/usr/local/bin/opencode。或者直接通过官网命令安装sudo npm i -g opencode-ai。安装完成后使用opencode命令启动opencode,启动成功以后可以配置API_KEY等。

在zed中配置opencode

在zed配置文件中增加如下配置,即以外部agent方式配置opencode:

1
2
3
4
5
6
7
8
9
"agent_servers": {
"OpenCode": {
"type": "custom",
"command": "/usr/local/bin/opencode",
"args": [
"acp"
]
}
}

配置好重启zed,既可以在agent panel中打开opencode。

在单系统中如何隐藏grub菜单

在单系统中隐藏grub菜单

在 Fedora 44 中,可以启用 GRUB 的自动隐藏功能让启动过程更流畅。启用后,每次启动都会直接进入系统,如果需要时,可以在启动时按 F8 或长按左 Shift 键唤出菜单。具体操作如下:

1
2
sudo grub2-editenv - set menu_auto_hide=1
sudo grub2-editenv - unset menu_show_once

执行后重启电脑,GRUB 菜单应该就不再显示了。

如果之后想恢复菜单,可以取消这个设置:

1
2
sudo grub2-editenv - unset menu_auto_hide

注意:将值设为 0 是无效的,必须使用 unset 命令来移除这个变量

参考资料

阅读更多

在Pop!OS 24.04安装常用软件

安装中文输入法

  1. iBus输入法在PopOS 24.04上不能正常使用,需要安装fcitx输入法。

  2. 安装fcitx输入法:

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt install fcitx5 \
    fcitx5-chinese-addons \
    fcitx5-rime \
    fcitx5-frontend-gtk3 \
    fcitx5-frontend-gtk4 \
    fcitx5-frontend-qt4 \
    fcitx5-frontend-qt5 \
    fcitx5-frontend-qt6
  3. 安装fcitx5以后在系统设置中将fcitx5设置随系统启动。在cosmic settings → applications → startup applications 中添加fcitx5启动项。

  4. 重启系统后,在系统设置中将fcitx5设置为默认输入法。在language support 中将 keyboard input method system修改成fcitx5。或者使用im-config -n fcitx5将默认输入法设置成fcitx5。

  5. 设置输入法适应的环境变量

    1
    2
    3
    4
    echo 'QT_IM_MODULE=fcitx5' >> ~/.pam_environment
    echo 'QT_IM_MODULE=ibus' >> ~/.pam_environment
    echo 'XMODIFIERS=@im=fcitx5' >> ~/.pam_environment
    source ~/.pam_environment

注意:cosmic使用Wayland,相关的配置参考 https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland
有指导建议在~/.config/environment.d/im.conf 中做上述配置,实际测试过程中对部分应用(如Firefox、LibreOffice等)无法生效

  1. 再次重启系统就可以用fcitx5愉快的输入了。

解决WPS缩放问题

方式一:设置系统缩放

在cosmic settings → applications → x11 applications compatibility 中将x11 application scaling设置为: Maximum compatibility mode。

方式二:设置应用缩放

/usr/share/applications(或者 Faltpak应用安装)目录下找到WPS的.desktop文件,在Exec=...前增加Exec=env QT_FONT_DPI=144 ...。如果采用的flatpak安装则可以使用flatpak override --user --env=QT_FONT_DPI=144 com.wps.Office,com.wps.Office需要替换成实际安装的Application ID。

QT应用中默认的DPI是96,对应的缩放比例是1.0,以此类推DPI和缩放比例对应关系如下:

DPI(QT_FONT_DPI) 缩放比例(QT_SCREEN_SCALE_FACTORS)
96 1.0
120 1.25
144 1.5
192 2.0
288 3.0

这两种方式各有利弊,第一种方式会导致WPS显示发虚;第二种方式在输入时Fcitx5输入法无法自动缩放。

解决WPS中Fcitx5输入面板过小的问题

  1. fcitx5的配置文件在~/.config/fcitx5/conf/classicui.conf
  2. 有三个配置型控制输入面板的缩放
1
2
3
4
5
6
# Use Per Screen DPI on X11
PerScreenDPI=False
# Force font DPI on Wayland
ForceWaylandDPI=0
# Enable fractional scale under Wayland
EnableFractionalScale=True
  • 第一个控制fcitx5在x11应用中如何缩放;
  • 第二、三个控制Wayland应用中缩放;为了统一控制fcitx5大小,我们同时关闭x11和Wayland的缩放功能,只有字体大小来控制面板大小。完整配置如下:
1
2
3
4
5
6
7
8
# Font
Font="Sans Serif 20" # 默认10号字,20大约等于200%缩放
# Use Per Screen DPI on X11
PerScreenDPI=False # 关闭x11自动缩放
# Force font DPI on Wayland
ForceWaylandDPI=48 # 系统200%缩放会导致在Wayland过大,把100%系统下对应的96缩小一半则刚刚好
# Enable fractional scale under Wayland
EnableFractionalScale=False # 关闭Wayland自动缩放

修改~/.config/fcitx5/conf/classicui.conf文件以后要重启fcitx5服务,保证新的配置已经生效。

解决了fcitx5面板缩放问题,配合wps的flatpak override --user --env=QT_FONT_DPI=144 com.wps.Office 缩放配置,就完美解决未随系统缩放、模糊、fcitx5过小各种问题。

其他问题

WPS在Linux有个一个很恶心的bug,如果添加过新的字体需要reboot一下系统,否则WPS登录界面会卡死。在Linux系统中用LibreOffice替换WPS Office。

在WSL上部署langchain-chatchat

安装Python

Langchain Chatchat目前只支持Python 3.11版本。需要确保操作系统的Python 版本是3.11。当前我是用的是OpenEuler 24.03 WSL,默认支持的Python是3.11版本,直接安装Python即可。如果使用的是Ubuntu 24.04或者其他版本需要确保安装Python版本是3.11,如果不是求助豆包或者DeepSeek。安装好Python后可以通过python -V 查询Python版本。创建并激活虚拟Python环境

大模型各种软件依赖比较多,版本也不一致。最好把不同软件部署在不同的虚拟化环境中。

  1. 执行如下命令创建虚拟化环境:python -m venv reg_env 即可创建一个reg_env虚拟环境,在ubuntu系统下该命令可能执行失败,如果执行失败按系统提示安装虚拟环境创建的命令再执行上述命令。上述命令执行成功后后会在工作目录创建一个reg_env目录,目录中就是虚拟换机各种软件资源。
  2. 执行如下命令激活虚拟环境:source ./reg_env/bin/activate 即可激活当前虚拟环境。虚拟环境激活成功以后会在命令行提示符增加(rag_env)信息。

安装langchain-chatchat

安装方式一

执行如下命令安装chatchat:pip install langchain-chatchat -U -i https://mirrors.aliyun.com/pypi/simple/

[!Notes]
上述命令会默认安装langchain-chatchat和依赖的包。某些依赖包版本升级后可能存在兼容性的问题。比如:chatchat当前支持httpx 0.27.x版本,上述命令默认安装了0.28.x版本,httx 0.28.x版本会出现一个proxies参数错误的问题。需要重新手工安装httpx版本,具体执行如下命令:pip install httpx==0.27.2 -i https://mirrors.aliyun.com/pypi/simple/

安装方式二

在网上搜索chatchat 按照的requirements.txt,可以执行如下命令安装:pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

上述的requirements.txt 可以通过已经部署好的环境通过如下命令导出:python freeze > requirements.txt

配置chatchat环境

关闭SSL鉴权

为避免调用大模型错误,需要关闭chatchat SSL。进入到安装好chatchat的的虚拟化环境目录./rag_env/lib/python3.11/site-packages/requests,编辑session.py文件,将517行的 verify=None,改成verify=False。

配置模型参数

  1. 首先要执行 chatchat init 初始化运行环境,此时会在工作目录下生成一些测试数据和默认配置文件。
  2. 在model_settings.yaml 文件中配置模型LLM模型和Embedding模型。以硅基流动的Qwen3模型为例,可以在https://siliconflow.cn/models 查询模型信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DEFAULT_LLM_MODEL: Qwen/Qwen3-32B
DEFAULT_EMBEDDING_MODEL: Qwen/Qwen3-Embedding-4B

# 部分内容省略,MODEL_PLATFORMS增加如下信息
# MODEL_PLATFORMS:

- platform_name: siliconflow
platfrom_type: openai
api_base_url: https://api.siliconflow.cn/v1
api_key: api_key
api_proxy:
api_concurrencies: 5
auto_detect_model: false
llm_models:
- Qwen/Qwen3-32B
embed_models:
- Qwen/Qwen3-Embedding-4B
text2image_models: []
image2text_models: []
rerank_models: []
speech2text_models: []
text2speech_models: []

# 以下省略

配置基础配置参数

  1. 配置服务器地址在 basic_settings.yaml 中可以设置访问chatchat的IP地址和端口。默认WEBUI_SERVER配置的host ip地址 0.0.0.0地址,可以将此地址改成wsl的虚拟ip地址方便从Windows系统中点击链接访问(可选)。

注意:不要修改API_SERVER的host地址,由于chatchat默认的知识库也部署在wsl里,如果修改此地址会导致chatchat无法通过本机地址访问知识库,如果需要对外提供支持库地址则修改public_host地址即可(暂未测试)。

  1. 配置知识库存储路径
1
2
KB_ROOT_PATH: /工作目录/data/knowledge_base
DB_ROOT_PATH: /工作目录/data/knowledge_base/info.db

启动chatchat环境

  1. 执行 chatcaht kb -r 初始化知识库,在执行此命令之前可以删除一些测试文件,加速知识库的生成过程。具体数据在./data/knowledge_base/samples/content/ 目录下。
  2. 执行 chatchat start -a 启动chatchat。当启动完成以后就可以在Windows上通过wsl的虚拟ip地址访问chatchat了。