本周升级后(14.04),Ubuntu 桌面在挂起/恢复或连接外接显示器时无法工作

本周升级后(14.04),Ubuntu 桌面在挂起/恢复或连接外接显示器时无法工作

我很高兴在联想 Y50 上使用 14.04。安装时,我在使 NVIDIA GeForce GTX 860M 2GB 运行硬件加速等方面遇到了一些问题,但最后一切都正常了。

本周(大约 2015 年 2 月 25 日),一次更新破坏了这种美好的平衡:我无法在暂停后恢复,并且无法插入或拔下外接显示器,否则会出现一个奇怪的问题:

  1. 桌面将其一半大小“移动”到右侧。
  2. 鼠标可以使用,但我无法点击任何东西。

唯一的解决方法是关闭 Xorg,并丢失会话。我尝试了以下方法,但没有成功:

  1. 降级 Compiz(第一个怀疑,它本周升级了)。没什么。
  2. 安装所有可能的 NVIDIA 驱动程序:

    • 新派
    • Nvidia 304 和 Nvidia 304 更新(列入黑名单并清除 nouveau)
    • Nvidia 331 和 Nvidia 331 更新(来自存储库和 NVidea 网站,列入黑名单并清除 nouveau)
    • Nvidia 340(来自 Xorg-edgers ppa)。(列入黑名单并清除 nouveau)
    • 在每种情况下,我都先清除以前的驱动程序,重新配置 Xorg 等等。
  3. 重新安装 Unity 和 Ubuntu 桌面

说实话我不知道还能做什么,但这种情况很烦人。我该如何解决这个问题?

答案1

同样的问题,上周我的 LG 笔记本电脑(配备 Intel Sandy Bridge 和 Nvidia GForce)开始以您描述的方式冻结。过去,它有时会冻结。我带着笔记本电脑四处走动,所以在家里和工作时我使用双屏,但在火车上(从家到工作地点再回来)。我没有外接显示器。;-) 现在每次我连接/断开外接显示器时,Unity 都会冻结。

我的解决方案Ctrl++ AltF1

setsid unity

这让 Unity 再次响应,但我错过了菜单栏。然后我在 Unity 中打开一个终端并再次输入

setsid unity

并且它可以工作直到我下次拔下/插入双屏。

我也在考虑放弃 Unity,但我需要找到一个可以在分辨率截然不同的双屏幕上看起来不错的桌面。

答案2

我找到了一个解决方法。

我创建了两个脚本(其中一个是我在这个网站上找到的,但现在我丢失了链接)。

我们来调用第一个脚本:“discover_session_bus_address.sh”

#!/bin/bash

# Remember to run this script using the command "source ./filename.sh"

# Search these processes for the session variable 
# (they are run as the current user and have the DBUS session variable set)
compatiblePrograms=( nautilus kdeinit kded4 pulseaudio trackerd )

# Attempt to get a program pid
for index in ${compatiblePrograms[@]}; do
   PID=$(pidof -s ${index})
    if [[ "${PID}" != "" ]]; then
        break
    fi
done
if [[ "${PID}" == "" ]]; then
    echo "Could not detect active login session"
    return 1
fi

QUERY_ENVIRON="$(tr '\0' '\n' < /proc/${PID}/environ | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
if [[ "${QUERY_ENVIRON}" != "" ]]; then
    export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"
    echo "Connected to session:"
    echo "DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}"
else
    echo "Could not find dbus session ID in user environment."
    return 1
fi

return 0

保存它,然后在同一文件夹中创建另一个名为“recover_unity.sh”的脚本。

代码:

#!/bin/bash

export DISPLAY=:0
source ./discover_session_bus_address.sh unity
unity &

保存并赋予两个脚本执行权限: chmod +x discover_session_bus_address.sh chmod +x recovery_unity.sh

现在,每次 Unity 冻结时,请使用 CTRL+ALT+F1,登录并在保存这些脚本的文件夹中键入

source recover_unity.sh

答案3

好的,这是我的最终解决方案:

我使用 ppa-purge (sudo apt-get install ppa-purge) 从我的存储库中删除了所有可疑的 PPA

sudo add-apt-repository ppa:xorg-edgers/ppa 

如果你之前已经禁用了 ppa

sudo apt-get update 

(同上)

sudo ppa-purge  ppa:xorg-edgers/ppa
sudo add-apt-repository --remove ppa:xorg-edgers/ppa 

我不记得这是否有必要或者 ppa-purge 是否已经这样做了)

然后与 ppa ppa:bumblebee/stable 相同

然后

sudo apt-get purge xserver-xorg*
sudo apt-get purge nvidia*

然后

sudo apt-get install nvidia-331
sudo reboot

重启后,不仅一切都运行正常(插入或拔出外接显示器、暂停等),而且硬件图形加速比以往更快!(运行 glxspheres )

相关内容