Frage Bildschirm Tearing Nvidia / Intel


Ich habe gerade Ubuntu auf meinem Laptop (GTX 960M / I7-6700HQ - Intel HD530) installiert und es ließ mich nicht über den Lockscreen hinaus, bis ich den nvidia Treiber neu installierte (es installierte Treiber 370, ich benutzte gerade ubuntu-drivers autoinstall).

Nach der Installation des NVIDIA-Treibers funktioniert mein System jetzt, aber ich habe ein paar schreckliche Bildschirmabrisse, selbst wenn man nur Fenster bewegt und beim Scrollen durch Webseiten noch schlimmer ist.

Dinge, die ich bisher versucht habe:

  • Ändern der GPU zur Verwendung in NVidia XServer-Einstellungen
  • Hinzufügen von "TearFree" "True" zu xorg.conf für das Intel-Gerät

Was kann ich noch versuchen?


1
2017-08-30 12:22


Ursprung




Antworten:


Ich habe ein Skript programmiert, das zwischen Intel und NVIDIAs Grafikkarte wechselt. Neben dem Wechsel zwischendurch wird auch das Video / Screen Tearing bei Verwendung der INTEL Grafikkarte geclippt. NVIDIA-Grafikkarte zeigt immer noch Probleme mit Video- / Bildschirmreißen, für die ich bisher keine Lösung gefunden habe.
Hier ist das Skript auf 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

2
2018-03-27 03:57