sudo apt update 命中:1 http://mirrors.aliyun.com/ubu...
تم الإنشاء في: ٢٥ نوفمبر ٢٠٢٥
تمت الإجابة باستخدام GPT-5.1 Thinking بواسطة Chat01
تم الإنشاء في: ٢٥ نوفمبر ٢٠٢٥
تمت الإجابة باستخدام GPT-5.1 Thinking بواسطة Chat01
sudo apt update
命中:1 http://mirrors.aliyun.com/ubuntu focal InRelease
命中:2 http://mirrors.aliyun.com/ubuntu focal-updates InRelease
获取:3 https://mirrors.aliyun.com/docker-ce/linux/ubuntu focal InRelease [57.7 kB]
命中:4 http://mirrors.aliyun.com/ubuntu focal-backports InRelease
命中:5 http://mirrors.aliyun.com/ubuntu focal-security InRelease
命中:6 https://dl.google.com/linux/chrome/deb stable InRelease
命中:7 https://packages.microsoft.com/repos/code stable InRelease
获取:8 https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64 InRelease [1,484 B]
获取:9 https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/amd64 InRelease [1,481 B]
命中:10 https://apt.releases.hashicorp.com focal InRelease
获取:11 https://nvidia.github.io/nvidia-docker/ubuntu18.04/amd64 InRelease [1,474 B]
已下载 62.1 kB,耗时 2秒 (34.3 kB/s)
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
有 435 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
(zh_workflow_310) zzz@zzz-System-Product-Name:/etc/apt/sources.list.d$ sudo apt install --allow-downgrades \
libqt5core5a=5.12.8+dfsg-0ubuntu2.1
libqt5dbus5=5.12.8+dfsg-0ubuntu2.1
libqt5gui5=5.12.8+dfsg-0ubuntu2.1
libqt5network5=5.12.8+dfsg-0ubuntu2.1
libqt5widgets5=5.12.8+dfsg-0ubuntu2.1
libqt5qml5=5.12.8-0ubuntu1
libqt5quick5=5.12.8-0ubuntu1
libqt5qmlmodels5=5.12.8-0ubuntu1
libqt5svg5=5.12.8-0ubuntu1
libqt5waylandclient5=5.12.8-0ubuntu1
libqt5waylandcompositor5=5.12.8-0ubuntu1
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 未找到“libqt5qmlmodels5”的“5.12.8-0ubuntu1”版本
(zh_workflow_310) zzz@zzz-System-Product-Name:/etc/apt/sources.list.d$ apt-cache policy libqt5core5a
libqt5core5a:
已安装:5.15.8+dfsg-3
候选: 5.12.8+dfsg-0ubuntu2.1
版本列表:
*** 5.15.8+dfsg-3 100
100 /var/lib/dpkg/status
5.12.8+dfsg-0ubuntu2.1 1001
500 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 Packages
500 http://mirrors.aliyun.com/ubuntu focal-security/universe amd64 Packages
5.12.8+dfsg-0ubuntu1 1001
500 http://mirrors.aliyun.com/ubuntu focal/universe amd64 Packages
你这个报错其实很简单:你指定的版本号在当前源里根本不存在,所以 apt 只能说 “未找到版本”。
命令里这几行里:
bashlibqt5qml5=5.12.8-0ubuntu1 \ libqt5quick5=5.12.8-0ubuntu1 \ libqt5qmlmodels5=5.12.8-0ubuntu1 \ ...
报错的是:
bashE: 未找到“libqt5qmlmodels5”的“5.12.8-0ubuntu1”版本
意思是:在你当前配置的所有源里,没有名为 5.12.8-0ubuntu1 的 libqt5qmlmodels5 这个版本。版本号可能是:
+dfsg:比如 5.12.8+dfsg-0ubuntu1 / 0ubuntu2.15.12.8-0ubuntu2.1 之类,而不是 0ubuntu1你给 libqt5core5a 查过 policy,可以看到真实存在的版本;但 libqt5qmlmodels5 你还没查。
在你机器上执行:
bashapt-cache policy libqt5qmlmodels5
或者更详细一点:
bashapt-cache madison libqt5qmlmodels5
你会看到类似这样的输出(下面只是举例):
textlibqt5qmlmodels5: 已安装:5.15.8-xxxx 候选: 5.12.8-0ubuntu2.1 版本列表: 5.12.8-0ubuntu2.1 500 500 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 Packages 5.12.8-0ubuntu1 500 500 http://mirrors.aliyun.com/ubuntu focal/universe amd64 Packages
你要照抄这里出现的完整版本号,包括 +dfsg、-0ubuntu2.1 之类的后缀。
假设 apt-cache policy libqt5qmlmodels5 给出的老版本是:
text5.12.8-0ubuntu2.1
那你的命令就应该写成:
bashsudo apt install --allow-downgrades \ libqt5core5a=5.12.8+dfsg-0ubuntu2.1 \ libqt5dbus5=5.12.8+dfsg-0ubuntu2.1 \ libqt5gui5=5.12.8+dfsg-0ubuntu2.1 \ libqt5network5=5.12.8+dfsg-0ubuntu2.1 \ libqt5widgets5=5.12.8+dfsg-0ubuntu2.1 \ libqt5qml5=5.12.8-0ubuntu2.1 \ libqt5quick5=5.12.8-0ubuntu2.1 \ libqt5qmlmodels5=5.12.8-0ubuntu2.1 \ libqt5svg5=5.12.8-0ubuntu2.1 \ libqt5waylandclient5=5.12.8-0ubuntu2.1 \ libqt5waylandcompositor5=5.12.8-0ubuntu2.1
关键点: 每个包后面的
=后面,必须是apt-cache policy真正显示出来的完整版本号,不能自己“猜”后缀。
如果 libqt5qmlmodels5 的版本是带 +dfsg 的,比如:
text5.12.8+dfsg-0ubuntu2.1
那就写:
bashlibqt5qmlmodels5=5.12.8+dfsg-0ubuntu2.1
如果你只是想从 5.15.x 降回系统自带的 5.12.x,而不执着于具体的 0ubuntu1 / 0ubuntu2.1,可以让 apt 自己选版本,不手写 =:
bashsudo apt install --allow-downgrades \ libqt5core5a/focal-updates \ libqt5dbus5/focal-updates \ libqt5gui5/focal-updates \ libqt5network5/focal-updates \ libqt5widgets5/focal-updates \ libqt5qml5/focal-updates \ libqt5quick5/focal-updates \ libqt5qmlmodels5/focal-updates \ libqt5svg5/focal-updates \ libqt5waylandclient5/focal-updates \ libqt5waylandcompositor5/focal-updates
/focal-updates 的意思是:用 focal-updates 仓库里的那个版本(一般就是 5.12.8 带安全更新的那一版)。
你现在是用 系统级 Qt 库在做降级,有几点要注意:
PyQt5==5.x、PySide2==5.x 这种方式,在用户空间解决如果你愿意,可以把 apt-cache policy libqt5qmlmodels5 的输出贴出来,我可以直接帮你拼好一条完整可执行的 apt install 命令。
apt-cache policy libqt5qmlmodels5
libqt5qmlmodels5:
已安装:5.15.8+dfsg-3
候选: 5.15.8+dfsg-3
版本列表:
*** 5.15.8+dfsg-3 100
100 /var/lib/dpkg/status
看你这段输出,其实已经把答案说完了 😂:
bashlibqt5qmlmodels5: 已安装:5.15.8+dfsg-3 候选: 5.15.8+dfsg-3 版本列表: *** 5.15.8+dfsg-3 100 100 /var/lib/dpkg/status
意思是:
libqt5qmlmodels5 版本是 5.15.8+dfsg-3所以:
bashsudo apt install libqt5qmlmodels5=5.12.8-0ubuntu1
这个版本在你当前所有 APT 源里 根本不存在,apt 只能报:
E: 未找到“libqt5qmlmodels5”的“5.12.8-0ubuntu1”版本
libqt5core5a 这些 5.12 包。(Launchpad)libqt5qmlmodels5 这个包,这个库是后来在新版本 Ubuntu(比如 22.04 jammy)里才单独拆出来的。(Ask Ubuntu)libqt5qmlmodels5=5.15.8+dfsg-3 很大概率是:
.deb,或者总结一下:
你想降级到的 5.12.8-0ubuntu1 这个版本,在 focal 的仓库里 从来就没出现过,所以 apt 不可能帮你降。
取决于你的目标是啥:
那你应该:
把这个“外来户”删掉(因为 focal 没有对应 5.12 版本):
建议先用模拟看看会删掉什么:
bashsudo apt remove --simulate libqt5qmlmodels5
如果输出看起来能接受,再真正执行:
bashsudo apt remove libqt5qmlmodels5
可能还会顺带删掉依赖它的一些包(比如某些 qml-module 开头的包),这是正常的。
其它 Qt 库用 “按仓库降级” 的方式,而不是手写版本号,例如:
bashsudo apt install --allow-downgrades \ libqt5core5a/focal-updates \ libqt5dbus5/focal-updates \ libqt5gui5/focal-updates \ libqt5network5/focal-updates \ libqt5widgets5/focal-updates \ libqt5qml5/focal-updates \ libqt5quick5/focal-updates \ libqt5svg5/focal-updates \ libqt5waylandclient5/focal-updates \ libqt5waylandcompositor5/focal-updates
xxx/focal-updates 的意思是:强制用 focal-updates 仓库中该包的版本(也就是 5.12.8 那批官方版本),不用你自己记具体 5.12.8+dfsg-0ubuntu2.1 之类的尾巴。
不要再在命令里写
libqt5qmlmodels5=5.12...了,因为 focal 就没有那玩意儿。
如果你是因为某个项目/软件需要 Qt 5.15 才搞来的 5.15.8+dfsg-3,那正确做法反而是:
AskUbuntu 上也有人专门提醒:把别的发行版中的 libqt5qmlmodels5 硬塞进 focal 会导致依赖要升级到 libqt5core5a>=5.14,而 focal 只有 5.12,这种混搭很容易把系统搞乱。(Ask Ubuntu)
这种需求,更推荐用:
apt-cache policy 已经告诉你:没有 5.12 版本可降,只有本地装着的 5.15.8+dfsg-3。libqt5qmlmodels5,/focal-updates 的方式把其它 Qt 包统一降回官方 5.12。如果你愿意把你最初要解决的“实际问题”(比如编译哪个项目、哪个程序运行报错)贴出来,我可以帮你看看是不是有更轻量、安全的方案,而不是在系统层面硬折腾 Qt。
sudo apt remove libqt5qmlmodels5
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libqt5qml5 libqt5waylandclient5
使用'sudo apt autoremove'来卸载它(它们)。
下列软件包将被【卸载】:
libqt5qmlmodels5 libqt5quick5 libqt5waylandcompositor5 qtwayland5
升级了 0 个软件包,新安装了 0 个软件包,要卸载 4 个软件包,有 443 个软件包未被升级。
解压缩后将会空出 10.2 MB 的空间。
您希望继续执行吗? [Y/n] y
(正在读取数据库 ... 系统当前共安装有 329923 个文件和目录。)
正在卸载 qtwayland5:amd64 (5.15.8-2) ...
正在卸载 libqt5waylandcompositor5:amd64 (5.15.8-2) ...
正在卸载 libqt5quick5:amd64 (5.15.8+dfsg-3) ...
正在卸载 libqt5qmlmodels5:amd64 (5.15.8+dfsg-3) ...
正在处理用于 libc-bin (2.36-6) 的触发器 ...
(zh_workflow_310) zzz@zzz-System-Product-Name:/etc/apt/sources.list.d$ sudo apt install --allow-downgrades \
libqt5core5a/focal-updates
libqt5dbus5/focal-updates
libqt5gui5/focal-updates
libqt5network5/focal-updates
libqt5widgets5/focal-updates
libqt5qml5/focal-updates
libqt5quick5/focal-updates
libqt5svg5/focal-updates
libqt5waylandclient5/focal-updates
libqt5waylandcompositor5/focal-updates
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 未找到“libqt5qml5”的“focal-updates”发布版本
E: 未找到“libqt5quick5”的“focal-updates”发布版本
E: 未找到“libqt5svg5”的“focal-updates”发布版本
E: 未找到“libqt5waylandclient5”的“focal-updates”发布版本
E: 未找到“libqt5waylandcompositor5”的“focal-updates”发布版本
问题很清楚了:
/focal-updates 这种写法只能用在这个包真的在 focal-updates 仓库里有版本的时候。
像这些包:
libqt5qml5libqt5quick5libqt5svg5libqt5waylandclient5libqt5waylandcompositor5在 Ubuntu 20.04(focal)里只有一个版本,发布在 focal 主仓库(release pocket),根本没有 focal-updates 这个 pocket 里的版本,所以:
bashlibqt5qml5/focal-updates
会直接报:
E: 未找到“xxx”的“focal-updates”发布版本
可以从 Ubuntu 的包网站看到这一点,比如:
libqt5qml5 最新就是 5.12.8-0ubuntu1,仓库是 focal / universe / base,没有其它 pocket (Launchpad)。
libqt5quick5、libqt5svg5 等同理,focal 里都是单一版本 5.12.8-0ubuntu1 (Launchpad)。
Qt Wayland 那几个(libqt5waylandclient5 / libqt5waylandcompositor5 / qtwayland5)也是同一个源包 qtwayland-opensource-src 5.12.8-0ubuntu1 生成的 (Launchpad)。
这些是你之前查过的 libqt5core5a 那一批:
libqt5core5alibqt5dbus5libqt5gui5libqt5network5libqt5widgets5它们都有 5.12.8+dfsg-0ubuntu2.1 这个安全更新版本,在 focal-updates / focal-security 里 (Launchpad)。
这里比较稳的写法是直接写版本号:
bashsudo apt install --allow-downgrades \ libqt5core5a=5.12.8+dfsg-0ubuntu2.1 \ libqt5dbus5=5.12.8+dfsg-0ubuntu2.1 \ libqt5gui5=5.12.8+dfsg-0ubuntu2.1 \ libqt5network5=5.12.8+dfsg-0ubuntu2.1 \ libqt5widgets5=5.12.8+dfsg-0ubuntu2.1
版本号可以用
apt-cache policy 包名自己再确认一遍,如果你想非常稳。
这些只有 focal 的 release 版本,没有 focal-updates:
libqt5qml5 → 5.12.8-0ubuntu1 (Launchpad)libqt5quick5 → 5.12.8-0ubuntu1 (Launchpad)libqt5svg5 → 5.12.8-0ubuntu1 (Ubuntu Updates)libqt5waylandclient5 → 5.12.8-0ubuntu1 (Launchpad)libqt5waylandcompositor5 → 5.12.8-0ubuntu1 (Launchpad)qtwayland5 → 5.12.8-0ubuntu1 (Launchpad)这些就不能写 /focal-updates,要么:
=版本号,要么/focal(因为它们就只有 release 版本)我给你一条“全家桶”命令,你可以直接试(注意这是一次性降回 5.12):
bashsudo apt install --allow-downgrades \ libqt5core5a=5.12.8+dfsg-0ubuntu2.1 \ libqt5dbus5=5.12.8+dfsg-0ubuntu2.1 \ libqt5gui5=5.12.8+dfsg-0ubuntu2.1 \ libqt5network5=5.12.8+dfsg-0ubuntu2.1 \ libqt5widgets5=5.12.8+dfsg-0ubuntu2.1 \ libqt5qml5=5.12.8-0ubuntu1 \ libqt5quick5=5.12.8-0ubuntu1 \ libqt5svg5=5.12.8-0ubuntu1 \ libqt5waylandclient5=5.12.8-0ubuntu1 \ libqt5waylandcompositor5=5.12.8-0ubuntu1 \ qtwayland5=5.12.8-0ubuntu1
如果里面某个包你确实不需要(比如你根本不用 Wayland),可以把对应那几行删掉再执行。
从这句输出看:
text正在处理用于 libc-bin (2.36-6) 的触发器 ...
2.36-6 是 Ubuntu 23.04 / Debian 12 的区间里才有的版本 (Launchpad)给你的诚恳建议是:
如果你执行上面那条大命令还有 “找不到版本” 之类的报错,下一步就要看:
bashapt-cache policy 出问题的那个包
看它的版本列表里到底有没有 5.12.8-0ubuntu1,那时候我们可以再一起分析到底是源没配对,还是优先级之类的问题。
sudo apt install --allow-downgrades \
libqt5core5a=5.12.8+dfsg-0ubuntu2.1
libqt5dbus5=5.12.8+dfsg-0ubuntu2.1
libqt5gui5=5.12.8+dfsg-0ubuntu2.1
libqt5network5=5.12.8+dfsg-0ubuntu2.1
libqt5widgets5=5.12.8+dfsg-0ubuntu2.1
libqt5qml5=5.12.8-0ubuntu1
libqt5quick5=5.12.8-0ubuntu1
libqt5svg5=5.12.8-0ubuntu1
libqt5waylandclient5=5.12.8-0ubuntu1
libqt5waylandcompositor5=5.12.8-0ubuntu1
qtwayland5=5.12.8-0ubuntu1
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
libmd4c0
使用'sudo apt autoremove'来卸载它(它们)。
建议安装:
qt5-image-formats-plugins qt5-qmltooling-plugins
推荐安装:
qt5-gtk-platformtheme
下列【新】软件包将被安装:
libqt5quick5 libqt5waylandcompositor5 qtwayland5
下列软件包将被【降级】:
libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5qml5 libqt5svg5 libqt5waylandclient5 libqt5widgets5
升级了 0 个软件包,新安装了 3 个软件包,降级了 8 个软件包,要卸载 0 个软件包,有 435 个软件包未被升级。
需要下载 11.8 MB 的归档。
解压缩后会消耗 8,260 kB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libqt5qml5 amd64 5.12.8-0ubuntu1 [1,438 kB]
获取:2 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libqt5network5 amd64 5.12.8+dfsg-0ubuntu2.1 [673 kB]
获取:3 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libqt5waylandclient5 amd64 5.12.8-0ubuntu1 [270 kB]
获取:4 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libqt5svg5 amd64 5.12.8-0ubuntu1 [131 kB]
获取:5 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libqt5widgets5 amd64 5.12.8+dfsg-0ubuntu2.1 [2,295 kB]
获取:6 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libqt5gui5 amd64 5.12.8+dfsg-0ubuntu2.1 [2,971 kB]
获取:7 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libqt5dbus5 amd64 5.12.8+dfsg-0ubuntu2.1 [208 kB]
获取:8 http://mirrors.aliyun.com/ubuntu focal-updates/universe amd64 libqt5core5a amd64 5.12.8+dfsg-0ubuntu2.1 [2,006 kB]
获取:9 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libqt5quick5 amd64 5.12.8-0ubuntu1 [1,335 kB]
获取:10 http://mirrors.aliyun.com/ubuntu focal/universe amd64 libqt5waylandcompositor5 amd64 5.12.8-0ubuntu1 [300 kB]
获取:11 http://mirrors.aliyun.com/ubuntu focal/universe amd64 qtwayland5 amd64 5.12.8-0ubuntu1 [166 kB]
已下载 11.8 MB,耗时 1秒 (8,150 kB/s)
dpkg: 警告: 即将把 libqt5qml5:amd64 从 5.15.8+dfsg-3 降级到 5.12.8-0ubuntu1
(正在读取数据库 ... 系统当前共安装有 329872 个文件和目录。)
准备解压 .../00-libqt5qml5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 libqt5qml5:amd64 (5.12.8-0ubuntu1) 并覆盖 (5.15.8+dfsg-3) ...
dpkg: 警告: 即将把 libqt5network5:amd64 从 5.15.8+dfsg-3 降级到 5.12.8+dfsg-0ubuntu2.1
准备解压 .../01-libqt5network5_5.12.8+dfsg-0ubuntu2.1_amd64.deb ...
正在解压 libqt5network5:amd64 (5.12.8+dfsg-0ubuntu2.1) 并覆盖 (5.15.8+dfsg-3) ...
dpkg: 警告: 即将把 libqt5waylandclient5:amd64 从 5.15.8-2 降级到 5.12.8-0ubuntu1
准备解压 .../02-libqt5waylandclient5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 libqt5waylandclient5:amd64 (5.12.8-0ubuntu1) 并覆盖 (5.15.8-2) ...
dpkg: 警告: 即将把 libqt5svg5:amd64 从 5.15.8-2 降级到 5.12.8-0ubuntu1
准备解压 .../03-libqt5svg5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 libqt5svg5:amd64 (5.12.8-0ubuntu1) 并覆盖 (5.15.8-2) ...
dpkg: 警告: 即将把 libqt5widgets5:amd64 从 5.15.8+dfsg-3 降级到 5.12.8+dfsg-0ubuntu2.1
准备解压 .../04-libqt5widgets5_5.12.8+dfsg-0ubuntu2.1_amd64.deb ...
正在解压 libqt5widgets5:amd64 (5.12.8+dfsg-0ubuntu2.1) 并覆盖 (5.15.8+dfsg-3) ...
dpkg: 警告: 即将把 libqt5gui5:amd64 从 5.15.8+dfsg-3 降级到 5.12.8+dfsg-0ubuntu2.1
准备解压 .../05-libqt5gui5_5.12.8+dfsg-0ubuntu2.1_amd64.deb ...
正在解压 libqt5gui5:amd64 (5.12.8+dfsg-0ubuntu2.1) 并覆盖 (5.15.8+dfsg-3) ...
dpkg: 警告: 即将把 libqt5dbus5:amd64 从 5.15.8+dfsg-3 降级到 5.12.8+dfsg-0ubuntu2.1
准备解压 .../06-libqt5dbus5_5.12.8+dfsg-0ubuntu2.1_amd64.deb ...
正在解压 libqt5dbus5:amd64 (5.12.8+dfsg-0ubuntu2.1) 并覆盖 (5.15.8+dfsg-3) ...
dpkg: 警告: 即将把 libqt5core5a:amd64 从 5.15.8+dfsg-3 降级到 5.12.8+dfsg-0ubuntu2.1
准备解压 .../07-libqt5core5a_5.12.8+dfsg-0ubuntu2.1_amd64.deb ...
正在解压 libqt5core5a:amd64 (5.12.8+dfsg-0ubuntu2.1) 并覆盖 (5.15.8+dfsg-3) ...
正在选中未选择的软件包 libqt5quick5:amd64。
准备解压 .../08-libqt5quick5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 libqt5quick5:amd64 (5.12.8-0ubuntu1) ...
正在选中未选择的软件包 libqt5waylandcompositor5:amd64。
准备解压 .../09-libqt5waylandcompositor5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 libqt5waylandcompositor5:amd64 (5.12.8-0ubuntu1) ...
正在选中未选择的软件包 qtwayland5:amd64。
准备解压 .../10-qtwayland5_5.12.8-0ubuntu1_amd64.deb ...
正在解压 qtwayland5:amd64 (5.12.8-0ubuntu1) ...
正在设置 libqt5core5a:amd64 (5.12.8+dfsg-0ubuntu2.1) ...
正在设置 libqt5dbus5:amd64 (5.12.8+dfsg-0ubuntu2.1) ...
正在设置 libqt5network5:amd64 (5.12.8+dfsg-0ubuntu2.1) ...
正在设置 libqt5qml5:amd64 (5.12.8-0ubuntu1) ...
正在设置 libqt5gui5:amd64 (5.12.8+dfsg-0ubuntu2.1) ...
正在设置 libqt5widgets5:amd64 (5.12.8+dfsg-0ubuntu2.1) ...
正在设置 libqt5waylandclient5:amd64 (5.12.8-0ubuntu1) ...
正在设置 libqt5quick5:amd64 (5.12.8-0ubuntu1) ...
正在设置 libqt5svg5:amd64 (5.12.8-0ubuntu1) ...
正在设置 libqt5waylandcompositor5:amd64 (5.12.8-0ubuntu1) ...
正在设置 qtwayland5:amd64 (5.12.8-0ubuntu1) ...
正在处理用于 libc-bin (2.36-6) 的触发器 ...
好爽,看日志这波操作已经成功把 Qt 全家桶降回 5.12 了 🎉
从输出里关键几行看:
libqt5core5a / libqt5gui5 / libqt5widgets5 / libqt5network5 / libqt5dbus5 都变成了:
5.12.8+dfsg-0ubuntu2.1
libqt5qml5 / libqt5quick5 / libqt5svg5 / libqt5waylandclient5 / libqt5waylandcompositor5 / qtwayland5 都是:
5.12.8-0ubuntu1
过程中出现的都是类似:
textdpkg: 警告: 即将把 XXX 从 5.15.8... 降级到 5.12.8... ... 正在设置 XXX (5.12.8-0ubuntu1) ...
这些 “警告” 只是提醒你在降级,不是错误,属于预期行为。
你现在可以自己确认一下版本是否统一成 5.12 了:
bashapt-cache policy libqt5core5a libqt5gui5 libqt5widgets5 libqt5qml5 libqt5quick5
大致应该都是类似:
text已安装:5.12.8... 候选:5.12.8... 版本列表: 5.12.8...
只要 “已安装” 和 “候选” 都是 5.12.8.xxx,就说明 apt 在以后不会想把它们升级回 5.15(除非你再加什么奇怪的源)。
目前看,你的 Qt 5.15 是从别的仓库/手动 .deb 搞进来的,现在那个源已经不存在,所以 apt 的候选版本就是 5.12.8(Ubuntu 官方的)。理论上不再会自动升到 5.15 了。
如果你还是不放心,可以给这些包加个 hold,让 apt 不去动它们,例如:
bashsudo apt-mark hold \ libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5widgets5 \ libqt5qml5 libqt5quick5 libqt5svg5 libqt5waylandclient5 libqt5waylandcompositor5 qtwayland5
以后如果你真的想取消锁定,再:
bashsudo apt-mark unhold \ libqt5core5a libqt5dbus5 libqt5gui5 libqt5network5 libqt5widgets5 \ libqt5qml5 libqt5quick5 libqt5svg5 libqt5waylandclient5 libqt5waylandcompositor5 qtwayland5
小提示:加 hold 的副作用是:如果将来有软件强制要求更高版本 Qt,apt 会抱怨依赖关系,而不是悄悄给你升级。
libmd4c0 和 autoremove输出里还有一行:
text下列软件包是自动安装的并且现在不需要了: libmd4c0 使用'sudo apt autoremove'来卸载它(它们)。
这是正常提示,你可以顺手清一下:
bashsudo apt autoremove
不删也没大问题,只是多占一点点空间。
从 apt 的角度来看:
5.12.8-0ubuntu1接下来关键就是:
✅ 你当初想解决的那个实际问题(编译/运行哪个程序)现在还报不报错。
如果还有报错,直接把报错贴出来(连同你跑的命令),我可以帮你一起顺着现在的这个干净 Qt 环境继续查;
如果已经能跑了,那这一步就算是收工了 😄
sudo dpkg -i ./sogoupinyin_2.4.0.3469_amd64.deb
正在选中未选择的软件包 sogoupinyin。
(正在读取数据库 ... 系统当前共安装有 330152 个文件和目录。)
准备解压 .../sogoupinyin_2.4.0.3469_amd64.deb ...
正在解压 sogoupinyin (2.4.0.3469) ...
dpkg: 依赖关系问题使得 sogoupinyin 的配置工作不能继续:
sogoupinyin 依赖于 fcitx-frontend-qt5;然而:
未安装软件包 fcitx-frontend-qt5。
sogoupinyin 依赖于 fcitx-libs | libfcitx-qt0;然而:
未安装软件包 fcitx-libs。
未安装软件包 libfcitx-qt0。
sogoupinyin 依赖于 libqt5quickwidgets5;然而:
未安装软件包 libqt5quickwidgets5。
sogoupinyin 依赖于 qml-module-qtquick2;然而:
未安装软件包 qml-module-qtquick2。
dpkg: 处理软件包 sogoupinyin (--install)时出错:
依赖关系问题 - 仍未被配置
正在处理用于 gnome-menus (3.36.0-1ubuntu1) 的触发器 ...
正在处理用于 desktop-file-utils (0.24-1ubuntu3) 的触发器 ...
正在处理用于 mime-support (3.64ubuntu1) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.17-2) 的触发器 ...
在处理时有错误发生:
sogoupinyin
现在这个报错是典型的 dpkg 装本地 .deb 没有自动拉依赖导致的,问题本身不大 👍
报错里缺的东西已经列得很清楚了:
fcitx-frontend-qt5fcitx-libs 或 libfcitx-qt0libqt5quickwidgets5qml-module-qtquick2你现在做两步就能收尾:
先用 apt 把缺的包装上,同时顺便把 sogoupinyin 配置完成:
bashsudo apt update # 自动修复依赖并完成 sogoupinyin 的安装 sudo apt -f install
这一步会看到类似提示,要安装上面这些依赖包,直接选 Y 确认就行。
如果非常意外地,
apt -f install说要卸载 sogoupinyin 而不是安装依赖,那就按n取消,然后用下面的“手动装依赖”方式。
如果你想更“显式”一点,可以直接把依赖装上,然后再重新装 sogou:
bashsudo apt update sudo apt install \ fcitx fcitx-configtool \ fcitx-frontend-qt5 \ fcitx-libs libfcitx-qt0 \ libqt5quickwidgets5 \ qml-module-qtquick2
依赖都 OK 之后,再安装 sogou(推荐用 apt 而不是 dpkg,这样即使将来有别的依赖也会自动处理):
bashsudo apt install ./sogoupinyin_2.4.0.3469_amd64.deb # 或者继续用你原来的: # sudo dpkg -i ./sogoupinyin_2.4.0.3469_amd64.deb
装完后看一眼:
bashdpkg -l | grep sogoupinyin
正常会有一行类似:
textii sogoupinyin 2.4.0.3469 amd64 Sogou Pinyin Input Method
如果你是第一次用 fcitx + 搜狗拼音,大概还需要:
bashim-config
在里面选用 fcitx 作为输入法框架,然后重新登录图形界面,再在 fcitx 配置里添加“搜狗拼音”。
你可以先跑一遍:
bashsudo apt -f install
执行过程有任何奇怪的提示(比如要卸载 sogoupinyin),直接把那段输出贴出来,我帮你一起看看是不是依赖冲突还是源的问题。