news 2026/10/29 21:52:13

Ubuntu 20.04升级本质:GNOME 3.36、systemd-resolved与Python 3.8迁移实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 20.04升级本质:GNOME 3.36、systemd-resolved与Python 3.8迁移实战

1. 这不是一次普通升级:Ubuntu 20.04 Focal Fossa 升级的本质与现实意义

“Comment passer à Ubuntu 20.04 Focal Fossa”——这句法语标题直译是“如何迁移到 Ubuntu 20.04 Focal Fossa”,但真正要做的,远不止敲几行命令那么简单。我从2012年第一次在ThinkPad X220上装Ubuntu 12.04开始,完整经历了7次LTS版本的跨代升级,其中三次是直接从旧LTS升到新LTS(14.04→16.04→18.04→20.04)。2020年4月发布的Ubuntu 20.04 Focal Fossa,是Linux桌面生态一个关键分水岭:它首次将GNOME 3.36作为默认桌面环境,全面启用systemd-resolved替代传统DNS解析,内核升级至5.4 LTS,并正式将Python 3.8设为系统默认Python解释器——这意味着所有依赖Python 2或旧版Python 3的系统脚本、第三方工具链、甚至部分厂商驱动安装包,在升级后大概率会直接失效。你搜到的那些热词——“ubuntu没声音20.04”、“ubuntu 20.04 安装mysql8.025”、“ubuntu 20.04 搜狗输入法”——根本不是孤立问题,而是这个底层技术栈切换后必然爆发的兼容性阵痛。我亲眼见过一位高校实验室管理员,在未做任何预检的情况下对20台教学机执行do-release-upgrade,结果17台无法启动音频服务,3台MySQL 5.7数据目录权限被systemd自动重置导致服务拒绝启动。所以,“迁移”这个词很准确:这不是打补丁,而是把整套运行时环境、依赖图谱、硬件抽象层全部推倒重建。适合谁?适合愿意花2小时做预检、能看懂apt list --upgradable输出、知道/etc/apt/sources.list里deb源地址怎么改、并且接受升级后可能需要手动重装NVIDIA驱动或重新配置Wi-Fi认证方式的中级以上用户。如果你只是想让电脑“看起来更新一点”,那请立刻关掉这个页面——20.04的GNOME顶部栏确实更简洁,但代价可能是你用了三年的快捷键组合全废了。

2. 升级前必须完成的五道生死线检查

很多教程把升级写成三步走:备份→do-release-upgrade→重启。这是教科书式安全,也是实操中90%失败案例的根源。真正的升级准备,是一场针对你当前系统的外科手术式诊断。我把它拆成五道不可跳过的检查线,每一道都对应一个高频翻车现场。

2.1 硬件兼容性红线:别让老设备成为升级坟场

Ubuntu 20.04的内核5.4对硬件抽象层做了重大重构。最典型的雷区是Broadcom无线网卡(BCM4313/BCM4322系列)和Realtek声卡(ALC269/ALC272)。我在2021年帮一所职校升级老旧机房时发现:搭载BCM4313的Dell Vostro 3500,在升级后rfkill list显示硬阻塞状态,dmesg | grep brcmsmac报出firmware: failed to load brcm/bcm4313c0_ag.bin——因为20.04默认只带BCM4360+的固件。解决方案不是重装驱动,而是提前执行:

sudo apt install firmware-b43-installer sudo modprobe -r b43 && sudo modprobe b43

但注意:这行命令必须在升级前验证有效,否则升级后进不了图形界面就只能挂载root分区手动修复。另一个隐形杀手是Intel GMA 3150集成显卡(常见于Atom D510主板),其psb_gfx驱动在5.4内核中已被彻底移除。如果你的lspci | grep VGA输出包含GMA3150,请立刻停止——20.04将强制回退到fbdev模式,分辨率锁死1024×768且无法调节。这类设备唯一出路是降级到18.04 LTS或换用Xubuntu/Lubuntu等轻量桌面。

2.2 第三方PPA与非官方源:升级前的“排雷行动”

apt update报错“404 Not Found”是升级失败的第一征兆。原因90%出在第三方PPA。比如你装过webupd8team/java(Oracle JDK源)或graphics-drivers/ppa(NVIDIA旧驱动源),这些PPA在2020年后基本停止维护。执行apt update时,/var/log/apt/history.log会记录类似Hit:9 http://ppa.launchpad.net/webupd8team/java/ubuntu focal Release的错误——注意最后的focal,这是apt误将旧源适配到focal导致的。正确做法是:先运行sudo apt install ppa-purge,再逐个清理高危PPA:

sudo ppa-purge ppa:webupd8team/java sudo ppa-purge ppa:graphics-drivers/ppa

特别提醒:ppa-purge不会删除已安装的软件包,但会还原其配置文件到默认状态。如果你依赖某个PPA里的特殊版本(如MySQL 8.0.25),请务必在清理前用dpkg -l | grep mysql记下精确包名,升级后再手动编译安装。

2.3 磁盘空间警戒线:/boot分区的“隐形炸弹”

do-release-upgrade要求/boot分区剩余空间≥1GB。但很多人忽略一个事实:Ubuntu 18.04默认使用linux-image-5.4.0-xx-generic内核,而20.04需要linux-image-5.4.0-yy-generic(yy>xx)。每次内核更新都会在/boot生成新initrd和vmlinuz文件,旧内核不自动删除。我遇到过最极端案例:一台服务器/boot仅256MB,升级时因空间不足卡在Preparing packages...阶段长达47分钟,最终apt进程被OOM killer杀死。检测方法很简单:

df -h /boot ls -lh /boot/vmlinuz-* | head -5

如果看到超过5个不同版本的vmlinuz(如5.4.0-42, 5.4.0-45, 5.4.0-48),立即执行:

sudo apt autoremove --purge

注意:autoremove会删除旧内核,但必须确保当前运行的内核不在删除列表中。用uname -r确认当前版本,再对比dpkg --get-selections | grep 'linux-image'输出,手动保留至少一个旧内核备用。

2.4 关键服务状态快照:数据库与网络服务的“临终遗言”

升级过程会重启systemd服务,但某些服务(如MySQL、PostgreSQL、OpenVPN)的配置文件在20.04中路径或权限模型已变更。例如MySQL 5.7的/etc/mysql/mysql.conf.d/mysqld.cnf中bind-address = 127.0.0.1在20.04中会被mysql-router服务覆盖;OpenVPN的/etc/openvpn/client.conf中auth-user-pass参数在systemd-resolved环境下需改为auth-user-pass /etc/openvpn/auth.txt。正确做法是在升级前生成服务状态快照:

# 记录MySQL数据目录权限 sudo ls -ld /var/lib/mysql sudo ls -l /var/lib/mysql/ # 记录OpenVPN配置关键行 sudo grep -E "^(auth-user-pass|proto|dev)" /etc/openvpn/client.conf # 记录网络管理器DNS设置 nmcli dev show | grep DNS

这些输出要存为pre-upgrade-snapshot.txt,升级后第一件事就是对照修复。

2.5 输入法与中文环境:搜狗输入法的“兼容性断崖”

“ubuntu 20.04 搜狗输入法”是2020年Q2搜索量最高的问题之一。根本原因在于:搜狗输入法Linux版依赖fcitx 4.2.9.7,而20.04默认使用fcitx5(架构完全不同)。强行安装旧版会导致ibus-daemon与fcitx冲突,ibus进程CPU占用率飙升至300%。我的实测方案是:升级前完全卸载搜狗,改用原生支持的ibus-libpinyin:

sudo apt remove sogoupinyin fcitx sudo apt install ibus-libpinyin # 重启ibus-daemon ibus restart # 在Settings→Region & Language→Input Sources中添加Chinese (Intelligent Pinyin)

如果你必须用搜狗,请在升级后下载sogoupinyin_4.0.1.2-2_amd64.deb(注意必须是2020年10月后发布的版本),并手动解决依赖:

sudo dpkg -i sogoupinyin_4.0.1.2-2_amd64.deb sudo apt --fix-broken install

3. 升级执行阶段:do-release-upgrade背后的17个隐藏步骤

do-release-upgrade命令看似简单,但它背后触发的是一个包含17个原子操作的复杂工作流。理解这些步骤,才能在卡住时精准干预。我用strace -f -e trace=execve do-release-upgrade -d 2>&1 | grep execve抓取了完整调用链,以下是关键环节的深度解析。

3.1 阶段一:环境探测与策略生成(耗时约3-8分钟)

当执行sudo do-release-upgrade -d(-d参数强制检测开发版,实际升级必须去掉),程序首先读取/var/lib/update-manager/release-upgrades确认升级策略。此时它会执行:

  1. lsb_release -sc获取当前codename(如bionic)
  2. curl -s http://changelogs.ubuntu.com/meta-release-lts下载LTS升级路径元数据
  3. 解析XML中的<supported>标签,确认bionic→focal路径是否开放(2020年4月24日前该路径为<supported>false</supported>)
  4. 扫描/etc/apt/sources.list,将所有bionic替换为focal,生成临时sources.list.focal

提示:如果网络超时,可手动下载meta-release-lts到本地,用sudo do-release-upgrade -d -f /path/to/meta-release-lts指定路径

3.2 阶段二:依赖图谱重构(最易卡死环节)

这是升级中最长的等待阶段。do-release-upgrade会调用apt-get dist-upgrade的底层API,但做了三重增强:

  • 依赖环检测:当遇到packageA depends on packageB, packageB conflicts with packageA时,自动启用--fix-broken模式
  • 版本锁定解除:扫描/etc/apt/preferences.d/下所有.pref文件,临时注释掉Pin-Priority高于1001的规则
  • 内核包特殊处理:识别linux-image-generic包,自动添加--install-recommends确保linux-modules-extra同步安装

我遇到过某次卡在“Calculating the changes”达22分钟,apt-cache policy linux-image-generic显示其候选版本被apt_preferences锁定在5.4.0-42。解决方案是临时重命名/etc/apt/preferences.d/nvidia.pref,升级完成后再恢复。

3.3 阶段三:原子化包安装(含5次关键重启点)

整个安装过程分为5个原子阶段,每个阶段失败都会回滚到上一检查点:

  1. 基础系统包更新:安装ubuntu-release-upgrader-core等升级核心组件(此时/usr/bin/do-release-upgrade本身会被更新)
  2. 内核与模块安装:解压linux-image-5.4.0-xx-generic到/boot,生成initrd,但不激活新内核
  3. 桌面环境重构:卸载gnome-shell-extension-ubuntu-dock(18.04版),安装gnome-shell-extension-ubuntu-appindicators(20.04版)
  4. 服务配置迁移:执行/usr/lib/ubuntu-release-upgrader/release-upgrader-configs/focal/下的迁移脚本,如mysql-migrate.cnf会将/etc/mysql/conf.d/中旧配置转为/etc/mysql/mysql.conf.d/格式
  5. 清理与重启:删除/var/lib/apt/lists/*bionic*缓存,执行update-grub,最后提示重启

注意:第3步中GNOME扩展迁移是“静默失败”的高发区。如果升级后顶部栏消失,立即执行gsettings reset-recursively org.gnome.shell重置GNOME设置。

3.4 阶段四:升级后首次启动的“黄金10分钟”

重启进入20.04后,前10分钟决定成败。必须按顺序执行:

# 1. 立即检查内核版本(验证是否真进入新内核) uname -r # 应输出5.4.0-xx-generic # 2. 检查音频服务(解决“ubuntu没声音20.04”) pulseaudio --check -v # 若返回1,执行 sudo alsa force-reload # 3. 修复MySQL(针对“ubuntu 20.04 安装mysql8.025”场景) sudo systemctl stop mysql sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql sudo systemctl start mysql

特别强调:mysqld --initialize会生成新root密码,记录在/var/log/mysql/error.log中,必须立即用sudo mysql -u root -p登录并执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';否则后续所有客户端连接都会被拒绝。

4. 升级后必做的七项深度修复与优化

升级完成不等于万事大吉。20.04的诸多“新特性”需要手动调优,否则你会陷入持续的体验割裂感。以下是我在127台生产环境机器上验证过的七项必做操作。

4.1 声音系统重构:PulseAudio与PipeWire的共存策略

“ubuntu没声音20.04”的本质是PulseAudio 13.99与ALSA 1.2.2的握手协议变更。单纯pulseaudio -k已无效。正确流程是:

# 1. 禁用PulseAudio自动启动 mkdir -p ~/.config/pulse echo "autospawn = no" > ~/.config/pulse/client.conf # 2. 启用PipeWire(20.04默认未启用) sudo apt install pipewire pipewire-pulse pipewire-audio systemctl --user daemon-reload systemctl --user start pipewire pipewire-pulse # 3. 验证音频设备 pw-cli list-objects | grep -A5 "device.name"

此时pavucontrol(音量控制)应能识别所有输入输出设备。若仍无声,检查alsamixer中Auto-Mute Mode是否为Enabled,按M键取消静音。

4.2 MySQL 8.0.25的生产级部署:绕过默认配置陷阱

Ubuntu 20.04仓库的MySQL 8.0.25存在两个致命缺陷:default_authentication_plugin=caching_sha2_password导致旧客户端连接失败;bind-address=127.0.0.1阻止远程访问。修复步骤:

# 1. 修改主配置 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # 添加以下三行到[mysqld]段: default_authentication_plugin=mysql_native_password bind-address=0.0.0.0 max_connections=500 # 2. 创建远程访问用户(替换'yourpassword') sudo mysql -u root -p CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; # 3. 开放防火墙 sudo ufw allow 3306

4.3 NVIDIA驱动的“双内核”适配:解决CC-Switch失效问题

“ubuntu 20.04 cc-switch”问题源于NVIDIA 440+驱动对5.4内核的签名验证。nvidia-settings中的GPU切换功能失效,是因为nvidia-prime服务未加载。修复命令:

# 1. 确认驱动版本 nvidia-smi -q | grep "Driver Version" # 2. 强制加载prime服务 sudo systemctl enable nvidia-prime sudo systemctl start nvidia-prime # 3. 设置默认GPU(0=Intel, 1=NVIDIA) sudo prime-select nvidia # 重启后执行 glxinfo | grep "OpenGL renderer"

若输出仍为llvmpipe,说明未生效,需手动编辑/lib/modprobe.d/nvidia.conf,注释掉blacklist nouveau行,然后sudo update-initramfs -u。

4.4 VINS-MONO的ROS环境适配:C++17标准与OpenCV4冲突

“vins mono ubuntu 20.04”失败的核心是ROS Noetic默认使用C++14,而VINS-MONO要求C++17,且OpenCV4.2与ROS自带的cv_bridge存在ABI不兼容。解决方案:

# 1. 升级CMakeLists.txt(在vins_mono/CMakeLists.txt中) set(CMAKE_CXX_STANDARD 17) # 2. 强制使用系统OpenCV find_package(OpenCV 4.2.0 REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) # 3. 编译时链接系统库 target_link_libraries(vins_node ${OpenCV_LIBS})

编译前必须执行catkin_make clean,否则缓存的C++14对象文件会导致undefined reference to 'cv::String::String(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'。

4.5 搜狗输入法的终极兼容方案:Flatpak隔离运行

放弃deb包安装,改用Flatpak实现完全隔离:

# 1. 安装Flatpak sudo apt install flatpak flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo # 2. 安装搜狗(需先卸载所有fcitx相关包) flatpak install flathub im.abc.sogoupinyin # 3. 启用输入法 flatpak override --env=GTK_IM_MODULE=fcitx5 im.abc.sogoupinyin

此方案下搜狗运行在独立沙箱,完全不影响系统ibus服务,CPU占用稳定在1.2%以下。

4.6 系统启动速度优化:禁用无用服务与预加载

20.04默认启用32个systemd服务,其中ModemManager(蜂窝网络)、thermald(笔记本温控)在台式机上纯属负担。优化命令:

# 1. 禁用台式机无用服务 sudo systemctl disable ModemManager thermald bluetooth # 2. 启用预加载(提升应用启动速度) sudo apt install preload sudo systemctl enable preload # 3. 调整GRUB超时(从10秒降至2秒) sudo nano /etc/default/grub # 修改GRUB_TIMEOUT=2 sudo update-grub

实测启动时间从42秒降至18秒(i5-7400 + SATA SSD)。

4.7 GNOME Shell深度定制:找回丢失的生产力

20.04的GNOME 3.36移除了“活动概览”热角,顶部栏不再显示工作区缩略图。必须安装扩展:

# 1. 安装扩展管理器 sudo apt install chrome-gnome-shell # 2. 必装三个扩展(通过https://extensions.gnome.org/安装) # - Dash to Dock(恢复任务栏) # - TopIcons Plus(显示系统托盘图标) # - Workspace Matrix(工作区网格化) # 3. 关键设置命令 gsettings set org.gnome.shell.extensions.dash-to-dock dock-fixed false gsettings set org.gnome.shell.extensions.topicons-plus show-all true

此时按Super+Tab可呼出应用切换器,Ctrl+Alt+T打开终端,生产力回归。

5. 升级故障排查实战手册:21个真实问题与根因分析

我把过去三年处理的217例20.04升级故障,按发生频率排序整理成速查表。每个问题都标注了日志定位路径、根本原因和一行修复命令。

问题现象日志定位命令根本原因修复命令
升级后黑屏,光标闪烁`journalctl -b -p 3grep -i "drm|nouveau|i915"`Nouveau驱动与5.4内核DMA缓冲区冲突
MySQL服务无法启动sudo journalctl -u mysql -n 50 --no-pager/var/lib/mysql目录权限被systemd重置为root:rootsudo chown -R mysql:mysql /var/lib/mysql→sudo systemctl start mysql
Wi-Fi连接后立即断开journalctl -u NetworkManager -n 30systemd-resolved与NetworkManager DNS配置冲突sudo nano /etc/NetworkManager/NetworkManager.conf→[main] dns=none→sudo systemctl restart NetworkManager
外接显示器无信号xrandr --listprovidersIntel核显与NVIDIA独显Provider ID冲突sudo nano /etc/X11/xorg.conf.d/10-nvidia.conf→ 添加Option "AllowEmptyInitialConfiguration"
搜狗输入法候选框乱码fcitx5-diagnose | grep -A5 "font"字体缓存未更新sudo fc-cache -fv→fcitx5-remote -r
SSH连接被拒绝sudo journalctl -u ssh -n 20OpenSSH 8.2p1默认禁用ssh-rsa签名算法sudo nano /etc/ssh/sshd_config→PubkeyAcceptedAlgorithms +ssh-rsa→sudo systemctl restart ssh
Docker容器无法联网sudo journalctl -u docker -n 30iptables规则被ufw重置sudo ufw disable→sudo systemctl restart docker

实操心得:所有日志分析必须加-b参数(仅当前启动),否则会混入旧日志。journalctl默认只保存最近3天日志,如需长期追踪,执行sudo mkdir -p /var/log/journal→sudo systemd-journald --flush。

6. 经验沉淀:我踩过的11个坑与3条铁律

最后分享些文档里永远不会写的血泪经验。这些不是理论推导,而是我在凌晨三点抢救客户服务器时,用咖啡和黑眼圈换来的认知。

第一个坑:永远不要在升级过程中关闭终端。do-release-upgrade的进度条是假象——它只显示APT包下载进度,真正的依赖解析在后台静默进行。我曾因误判进度关闭SSH会话,导致apt进程被SIGHUP终止,/var/lib/dpkg/status文件损坏。修复花了47分钟:先sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status恢复备份,再sudo dpkg --configure -a重跑配置。现在我的终端永远开着tmux,升级前执行tmux new-session -s upgrade,断线后tmux attach-session -t upgrade即可续上。

第二个坑:sudo apt update不是万能钥匙。很多教程说“升级前先apt update”,但20.04的apt会智能跳过已废弃源。真正有效的是sudo apt update --allow-releaseinfo-change,它允许sources.list中发行版代号从bionic变为focal。没有这个参数,apt update会卡在Reading package lists... Done不动。

第三个坑:备份不是复制整个/home。/home下.cache、.local/share/Trash等目录占空间巨大且无备份价值。我现在的标准备份命令是:

tar -cf backup-$(date +%Y%m%d).tar \ --exclude='*.log' \ --exclude='.cache' \ --exclude='.local/share/Trash' \ --exclude='.thumbnails' \ /home/username

这样120GB的/home能压缩到18GB,且tar比rsync更可靠——它不依赖文件系统时间戳,避免因时区差异导致的同步遗漏。

三条铁律:

  1. 升级前必做“三镜像”:用dd if=/dev/sda of=/backup/sda.img bs=4M制作磁盘镜像;用apt list --installed > pkg-list.txt导出已装包清单;用dpkg -l \| grep ^ii > deb-list.txt导出deb包详情。这三份文件就是你的后悔药。
  2. 永远保留一个可启动的旧内核。/boot里至少留两个内核:当前新内核+上一个旧内核。修改/etc/default/grub中GRUB_DEFAULT=saved,启动时按Shift进入GRUB菜单,用方向键选择旧内核——这是应对nvidia-driver崩溃的唯一逃生通道。
  3. 升级不是终点,而是新周期的起点。20.04的生命周期到2025年4月,但硬件驱动支持往往提前2年终止。我给客户的建议是:升级完成后立即订阅ubuntu-security-announce@lists.ubuntu.com邮件组,把apt list --upgradable加入每日crontab,真正的运维才刚刚开始。

我在2020年4月24日00:01(Focal Fossa正式发布时刻)亲手升级了第一台服务器。当时do-release-upgrade在Setting new software channels阶段卡了11分钟,我盯着屏幕手心全是汗。但现在回头看,那些深夜调试的journalctl日志、反复修改的/etc/apt/sources.list、还有为搜狗输入法写的第7版兼容脚本,都成了最扎实的技术肌肉记忆。Ubuntu 20.04不是终点,它是Linux桌面走向成熟的成人礼——而我们,是亲手为它系上领带的见证者。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 13:55:43

SCF5250音频接口编程精解:IIS与S/PDIF配置与数据路由实战

1. 项目概述与核心价值 在嵌入式音频系统开发中&#xff0c;无论是设计一个便携式音乐播放器、一个车载娱乐主机&#xff0c;还是一个专业的音频处理设备&#xff0c;核心挑战之一是如何在微控制器与音频编解码器&#xff08;CODEC&#xff09;、数字信号处理器&#xff08;DSP…

作者头像 李华
网站建设 2026/10/28 13:16:27

CentOS 8 LAMP部署实战:DNF模块流、SELinux与MariaDB安全配置

1. 项目概述&#xff1a;为什么在 CentOS 8 上部署 LAMP 仍是硬核运维的必修课 “Cmo instalar la pila Linux, Apache, MariaDB y PHP (LAMP) en CentOS 8 [Gua de inicio rpido]”——这个西班牙语标题直译过来就是“如何在 CentOS 8 上快速安装 Linux、Apache、MariaDB 和 P…

作者头像 李华
网站建设 2026/10/29 21:52:13

046、测试用例补充:为遗留代码补测试的 AI 辅助工作流

046、测试用例补充:为遗留代码补测试的 AI 辅助工作流 上周五晚上十一点,线上告警响了。一个老模块的定时任务挂了,日志里只有一行“NullPointerException at line 237”。我打开那个文件——三千多行的 Java 类,没有一行单元测试,方法名全是 doProcess、handleData 这种,…

作者头像 李华
网站建设 2026/10/28 13:19:41

LLM与遗传算法融合:实现机器学习工作流的自主进化与优化

1. 项目概述&#xff1a;当LLM遇见遗传算法&#xff0c;一场工作流的“自主进化”最近在搞一个挺有意思的项目&#xff0c;核心是把大语言模型&#xff08;LLM&#xff09;和遗传算法&#xff08;GA&#xff09;揉在一起&#xff0c;搞出了一个能自己“进化”的机器学习工作流系…

作者头像 李华
网站建设 2026/10/28 13:17:52

0621晨间日记

# 0621晨间日记 - 关键词 - 上午- 运动- 踢腿真是累人- 虽然每周都练&#xff0c; 但是还是很累- - 吃饭- 一碗稀饭- 昨天晚上自己做的饭&#xff0c;做的太多了- 调试便携显示器- 新的显示器到了- 本以为可以typec就可以&#xff0c;原来电脑是不支持的- 最终hdmi线进行了连接…

作者头像 李华
网站建设 2026/10/28 13:41:12

D2DX终极指南:三步让《暗黑破坏神2》在现代Windows上焕发新生

D2DX终极指南&#xff1a;三步让《暗黑破坏神2》在现代Windows上焕发新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx D2…

作者头像 李华