2018 年 2 月 15 日 compiz 更新导致 Unity 崩溃

2018 年 2 月 15 日 compiz 更新导致 Unity 崩溃

compiz 更新强制删除unityubuntu-desktop的 16.04 Ubuntu 系统。

缺少但需要的有问题的包unity似乎是compiz-core-abiversion-20151010。它似乎是虚拟包,我找不到可以下载的。

在此处输入图片描述

碰巧的是,我主要在这个系统上使用 LXDE,但如果我使用 Unity,我会非常不高兴……

由于我偶尔会使用 Unity 桌面,有没有什么办法可以解决这个问题?

编辑:相关问题层出不穷。看起来质量问题严重

“保留”了更新包,想要卸载 Unity 吗?

compiz 升级 卸载 unity

Ubuntu TaskBar 不见了。启动器丢失

你们刚才做了什么!对我的两个 16.04 环境的更新都导致桌面崩溃!

编辑2: Bug 1749839 已提交至启动板

答案1

我找到了一个解决办法。apt-get 无法处理这种情况,但是 aptitude 可以处理。

sudo aptitude install ubuntu-desktop

请注意,aptitude 提供的第一个解决方案无法解决问题,因为它选择不安装该软件包。我第一次不得不选择否,然后 aptitude 提供了第二个解决方案,即降级导致所有问题的 compiz 软件包。降级解决了依赖性问题,然后重新安装了 ubuntu-desktop 和 unity。

答案2

非常奇怪的情况。
是的compiz-core-abiversion-20151010 在 xenial 和 zesty 上是虚拟的,但它是由以下提供的compiz-core

$ apt-cache show compiz-core  | grep "Version\|Provides\|Package"
Package: compiz-core
Version: 1:0.9.12.3+16.04.20180221-0ubuntu1
Provides: compiz-core-abiversion-20180221
Package: compiz-core
Version: 1:0.9.12.2+16.04.20160415-0ubuntu1
Provides: compiz-core-abiversion-20151010

因此 APT 和 dpkg 都知道它们两个。

完整家庭名单compiz-core-abiversion如下:

$ aptitude search compiz-core-abiversion-
v   compiz-core-abiversion-20151010                                -
v   compiz-core-abiversion-20151010:i386                           -
v   compiz-core-abiversion-20180221                                -
v   compiz-core-abiversion-20180221:i386                           -

我们知道这里compiz-core-abiversion-20151010是无法安装的:

$ sudo apt-get install compiz-core-abiversion-20151010
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package compiz-core-abiversion-20151010 is a virtual package provided by:
  compiz-core 1:0.9.12.2+16.04.20160415-0ubuntu1 [Not candidate version]

E: Package 'compiz-core-abiversion-20151010' has no installation candidate

但我们可以安装更新的(实际)版本:

$ sudo apt-get install compiz-core-abiversion-20180221
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'compiz-core' instead of 'compiz-core-abiversion-20180221'
The following additional packages will be installed:
  compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0 libunity-core-6.0-9 unity unity-schemas unity-services
The following packages will be upgraded:
  compiz-core compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0 libunity-core-6.0-9 unity unity-schemas
  unity-services
10 upgraded, 0 newly installed, 0 to remove and 32 not upgraded.
Need to get 5 302 kB of archives.
After this operation, 278 kB of additional disk space will be used.
Do you want to continue? [Y/n] n

因此,在正常一致的系统上,我们只需要安装所有升级。
但如果unity软件包被删除,我们可以使用以下命令安装它:

sudo aptitude update
sudo aptitude safe-upgrade
sudo aptitude install unity ubuntu-desktop

注1: 我的 Ubuntu 16.04 LTS 安装有 Unity 和 MATE DE(1 个干净赛尼尔和 3 岁精确的->可靠->赛尼尔) 无需我的干预即可在定期升级后正常工作。所有这些系统都没有尝试删除 Unity 或ubuntu-desktop升级期间。当然xenial-proposed 被禁用在我的系统上,因为我不想将我的 Ubuntu LTS 转变为尖端的可自破解的 ArchLinux。

笔记2:由于已从compiz-core-abiversion-20170630存储库中删除,我于 2018-03-12 编辑了我的答案。

答案3

假设您已登录并且您的 UI 因没有 Unity 而卡住,您可以执行以下操作:

  1. Ctrl使用+ Alt+转到 tty4 F4
  2. 登录。
  3. 安装aptitude

    sudo apt install aptitude
    
  4. unity使用以下方式安装aptitude

    sudo aptitude install unity
    

然后它会告诉你有一个冲突的软件包。你回答'n'后它会建议你降级 compiz。继续并接受它。

答案4

这是不到 6 个月内 Ubuntu 团队第二次在未进行任何测试且未破坏正在运行的 Ubuntu 系统的情况下提出更新建议。

这些家伙最近开始试图用虚假的、未经测试的更新提案来破坏当前的 LTS 版本......这是新鲜事,直到去年才发生过。

解决方案是NEVER install提出所谓的Partial Upgrade... 您仍然可以通过Synaptic逐个软件包更新您的系统(尽管为了便于理解,它Synaptic现在已从官方版本中删除)... 直到您阻止所有有缺陷的版本更新。以下是示例:

#!/bin/sh
#
# Add nemo package to update blacklist
# Run script as super user i.e. sudo ./block-upd-unity.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "nemo hold" | dpkg --set-selections
echo "nemo-data hold" | dpkg --set-selections
echo "nemo-fileroller hold" | dpkg --set-selections

然后在当前目录中按名称运行该脚本,例如:

$ ./block-upd-nemo

解除封锁

#!/bin/sh
#
# Remove nemo package from update blacklist
# Run script as super user i.e. sudo ./block-upd-unity.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "nemo install" | dpkg --set-selections
echo "nemo-data install" | dpkg --set-selections
echo "nemo-fileroller install" | dpkg --set-selections

然后

$ ./unblock-upd-nemo

compiz在 Synaptic 中你可以看到一个很长的相关软件包列表,Xenial LTS删除这些软件包会导致软件包损坏:

ubuntu-desktop unity unity-tweak-tool unsettings ...

要阻止的软件包包括:

[由于我错过了受影响的 Unity 软件包,因此列表已更新]

compiz compiz-core compiz-dev compiz-gnome compiz-plugins compiz-plugins-default compiz-plugins-extra compiz-plugins-main compiz-plugins-main-default compizconfig-settings-manager libcompizconfig0 libdecoration0 libdecoration0-dev python-compizconfig libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services

相当长的列表。可通过 Shell 脚本进行管理。

恢复解决方案是从 Xenial 安装 USB 启动并执行chroot。转到Launchpad 网站 compiz下载Release (main)软件包并强制安装,dpkg -i *.deb然后阻止所有更新,或者proposed从更新配置中删除版本。

[更新]:你还需要去Launchpad 网站 unity并下载Release (main)受影响的软件包(参见下面的脚本)。

如果您不熟悉,请通过 Google 搜索。

compiz这是我刚刚完成的阻止脚本:

[由于我错过了受 Unity 影响的软件包,因此进行了更新]

#!/bin/sh
#
# Add compiz package to update blacklist
# Run script as super user i.e. sudo ./block-upd-compiz.sh
#

if [ $(id -u) != 0 ]; then
   echo "This script requires root permissions"
   sudo "$0"
   exit
fi
echo "compiz hold" | dpkg --set-selections
echo "compiz-core hold" | dpkg --set-selections
echo "compiz-dev hold" | dpkg --set-selections
echo "compiz-gnome hold" | dpkg --set-selections
echo "compiz-plugins hold" | dpkg --set-selections
echo "compiz-plugins-default hold" | dpkg --set-selections
echo "compiz-plugins-extra hold" | dpkg --set-selections
echo "compiz-plugins-main hold" | dpkg --set-selections
echo "compiz-plugins-main-default hold" | dpkg --set-selections
echo "compizconfig-settings-manager hold" | dpkg --set-selections
echo "libcompizconfig0 hold" | dpkg --set-selections
echo "libdecoration0 hold" | dpkg --set-selections
echo "libdecoration0-dev hold" | dpkg --set-selections
echo "python-compizconfig hold" | dpkg --set-selections
echo "libunity-core-6.0-9 hold" | dpkg --set-selections
echo "libunity-core-6.0-dev hold" | dpkg --set-selections
echo "unity hold" | dpkg --set-selections
echo "unity-schemas hold" | dpkg --set-selections
echo "unity-services hold" | dpkg --set-selections

不要忘记将脚本设置为可执行文件...

$ chmod a+x block-upd-compiz

[后续]:在运行 Shell 脚本解除对compiz和 的19 个软件包的阻止后unity,我尝试了该N0rbet解决方案,似乎有效:

$ sudo apt-get install compiz-core-abiversion-20170630
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'compiz-core' instead of 'compiz-core-abiversion-20170630'
The following additional packages will be installed:
  compiz-dev compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0
  libdecoration0-dev libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services
The following packages will be upgraded:
  compiz-core compiz-dev compiz-gnome compiz-plugins compiz-plugins-default libcompizconfig0 libdecoration0
  libdecoration0-dev libunity-core-6.0-9 libunity-core-6.0-dev unity unity-schemas unity-services
13 upgraded, 0 newly installed, 0 to remove and 13 not upgraded.
Need to get 5,410 kB of archives.
After this operation, 283 kB of additional disk space will be used.
Do you want to continue? [Y/n] y

相关内容