1 votes

Déchirement d'écran Nvidia/Intel

Je viens d'installer Ubuntu sur mon ordinateur portable (GTX 960M / I7-6700HQ - Intel HD530) et il ne me laissait pas passer le lockscreen jusqu'à ce que je réinstalle le pilote nvidia (il a installé le pilote 370, j'ai juste utilisé ubuntu-drivers autoinstall).

Après avoir installé le pilote nvidia, mon système fonctionne maintenant mais j'ai des déchirures d'écran horribles, même en déplaçant simplement Windows et en faisant défiler les pages web, c'est encore pire.

Les choses que j'ai essayées jusqu'à présent :

  • Modification du GPU à utiliser dans les paramètres du NVidia XServer
  • Ajout de "TearFree" "true" à xorg.conf pour le dispositif intel

Que puis-je essayer d'autre ?

2voto

Bruno Points 123

J'ai codé un script qui commute entre la carte vidéo d'Intel et celle de NVIDIA. En plus de passer de l'une à l'autre, il FIXE également le déchirement de la vidéo/de l'écran lors de l'utilisation de la carte vidéo INTEL. La carte vidéo NVIDIA présente toujours des problèmes de vidéo/ déchirement d'écran auxquels je n'ai pas trouvé de solution jusqu'à présent.
Voici le script sur GitHub

#!/bin/bash
# -------------------------------------------------------
# A shell script that fixes screen tearing on intel video cards and switches between nvidia and intel graphic cards
# Written by: Bruno Assis
# Created on: 25/03/2017
# -------------------------------------------------------

#asks for sudo if the user uid != 0 then calls the script again with the current user name
(( EUID != 0 )) && exec sudo -- "$0" "$@$USER"

#-----------------
#----Settings-----
#-----------------

PREVIOUS_USER=$1
SCRIPT_NAME="20-intel.conf"
CONF_BASE_PATH="/etc/X11/"
CONF_BASE_DIR="xorg.conf.d"
CONF_PATH="/etc/X11/$CONF_BASE_DIR/"
CONF_FILE_PATH="$CONF_PATH$SCRIPT_NAME"
CURRENT_VIDEO_CARD=""

#-----------------
#----Functions----
#-----------------

#creates the config file.
function CreateTearingFreeFile {
    echo 'Section "Device"' >> $1
    echo '   Identifier  "Intel Graphics"' >> $1
    echo '   Driver      "intel"' >> $1
    echo '   Option      "TearFree"    "true"' >> $1
    echo "EndSection" >> $1
}

#switches the environment to use nvidia graphics card
function SwitchToNvdia {
    echo -e "\n Switching to nvidia."
    rm $CONF_FILE_PATH
    prime-select nvidia
}

#switches the environment to use intel's graphics card
function SwitchToIntel {
    echo -e "\n Switching to Intel."
    cd $CONF_PATH
    CreateTearingFreeFile $SCRIPT_NAME
    prime-select intel
}

function LogoutFromCurrentSession {
    echo -e "\n You'll need to logout in order to changes take effect."
    echo -e "\n Do you wish to logout now? (y | n)" 
    read -n 1 option
    if [[ "$option" = "y" || "$option" = "Y" ]]; then
        #log out from the current session for the current user
        su -c "kill -9 -1" "$PREVIOUS_USER"
    fi
}

function SetupEnvironment {

    if [ ! -d "$CONF_BASE_PATH" ]; then 
        echo -e "\n error: could not find $CONF_BASE_PATH."
        exit 1
    else
        if [ ! -d "$CONF_PATH" ]; then 
            echo -e "\n could not find $CONF_BASE_DIR."
            echo -e "\n trying to create it."
            cd $CONF_BASE_PATH
            mkdir $CONF_BASE_DIR
            if [ ! -d "$CONF_PATH" ]; then
                echo -e "\n could not create $CONF_BASE_DIR folder."
                exit 1
            else
                echo -e "\n $CONF_BASE_DIR folder created successfully."
            fi
        fi
    fi
}

function CheckForCurrentVideoCardInUse {
    local _VIDEO_CARD=`glxinfo|egrep "OpenGL vendor|OpenGL renderer*"`
    if [[ $_VIDEO_CARD == *"NVIDIA"* && $_VIDEO_CARD == *"GeForce"* ]]; then
        CURRENT_VIDEO_CARD="NVIDIA"
    elif [[ $_VIDEO_CARD == *"Intel"* && $_VIDEO_CARD == *"Intel"* ]]; then
        CURRENT_VIDEO_CARD="INTEL"
    else
        ErrorHandler
    fi
}

function ErrorHandler {
        echo -e "\n Could not find your video card"
        echo -e "\n Please use glxinfo to check if the name is correct or if you are using NVIDIA's or Intel's card"
        exit 1
}

#------------------
#--Program Flow ---
#------------------

#Setups the environment if it hasn't already been set.

CheckForCurrentVideoCardInUse
SetupEnvironment

echo -e " current video card in use: $CURRENT_VIDEO_CARD"

#If the file exists then we should delete it and start nvidia

if [ $CURRENT_VIDEO_CARD == "INTEL" ]; then
    echo -e "\n Switch graphics card to NVIDIA? (y | n)"
    read -n 1 option
    if [[ "$option" == "y" || "$option" == "Y" ]]; then
        SwitchToNvdia
        LogoutFromCurrentSession
    fi
elif [ $CURRENT_VIDEO_CARD == "NVIDIA" ]; then
    echo -e "\n Switch graphics card to INTEL? (y | n)"
    read -n 1 option
    if [[ "$option" == "y" || "$option" == "Y" ]]; then
        SwitchToIntel
        LogoutFromCurrentSession
    fi
else
    ErrorHandler
fi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X