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在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了。

在WSL上部署Dify

安装准备

Dify安装部署依赖Docker和Docker Compose。安装Dify前需要先在WSL openEuler 24.03上安装好上述Docker软件。配置Docker需要的内核参数,开启IP转发与桥接功能

1
2
3
4
5
6
7
8
9
10
# 配置内核参数

sudo tee /etc/sysctl.d/docker.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效参数
sudo sysctl --system

安装Docker依赖的工具

1
2
3
4
5
6
7
# 安装 dnf 相关的工具包(openEuler 使用 dnf 作为包管理器)
sudo dnf install -y dnf-utils dnf-plugins-core
# 安装设备映射和 LVM2 工具
sudo dnf install -y device-mapper-persistent-data lvm2
# 安装其他可能需要的工具
sudo dnf install -y curl wget git vim

执行sysctl -a | grep ip_forward验证内核参数是否生效。如果有提示net.ipv4.ip_forward = 1则已经生效。添加Docker源

由于docker源国内访问很慢,我们可以直接添加docker的国内镜像源。

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

使用如下命令修改源配置中的操作系统版本信息以适配openEuler 24.03

sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

这个参数$releasever 在openEuler里面是24.03 LTS,因此执行安装命令过程中无法从docker源中找到软件,上述命令版本替换成8(对应CentOS 8版本)。

安装Docker软件

  1. 安装docker软件

sudo dnf install -y docker-ce docker-ce-cli containerd.io

  1. 验证安装结果
1
2
3
4
5
6
7
8
9
# 启动Docker服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证Docker服务状态
sudo systemctl status docker
# 将当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
# 重新登录生效后验证Docker版本
docker --version

安装Docker Compose

  1. 下载并安装
1
2
3
4
5
6
7
8
9
# 下载Docker Compose二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建符号链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version

其中第一步也可以直接从https://github.com/docker/compose/releases下载最新的Linux x86_64版本的。

  1. 配置用户权限
1
2
3
4
5
6
7
8
# 避免频繁使用
sudo sudo groupadd docker
sudo usermod -aG docker $USER
# 重新登录生效
newgrp docker
# 验证非特权用户操作
docker ps

  1. 配置docker hub国内镜像

编辑/etc/docker/daemon.json,配置docker hub的镜像地址:

1
2
3
4
5
6
7
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}

注意:上述的镜像可能失效,需要查询最新可用的镜像。如果不配置国内镜像或者国内镜像不可用会导致后续安装Dify失败。保存后需要重启docker 服务 sudo systemctl restart docker。

安装Dify

1
2
3
4
git clone https://github.com/langgenius/dify.git
cd dify
cp .env.example .env
docker-compose up -d

第一步也可以从github网站上手工下载最新的dify release版本,再解压缩。.env 文件是配置文件,Dify主要配置参数都可以再这里修改。第一次启动Dify时会从docker hub上拉取依赖的镜像。因此需要与配置好docker hub国内镜像源。第一次安装时建议先不使用-d 参数,方便观察启动信息。

在Windows 浏览器中输入http://wsl虚拟ip/install,如果可以访问Dify即安装成功。其中wsl虚拟ip地址可以在wsl 中用过ifconfig | grep 172查询,对应eth0虚拟网卡的地址。

配置Dify

Dify主要的配置都在.env文件。可以通过编辑 .env文件,配置Dify。几个推荐修改配置如下:

  1. PIP国内镜像PIP_MIRROR_URL=https://mirrors.aliyun.com/pypi/simple。配置此镜像的目的是因为Dify插件都是python包形式组织。安装插件即安装对应的python软件包。

  2. 配置插件初始化时间
    PLUGIN_PYTHON_ENV_INIT_TIMEOUT=600 # 默认是120秒,当安装比较大的插件是和容易超时,可以配置成600秒;

  3. 配置WEB UI端口

EXPOSE_NGINX_PORT=5080 # 默认是80端口,可能会和Windows上服务端口冲突,修改成其他端口。

注意:Dify启动、配置的其他问题都可以将错误直接丢给DeepSeek询问如何解决。比自己搜索快很多:)。

启动停止Dify

进入到Dify安装的目录中执行以下命令启动/停止Dify:

1
2
docker-compose up -d # 启动Dify
docker-compose down # 停止Dify

Obsdian导出增强配置

配置插件及工具

  1. Pandoc:万能文档格式转换工具,可以从http://pandoc.org下载。
  2. Obsdian导出增强(Enhancing Export)插件,这个是目前最好用的Obsdian导出插件。

导出PDF文件

PDF引擎

  1. 建议Windows下建议使用MiKTeXhttps://mirror.tuna.tsinghua.edu.cn/help/CTAN/,建议定期更新宏包(否则会出一些莫名其妙的问题)。可以再MiKTex Console上设置Proxy,更新时可以选择国内源进行更新。
  2. 在Obsdian导出增强插件中配置自定义参数,设置 --pdf-engine=xelatex ,即PDF引擎为xelatex

Pandoc表格插件

  1. Pandoc导出PDF文件时,如果表格比较大,表格内容则会溢出PDF文件导致表格显示不全,可以默认开启Pandoc表格插件功能。
  2. 可以在Pandoc参数中增加表格插件,可参考https://pandoc.org/MANUAL.html#extension-multiline_tables,此外还有grid_tables等表格插件。
  3. Pandoc参数为:-f markdown+multiline_tables

导出PDF模板(可选)

  1. 推荐使用eisvogel模板,详细下载地质https://github.com/Wandmalfarbe/pandoc-latex-template,作者持续在更新模板。
  2. 将现在好的模板可以放到用户目录下或者放到Obsdian附件目录
  3. Pandoc参数为:--template=eisvogel, 如果模板不是在默认的用户目录还需要指定具体模板路径。

中文字体

PDF模板和引擎对中文支持不好,需要通过强制指定中文字体解决。具体参数如下:

-V mainfont="Microsoft Yahei" -V CJKmainfont="Microsoft Yahei"
应用程序或者插件会将参数拼接成完整的Pandoc导出命令,如果应用程序有Bug可能将有空格的参数截断,导致最终拼接导出命令错误。例如Typora会将上述“Microsoft Yahei”从空格处截断,此时可将可在空格前加转义字符“\”,将命令修改成:-V mainfont="Microsoft\ Yahei" -V CJKmainfont="Microsoft\ Yahei"
当然,也可以选择其他不带空格的字体。

导出Word文件

导出Word文件相对配置简单一些,可以直接使用默认命令;如果导出Word样式不满意,可以指定导出Word模板。
--reference-doc="/path/templates.doc"

比较舒服的Word模板可以参考:https://github.com/Achuan-2/pandoc_docx_template,当然也可以基于上述模板二次修改成自己喜欢的。

Obsidian + Slides Extended 打造Markdown演示文稿

插件介绍

Slides extended是Obsdian一个演示文稿插件,支持用Markdown书写基于Reveal.js的演示文稿。非常适合快速输出教学演示文稿。
Sildes extended是最早是由MSzturc开发的Advacned Silde<github.com/MSzturc/obsidian-advanced-slides>插件,24年以后原作者不再更新后Erin fork出后以Slides Extendedhttps://github.com/ebullient/obsidian-slides-extended继续开发。

Slides extended是目前遇到的最好用的Markdown写演示文稿的工具。当前唯一的缺点是不能直接导出PPT格式,这个估计需要reveal.js支持才能支持。

插件的详细介绍参考

https://mszturc.github.io/obsidian-advanced-slides/

配合使用模板和布局可以预配置好演示文稿的布局风格,日常写作时专注于文件本身。

https://mszturc.github.io/obsidian-advanced-slides/templates/
https://mszturc.github.io/obsidian-advanced-slides/layout/

Linux 文件权限简记

数字权限使用格式

在这种使用方式中,首先我们需要了解数字如何表示权限。 首先,我们规定 数字 4 、2 和 1表示读、写、执行权限,即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,

如:

1
2
3
rwx = 4 + 2 + 1 = 7
rw = 4 + 2 = 6
rx = 4 +1 = 5

即:

  • 若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7
  • 若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6
  • 若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

命令格式 chmod [可选项] <mode> <file…>