随便说说

玩debian 系的发行版半年多了,期间折腾过 ubuntu24+gnome, linux mint22 xfce, debain12 + gnome,i3 等等感觉linux 的桌面发行版越来越棒了,用来作为开发机器,国产软件支持度慢慢上来了,我最终选择了 ubuntu24 + gnome+移除snap 和 debian12 + gnome,因为软件兼容性感觉最好,还有gnome 风格像mac,个人不喜欢 windows 的UI风格和交互。
期间使用linux mint 时候,有一次mint 升级,导致 钉钉直接不能使用了,遂卸载了。

感觉linux 很好玩,可以定制很多东西, 就是浪费时间,不过这一过程还是能学到很多东西的,最近在自己的vps debian os上搭建东西,感觉也比较顺畅。

感觉自己的linux 开发环境折腾的也差不多了,后面应该不太用折腾了。或者升级版本的时候还需要折腾把,哈哈

我从windows 到 macos 都是开箱即用, 自由度比较少,很多时候不用选择,因为也没得选择。当我去折腾 linux 的时候,开始感觉迷茫,痛苦,感觉很多东西都没有,不能开箱即用,然后可以玩的东西又太多了,论坛也是到处打架。然后自己各个方面折腾尝试下,最后整合出一套属于自己的玩具把,还是蛮有意思的。或者说当我们面对可选择方向多的时候就拼命快速尝试,然后找到一个适合自己的,而不是彷徨和痛苦。

最重要一点, 现在有ai,在学习理解新东西的时候,速度确实上来了

灵活的网络

感觉这是作为开发和折腾linux 的基本功把。

timeshift

重要的事情说三遍,linux 桌面版 一定要 timeshift 备份 备份 备份

sudo apt install timeshift
图形化界面配置即可

timeshift 恢复

  1. ubuntu usb 安装程序
  2. 开启菜单选择 try or install 。。
  3. 安装 timeshift
  4. 图像化界面恢复即可

常用软件

同时在尝试debian12 gnome,ubuntu和debian很多都是通用的,debian12

QQ
微信
钉钉
spotify-音乐软件

  • 需要灵活的网络

kitty-终端工具,gpu 加速
layzvim

mise - node、java 等sdk 管理工具
thefuck-好用的命令行提示工具
yazi-命令行文件浏览器
tldr-替代man命令行手册

  • tldr: too long, don’t read , 官方文档太长了,不要读了,给你常用案例

maple font nf cn-特别好用的编程字体
Vimium C: 一款非常好用的 vim mode chrome 插件, 比vimium插件更强大

cursor 安装并使用

官网下载 cursor.appimage 文件, 然后通过下面的appLauncher 工具启用
会遇到两个问题:

1. 安装后不能启动,沙箱机制问题,wayland 会有这个问题

需要在 desktop 文件中

nvim ~/.local/share/applications/appimagekit_bb7c0f6e1d92651f70e5c5262b64bf05-Cursor.desktop
# 在文件中这一行,添加 --no-sandbox 不使用沙箱
Exec=/home/kyle/Applications/Cursor-1.2.1-x86_64_2e4d89c2624eb13f05ac4745c5a1070a.AppImage %F --no-sandbox
2. cursor 启动后, cursor zsh命令行 很多环境变量不能访问

比如我的就是 mise 不能访问,导致很多sdk 不能访问,现在完美了
在cursor 配置文件中添加如下即可

terminal.integrated.profiles.linux": {
     "zsh": {
     "path": "zsh",
     "args": ["-c", "exec zsh --login"],
     "overrideName": true
     }
 },
 "terminal.integrated.defaultProfile.linux": "zsh",
 "terminal.integrated.inheritEnv": true

fcitx5

安装后诊断 命令:fcitx5-diagnose

这个输入法真的好用,尤其是自带的拼音中文输入法

sudo apt update
sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 fcitx5-frontend-qt5 fcitx5-frontend-qt6
sudo apt install fcitx5-configtool
sudo apt install fonts-noto-cjk # 安装字体

swayland 中 配置环境变量

mkdir -p ~/.config/environment.d
vim ~/.config/environment.d/env.conf

添加如下 数据
GTK_IM_MODULE=fcitx
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx

x11 中,编辑or 创建 ~/.xprofile

export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export QT_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus # 尤其这行 关键, 不然kitty 可能不能响应输入法

拼音简体和繁体切换快捷键取消,因为被其他软件占用了
在这里插入图片描述

设置开机自动启动
在这里插入图片描述
主题安装

推荐这个主题 https://github.com/tonyfettes/fcitx5-nord, 主题选不好,输入的时候会有遮挡

flameshot

sudo apt install flameshot

在这里插入图片描述
我的这个笔记本老 N 卡,用的x11 , 所以配置 flameshot gui ,在wayland 上不一样

obsidian

遇到了git 同步问题如下

在这里插入图片描述
在仓库命令行 git pull 并输入用户名和密码后, 执行下面的命令,存储用户名和密码
git config --global credential.helper store
然后回到 obsidian ,就可以git 操作不报错了

obsidian 图床配置

image auto upload plugin + picgo app
之前使用剪贴板 图片上传到obsidian 总是会报错,最后测试下来是 picgo app问题
在这里插入图片描述

oh zsh (命令行自动提示)

sudo apt update
sudo apt install zsh
# 安装 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 安装 zsh-autosuggestions 和 zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

添加插件
vim ~/.zshrc

plugins=(sudo git zsh-autosuggestions zsh-syntax-highlighting zsh-completions)

非常建议使用 powerlevel10k 主题,据说性能贼高
安装地址 https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#installation

重新加载 Zsh 配置
source ~/.zshrc

chrome-gnome-shell 安装

通过chrome浏览器安装 gnome-shell extension 时候,点击install 不生效
在这里插入图片描述
先要执行下面的命令
sudo apt install chrome-gnome-shell # 对于基于 Debian 的系统

ubuntu 移除 snap 脚本

#!/bin/bash
# Ubuntu Snap 完全移除脚本
# 适用于 Ubuntu 24.04 GNOME 桌面
# 作者:Claude AI 助手

set -e  # 遇到错误时停止执行

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否为 root 用户
check_root() {
    if [[ $EUID -eq 0 ]]; then
        log_error "请不要以 root 用户运行此脚本,脚本会在需要时提示输入密码"
        exit 1
    fi
}

# 检查 Ubuntu 版本
check_ubuntu_version() {
    if ! command -v lsb_release &> /dev/null; then
        log_warning "无法检测 Ubuntu 版本,继续执行..."
        return
    fi
    
    local version=$(lsb_release -rs)
    log_info "检测到 Ubuntu 版本: $version"
    
    if [[ "$version" < "20.04" ]]; then
        log_warning "此脚本主要针对 Ubuntu 20.04+ 测试,您的版本可能存在兼容性问题"
        read -p "是否继续?(y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
}

# 备份重要数据提醒
backup_reminder() {
    log_warning "重要提醒:删除 snap 包可能会删除应用数据!"
    echo "请确保您已备份以下位置的重要数据:"
    echo "- ~/snap/ (用户数据)"
    echo "- Firefox 书签和设置 (如果使用 snap 版本)"
    echo "- 其他 snap 应用的数据"
    echo
    read -p "是否已备份重要数据?(y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log_info "请先备份数据,然后重新运行脚本"
        exit 1
    fi
}

# 检查 snap 是否已安装
check_snap_installed() {
    if ! command -v snap &> /dev/null; then
        log_success "snap 未安装或已被移除"
        return 1
    fi
    return 0
}

# 显示已安装的 snap 包
show_installed_snaps() {
    log_info "当前已安装的 snap 包:"
    snap list 2>/dev/null || log_warning "无法列出 snap 包"
    echo
}

# 移除所有 snap 包
remove_all_snaps() {
    log_info "开始移除所有 snap 包..."
    
    # 获取所有已安装的 snap 包(排除 snapd 和 core)
    local snaps=$(snap list 2>/dev/null | awk 'NR>1 && $1!="snapd" && $1!="core" && $1!="core18" && $1!="core20" && $1!="core22" && $1!="bare" {print $1}' | sort -r)
    
    if [[ -z "$snaps" ]]; then
        log_info "没有找到需要移除的用户 snap 包"
    else
        for snap_pkg in $snaps; do
            log_info "移除 snap 包: $snap_pkg"
            sudo snap remove --purge "$snap_pkg" 2>/dev/null || log_warning "移除 $snap_pkg 失败,可能已被移除"
        done
    fi
    
    # 移除 core snap 包
    local core_snaps="core22 core20 core18 bare core snapd"
    for core_snap in $core_snaps; do
        if snap list 2>/dev/null | grep -q "^$core_snap "; then
            log_info "移除核心 snap: $core_snap"
            sudo snap remove --purge "$core_snap" 2>/dev/null || log_warning "移除 $core_snap 失败"
        fi
    done
}

# 停止 snap 服务
stop_snap_services() {
    log_info "停止 snap 相关服务..."
    
    local services=(
        "snapd.service"
        "snapd.socket"
        "snapd.seeded.service"
        "snap-*"
    )
    
    for service in "${services[@]}"; do
        if systemctl is-active --quiet "$service" 2>/dev/null; then
            log_info "停止服务: $service"
            sudo systemctl stop "$service" 2>/dev/null || true
        fi
    done
    
    # 禁用服务
    sudo systemctl disable snapd.service 2>/dev/null || true
    sudo systemctl disable snapd.socket 2>/dev/null || true
    sudo systemctl disable snapd.seeded.service 2>/dev/null || true
}

# 卸载 snapd
uninstall_snapd() {
    log_info "卸载 snapd 包..."
    
    # 移除 snapd 及相关包
    sudo apt purge -y snapd gnome-software-plugin-snap 2>/dev/null || true
    sudo apt autoremove -y 2>/dev/null || true
    
    log_success "snapd 已卸载"
}

# 清理残留文件
cleanup_snap_files() {
    log_info "清理 snap 相关文件和目录..."
    
    local directories=(
        "/var/snap"
        "/var/lib/snapd"
        "/var/cache/snapd"
        "/usr/lib/snapd"
        "/snap"
        "$HOME/snap"
    )
    
    for dir in "${directories[@]}"; do
        if [[ -d "$dir" ]]; then
            log_info "删除目录: $dir"
            if [[ "$dir" == "$HOME/snap" ]]; then
                rm -rf "$dir" 2>/dev/null || log_warning "删除 $dir 失败"
            else
                sudo rm -rf "$dir" 2>/dev/null || log_warning "删除 $dir 失败"
            fi
        fi
    done
    
    # 清理 systemd 单元文件
    log_info "清理 systemd 单元文件..."
    sudo find /etc/systemd/system -name "snap-*" -delete 2>/dev/null || true
    sudo find /etc/systemd/system -name "*snapd*" -delete 2>/dev/null || true
    sudo systemctl daemon-reload 2>/dev/null || true
    
    log_success "残留文件清理完成"
}

# 防止 snap 重装
prevent_snap_reinstall() {
    log_info "配置防止 snap 自动重装..."
    
    # 方法1: 使用 apt-mark hold
    log_info "将 snapd 设置为 hold 状态..."
    sudo apt-mark hold snapd 2>/dev/null || true
    
    # 方法2: 创建 APT 偏好设置
    log_info "创建 APT 偏好设置文件..."
    sudo tee /etc/apt/preferences.d/no-snap.pref > /dev/null << 'EOF'
Package: snapd
Pin: release a=*
Pin-Priority: -10

Package: gnome-software-plugin-snap
Pin: release a=*
Pin-Priority: -10
EOF
    
    # 方法3: 创建虚拟包 (可选)
    read -p "是否创建虚拟 snapd 包以彻底防止重装?(y/N): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        create_dummy_snapd_package
    fi
    
    log_success "防重装配置完成"
}

# 创建虚拟 snapd 包
create_dummy_snapd_package() {
    log_info "创建虚拟 snapd 包..."
    
    # 检查是否已安装 equivs
    if ! command -v equivs-build &> /dev/null; then
        log_info "安装 equivs..."
        sudo apt update && sudo apt install -y equivs
    fi
    
    # 创建临时目录
    local temp_dir=$(mktemp -d)
    cd "$temp_dir"
    
    # 创建控制文件
    cat > snapd << 'EOF'
Package: snapd
Version: 999.999.999
Maintainer: Snap Removal Script <noreply@localhost>
Architecture: all
Description: Dummy package to prevent snapd installation
 This is a dummy package created to prevent the installation
 of snapd and related snap packages.
EOF
    
    # 构建并安装虚拟包
    equivs-build snapd
    sudo dpkg -i snapd_999.999.999_all.deb
    sudo apt-mark hold snapd
    
    # 清理临时文件
    cd - > /dev/null
    rm -rf "$temp_dir"
    
    log_success "虚拟 snapd 包创建完成"
}

# 安装 Firefox 替代版本
install_firefox_alternative() {
    log_info "检查是否需要安装 Firefox 替代版本..."
    
    if ! command -v firefox &> /dev/null; then
        read -p "是否安装 Mozilla PPA 版本的 Firefox?(y/N): " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            log_info "添加 Mozilla PPA 并安装 Firefox..."
            sudo add-apt-repository -y ppa:mozillateam/ppa
            sudo apt update
            sudo apt install -y firefox
            
            # 设置优先级
            sudo tee /etc/apt/preferences.d/mozilla-firefox > /dev/null << 'EOF'
Package: firefox*
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 1001
EOF
            log_success "Firefox 安装完成"
        fi
    else
        log_info "Firefox 已安装,跳过"
    fi
}

# 验证移除结果
verify_removal() {
    log_info "验证 snap 移除结果..."
    
    # 检查 snap 命令
    if command -v snap &> /dev/null; then
        log_warning "snap 命令仍然存在"
        return 1
    fi
    
    # 检查 snapd 服务
    if systemctl is-active --quiet snapd.service 2>/dev/null; then
        log_warning "snapd 服务仍在运行"
        return 1
    fi
    
    # 检查挂载点
    if mount | grep -q "/snap"; then
        log_warning "仍有 snap 挂载点"
        return 1
    fi
    
    # 检查进程
    if pgrep -f snap &> /dev/null; then
        log_warning "仍有 snap 相关进程"
        return 1
    fi
    
    log_success "snap 已完全移除"
    return 0
}

# 显示完成信息
show_completion_info() {
    echo
    echo "=================================="
    log_success "Snap 移除脚本执行完成!"
    echo "=================================="
    echo
    echo "已完成的操作:"
    echo "✓ 移除所有 snap 包"
    echo "✓ 卸载 snapd"
    echo "✓ 清理残留文件"
    echo "✓ 配置防止自动重装"
    echo
    echo "注意事项:"
    echo "• 建议重启系统以确保所有更改生效"
    echo "• 如需安装软件,推荐使用 apt、flatpak 或 AppImage"
    echo "• 定期检查 snap 是否被意外重装"
    echo
    echo "检查命令:"
    echo "• snap list (应该提示命令不存在)"
    echo "• systemctl status snapd (应该提示服务不存在)"
    echo
    read -p "是否现在重启系统?(y/N): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        log_info "正在重启系统..."
        sudo reboot
    fi
}

# 主函数
main() {
    echo "Ubuntu Snap 完全移除脚本"
    echo "========================="
    echo
    
    check_root
    check_ubuntu_version
    
    if ! check_snap_installed; then
        log_success "系统中没有安装 snap,无需移除"
        exit 0
    fi
    
    backup_reminder
    show_installed_snaps
    
    echo "即将执行以下操作:"
    echo "1. 移除所有 snap 包"
    echo "2. 停止 snap 服务"
    echo "3. 卸载 snapd"
    echo "4. 清理残留文件"
    echo "5. 防止自动重装"
    echo "6. 可选:安装 Firefox 替代版本"
    echo
    read -p "是否继续?(y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log_info "用户取消操作"
        exit 0
    fi
    
    echo
    log_info "开始移除 snap..."
    
    remove_all_snaps
    stop_snap_services
    uninstall_snapd
    cleanup_snap_files
    prevent_snap_reinstall
    install_firefox_alternative
    
    if verify_removal; then
        show_completion_info
    else
        log_warning "移除过程中可能存在问题,请检查上述警告信息"
    fi
}

# 脚本入口
main "$@"

appimage 文件管理 AppImageLauncher

比如cursor 就可以使用这个软件来管理,最近更新了,效果还行,更新软件的时候需要自己手动处理下
update app

idea 解压安装

在官网下载 idea.tar.gz 文件

tar -xvzf ideaUI.tar.gz
sudo mv idea-IU-* /opt/idea
sudo chmod +x /opt/idea/bin/idea.sh

命令行执行 /opt/idea/bin/idea.sh 命令后, 打开idea 后, 可以通过idea 创建桌面快捷方式
在这里插入图片描述

apple 字体

根据参考地址即可实现,效果很棒棒

参考

maple-font
ping-fang
inter-font
apple-emoji

后续问题排查

在这里插入图片描述
突然发现字体有点丑,排查确定是monospace 字体渲染
fonts.conf 配置

<match>
  <test name="family">
    <string>monospace</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
    <string>Maple Mono NF</string>
    <string>Maple Mono NF CN</string>
    <string>Apple Color Emoji</string>
  </edit>
</match>

执行检测命令后

❯ fc-match monospace
AppleColorEmoji.ttf: "Apple Color Emoji" "Regular" 

显然,字体没用Maple Mono
修改如下:

不同版本的字体文件,有些字体名称有变更导致的

<match>
  <test name="family">
    <string>monospace</string>
  </test>
  <edit binding="strong" mode="prepend" name="family">
    <string>Maple Mono</string>
    <string>Apple Color Emoji</string>
  </edit>
</match>

修改后,明显舒服多了
在这里插入图片描述

类 i3wm 配置

参考这个视频

这是我使用的最简扩展了
在这里插入图片描述

workspace 整体效果

  1. 顶部左上角显示workspace indicator
  2. 右侧是 application indicator
  3. 下面就是某个workspace区域了

just perfection 用来关闭动画, 不然切换头晕
在这里插入图片描述
space bar 显示顶部workspace 编号
在这里插入图片描述
switcher 是一款类似 ulauncher 快速打开程序
tactile 窗口布局工具 super + T

在debian12中 sudo nvim问题

sudo nvim 的时候 总是不走 ~/ .config/nvim 中的配置
问题原因
普通用户的 nvim 配置在:~/.config/nvim/
使用 sudo nvim 时,~ 指向 /root/,所以会查找 /root/.config/nvim/
root 用户通常没有配置,所以使用默认设置
解决方案
sudo -E nvim filename

我的常用快捷键修改

自定义全局快捷键

alt+shift+a

  • name: flameshot
  • command: `/bin/sh -c “flameshot gui” > /dev/null &

修改系统快捷键

switch applications

  • alt + tab
  • 因为我是多workspace 修改成这个快捷键后就可以,在多workspace 中快乐切换了 app 了

close window:

  • alt+q

alt + space 被 switcher 扩展占用了,一定要 Disabled 掉
在这里插入图片描述


下面是我不再经常使用的东西了

ibus-rime

添加 universe 源

https://packages.ubuntu.com/noble/amd64/ibus-rime/download
已经弃用, 现在使用 fcitx5

这个要依赖上一步, 不然可能可能找不到ibus-rime相应到包

sudo apt install ibus-rime

雾凇输入法

参考地址1
参考地址2

添加搜狗字典库

搜狗官方下载相关词库

https://gaoweix.com/im-dict-converter/

执行如下命令添加词库即可

kyle@kyle-MS-7D42:~/Downloads$ rime_dict_manager -i luna_pinyin 生活常用成语大全.dict.yaml
imported 216 entries.
kyle@kyle-MS-7D42:~/Downloads$ rime_dict_manager -i luna_pinyin 计算机词汇大全【官方推荐】.dict.yaml

Albert 全局搜索

添加源

安装 总是失败,推荐使用 aptitude

sudo apt install aptitude
sudo aptitude install albert
sudo apt autoremove
sudo apt clean

字体使用apple 字体[弃用]

依赖 gnome-tweaks
https://github.com/fefelixa/macfonts 这个地址也有apple字体

mkdir -p Fonts
cd Fonts
wget https://github.com/sahibjotsaggu/San-Francisco-Pro-Fonts/raw/master/SF-Pro-Display-Black.otf
wget https://github.com/sahibjotsaggu/San-Francisco-Pro-Fonts/raw/master/SF-Pro-Display-Bold.otf

sudo mkdir -p /usr/share/fonts/opentype
sudo cp *.otf /usr/share/fonts/opentype/

sudo fc-cache -f -v

在这里插入图片描述

capsLock 映射成 ctrl

依赖 gnome-tweaks
在这里插入图片描述

qq music

download
闪退处理

ulauncher

官网 可以通过 deb 或者 apt 安装

设置alt+space 启动快捷键

快捷键特殊处理, 根据网站 配置,安装下相应插件

在这里插入图片描述
方法2:

  1. 先取消 alt + space 系统快捷键
    在这里插入图片描述

nodejs 和 java 版本管理工具

asdf官网
之前使用的是nvm + jenv ,现在尝试下新工具
在安装java 时候一定要注意精确版本号,不然可能不会找不到
jdk版本号查看网站

设置Alt + Q关闭程序

命令行执行 gsettings set org.gnome.desktop.wm.keybindings close "@as []"
命令行再执行 gsettings set org.gnome.desktop.wm.keybindings close "['<Alt>q']"
恢复默认设置 gsettings reset org.gnome.desktop.wm.keybindings close

屏幕放缩

我的屏幕是 需要1.25 倍才能看得正好,不然会很小

  1. sudo apt install gnome-tweaks
  2. 打开如下图,配置即可。 需要注意 有时候屏幕文字不清晰是上面这个 Antialiasing 配置问题。

在这里插入图片描述

远程仓库同步配置文件夹

因为文件夹已经存在

  1. .config 文件夹 git init
  2. git remote add origin <remoteurl>
  3. git pull origin master

安装微软雅黑字体

最想安装到是apple 字体, 但是安装了几个后并不能在web上很好到显示, 故折中方案 雅黑字体
微软雅黑

kdeconnect ios 与linux 共享粘贴版

sudo apt update
sudo apt install kdeconnect

ios 上安装对应软件即可

后续待安装

switcher extension 和 fcitx5 遮挡问题[不弄了]

apple 字体[上面已解决]

inter 字体修改为 apple 字体尝试下,感觉网页英文有时候显示怪怪的

zram [不弄了]

一台电脑完美实现,但是没有总结出启用规律,还把公司电脑直接跪了,幸好timeshift 备份了。 明天去看看怎么恢复把

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐