web-dev-qa-db-fra.com

Ubuntu-desktop ne fonctionne pas lors de la suspension / reprise ou de la connexion d'un moniteur externe - après la mise à niveau cette semaine (14.04)

J'utilisais joyeusement 14.04 avec mon Lenovo Y50. Lors de l’installation, j’ai eu quelques problèmes à faire fonctionner mon NVIDIA GeForce GTX 860M 2 Go avec l’accélération matérielle, etc., mais à la fin, tout s’est bien passé.

CETTE SEMAINE (autour du 25/02/2015) une mise à jour a détruit ce bel équilibre: je ne peux pas reprendre après la suspension et je ne peux pas brancher ou débrancher mon moniteur externe sans avoir un problème étrange:

  1. Le bureau "déplace" la moitié de sa taille vers la droite.
  2. La souris fonctionne, mais je ne peux rien cliquer.

La seule solution consiste à tuer le Xorg et à perdre la session. Ce que j'ai essayé, sans succès:

  1. Downgrade Compiz (le premier suspect, il a été mis à jour cette semaine). Rien.
  2. Installez TOUS les pilotes NVIDIA possibles:

    • Nouveau
    • Mises à jour Nvidia 304 et Nvidia 304 (mise à jour des listes noires et purge nouvelle)
    • Mises à jour de Nvidia 331 et Nvidia 331 (à partir du référentiel et du site Web de NVidea, listes noires et purge nouveau)
    • Nvidia 340 (de Xorg-edgers ppa). (liste noire et purge nouveau)
    • Dans tous les cas, j'ai déjà purgé les pilotes précédents, reconfiguré Xorg, etc., etc., etc.
  3. Réinstallation de Unity et Ubuntu-desktop

Honnêtement, je ne sais pas quoi faire d'autre, mais cette situation est très agaçante. Comment puis-je résoudre ce problème?

3
miltonlaufer

Ok, voici ma solution finale:

J'ai supprimé tous les PPA suspects de mon référentiel en utilisant ppa-purge (Sudo apt-get install ppa-purge).

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

juste au cas où vous auriez désactivé le ppa avant

Sudo apt-get update 

(idem)

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

Je ne me souviens pas si cela est nécessaire ou si ppa-purge le fait déjà)

puis la même chose avec ppa ppa: bumblebee/stable

ensuite

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

ensuite

Sudo apt-get install nvidia-331
Sudo reboot

après le redémarrage, non seulement tout fonctionne parfaitement (plug-in ou débranchement du moniteur externe, suspension, etc.), mais l'accélération graphique matérielle est plus rapide que jamais! (en cours d'exécution glxspheres)

0
miltonlaufer

Même problème, ici, la semaine dernière, mon ordinateur portable LG avec Intel Sandy Bridge et Nvidia GForce commence à geler de la manière que vous décrivez. Dans le passé, il pouvait geler de temps en temps. Je me déplace avec mon ordinateur portable, donc à la maison et au travail, j’utilise un double écran mais dans le train (de la maison au bureau). Je n'ai pas d'affichage externe. ;-) Maintenant, chaque fois que je connecte/déconnecte l'écran externe, l'unité se fige.

Ma solution Ctrl+Alt+F1:

setsid unity

Cela permet à Unity d’être réactif à nouveau, mais la barre de menus me manque. Puis j'ouvre un terminal dans Unity et remets

setsid unity

et cela fonctionne jusqu'à la prochaine fois que je débranche/branche le double écran.

Je pense aussi à m'éloigner de l'unité, mais je dois trouver un bon ordinateur de bureau qui a l'air bien avec des écrans doubles de résolutions très différentes.

1

J'ai trouvé une solution de contournement.

J'ai créé deux scripts (l'un d'entre eux, je l'ai trouvé sur ce site, mais maintenant j'ai perdu le lien).

Appelons le premier script: "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

Enregistrez-le puis, dans le même dossier, créez un autre script appelé "recover_unity.sh".

Code:

#!/bin/bash

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

sauvegardez-le et donnez les deux autorisations d'exécution de script: chmod + x discover_session_bus_address.sh chmod + x recover_unity.sh

Maintenant, chaque fois que l’unité se fige, utilisez CTRL + ALT + F1, connectez-vous et, dans le dossier où ces scripts ont été enregistrés, tapez

source recover_unity.sh
0
miltonlaufer