
Ich habe gerade Ubuntu auf meinem Laptop (GTX 960M / I7-6700HQ – Intel HD530) installiert und es ließ mich nicht über den Sperrbildschirm hinaus, bis ich den Nvidia-Treiber neu installiert hatte (es wurde Treiber 370 installiert, ich habe einfach die automatische Installation von Ubuntu-Treibern verwendet).
Nach der Installation des NVIDIA-Treibers funktioniert mein System nun, aber ich habe ein fürchterliches Screen Tearing, sogar beim Verschieben von Fenstern, und beim Scrollen durch Webseiten ist es sogar noch schlimmer.
Dinge, die ich bisher versucht habe:
- Ändern der zu verwendenden GPU in den NVidia XServer-Einstellungen
- Hinzufügen von "TearFree" "true"
xorg.conf
für das Intel-Gerät
Was kann ich sonst noch versuchen?
Antwort1
Ich habe ein Skript codiert, das zwischen den Grafikkarten von Intel und NVIDIA umschaltet. Neben dem Umschalten zwischen den beiden behebt es auch das Problem des Video-/Bildschirmrisses bei Verwendung der INTEL-Grafikkarte. Die NVIDIA-Grafikkarte zeigt immer noch Probleme mit dem Video-/Bildschirmriss, 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