Vielleicht hift das weiter für Optimus:
Einrichten von Optimus in der neuesten Arch-Version Stand 1.3.2017
siehe
https://forum.archlinux.de/viewtopic.php?id=30219
Zuerst möchte ich die evtl auftretenen Probleme, je nach System, beschreiben.
1. Mit Intel-Treiber könnte es zu einem schwarzer Bildschirm kommen. Das passiert auf einigen Systemen wenn in
/usr/lib/modprobe.d blacklist – optionen für nouveau oder nvidia stehen
2. Bei wenigen Systemen führt es zu Startproblemen (Intel), wenn modesetting genutzt wird und gleichzeitigt nouveau per blacklist abgeschaltet ist. Womit der nouveau div. Probleme mit modesetting erzeugt. Nvidia macht in Verbindung mit nouveau ebenfalls Probleme.
Daher empfehle ich den xf86-video-nouveau zu deinstallieren.
Anmerkung:
Unter Manjaro sollte man die Verzeichnisse ebenfalls so erstellen und die mhwd‘s unberührt lassen, ausser die Dateien in modprobe.d sowie modules-load.d sollten keinen Inhalt haben aber vorhanden sein.
Optimus:
Es greifen mehrere Scripte und Configurationsdateien ineinander. Diese sind:
1. 20-prime-provider-sh in /etc/X11/xinit/ xinitrc.d/
2. prime.offload in /sbin/
3. prime-next-gpu in /bin/
4. prime-select in /bin/
5. und die Config prime-next-gpu.conf in /etc/ sowie die intel.conf und die nvidia.conf in /etc/X11/config.d
Prinzip:
der Script prime-next-gpu überprüft ob die prime-next-gpu.conf vorhanden ist (wird gegebenfalls erstellt), fragt die prime-next-gpu.conf ab und übernimmt den Wert für prime-select.
Nun startet dieser Script /bin/prime-select und übernimmt den entsprechenden Wert von prime-next-gpu.
.
Jetzt setzt prime-select die entsprechenden Configurationsdateien wie ein Link (10-xorg.conf) in /etc/X11/xorg.conf.d.
Weiter wird in modprobe.d und modules-load.d die Konfigurationsdateien modules.conf angelegt mit dem entsprechenden Inhalten. Eventuelle Dateien in /usr/lib/modprobe.d (nvidia.conf etc.) werden entfernt. (Muß evtl angepasst werden)
Der Script prime-offload wird über xinitrc.d/20-prime-provider.sh gestartet und nur ausgeführt wenn das Modul nvidia geladen ist nun werden die Provider gesucht, zuletzt wird xrandr --setprovideroutputsource "$sink" "$src" sowie xrandr –auto oder je nach dem was man braucht. Beispiel steht in diesem Script.
Anmerkung:
Das Verzeichniss /etc/X11/xinit/xinitrc.d für die 20-prime-provider.sh habe ich gewählt um unhabhängig gegenüber Displaymanager zu sein.
Nach einem Neustart sollte nun die entsprechend Karte laufen.
Voraussetzung:
Die Configurationsdateien intel.conf, nvidia.conf sowie das Verzeichniss config.d sollten in /etc/X11/ vorhanden sein, evtl erstellen.
Hier die intel.conf
Section "Device"
Identifier "Intel"
Driver "intel"
Option "DRI" "3"
Option "AccelMethod" "sna"
EndSection
Section "DRI"
Group "video"
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
sowie die nvidia.conf
Section "OutputClass"
Identifier "intel"
MatchDriver "i915"
Driver "modesetting"
EndSection
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "PrimaryGPU" "yes"
ModulePath "/usr/lib/nvidia/xorg"
EndSection
Die Datei prime-next-gpu.conf wird, falls nicht vorhanden, angelegt und auf intel gesetzt. Es wird also beim ausführen von prime-next-gpu das System auf den Intel-Treiber gesetzt.
Weiterhin sollten nvidia (oder nvidia-lts) sowie xf-86-video-intel installiert sein.
Man kann nun mit
sudo /bin/prime-next-gpu die Grafikkarte starten, ist die intel aktiv wird die nvidia eingebunden und läuft nach einem Neustart und umgekehrt. Man könnte sich ein Icon auf dem Desktop anlegen und mit prime-next-gpu verknüpfen.
Hier nochmals alle Scripte. Viel Spass beim probieren, experimentieren.
20-prime-provider.sh =
#! /bin/sh
# Starte prime-offload wenn die Datei vorhanden ist
# prime-offload entspricht etwa wie
# xrandr --setprovideroutputsource modesetting NVIDIA-0
# nur das die Werte automatisch ermittelt werden.
if [ -e /sbin/prime-offload ]; then
/sbin/prime-offload
fi
prime-offload =
#!/bin/sh
# Für NVIDIA's geschlossene Treiber
# falls nicht geladen, bricht der Script hier ab.
if ! lsmod | grep nvidia > /dev/null; then
exit 0
fi
#Abfrage der Provider
output="$(xrandr --listproviders)"
if [ "$use_randr_names" = true ]; then
src=$(echo "$output" | grep " Source" | head -n1 | awk '{print $NF}' | cut -d: -f2)
sink=$(echo -e "$output" | grep " Sink" | head -n1 | awk '{print $NF}' | cut -d: -f2)
else
src=$(echo "$output" | grep " Source" | head -n1 | cut -d: -f3 | cut -d" " -f2)
sink=$(echo -e "$output" | grep " Sink" | head -n1 | cut -d: -f3 | cut -d" " -f2)
fi
# Setzen der Provider
xrandr --setprovideroutputsource "$sink" "$src"
xrandr --auto
# Beispiele falls mehrere Monitore angeschlossen sind, hier wird VGA1 zum
# Beispiel als rechter Schrim gesetzt. Standard ist xrandr –auto.
# xrandr --output LVDS1 --auto
# xrandr --output VGA1 --auto --right-of LVDS1
exit 0
prime-next-gpu =
#! /bin/bash
# Auswerten der config und entsprechend die Grafikkarte umschalten
if [ -f /etc/prime-next-gpu.conf ]; then
var=$(cat /etc/prime-next-gpu.conf)
/bin/prime-select $var
echo 'Systemkonfiguration auf' $var 'gesetzt'
else
echo "intel" > "/etc/prime-next-gpu.conf"
echo "Konfiguratonsdatei wurde angelegt"
var=$(cat /etc/prime-next-gpu.conf)
/bin/prime-select $var
echo 'neue Systemkonfiguration auf' $var 'gesetzt'
fi
exit 0
prime-select =
#!/bin/sh
D=("intel" "nvidia" "current")
modul_Intel() {
echo '' > '/etc/modules-load.d/modules.conf'
echo '' > '/etc/modprobe.d/modules.conf'
echo 'nvidia' > '/etc/prime-next-gpu.conf'
[[ -f /usr/lib/modprobe.d/nvidia-lts.conf ]] && rm /usr/lib/modprobe.d/nvidia-lts.conf
[[ -f /usr/lib/modprobe.d/nvidia.conf ]] && rm /usr/lib/modprobe.d/nvidia.conf
ln -sf /etc/X11/config.d/intel.conf /etc/X11/xorg.conf.d/10-xorg.conf
}
modul_Nvidia() {
echo 'nvidia' > /etc/modules-load.d/modules.conf
echo 'blacklist nouveau
option nouveau modeset = 0
option nvidia-drm modeset = 1' > '/etc/modprobe.d/modules.conf'
## Der letzte Wert setzt den Nvidia-Treiber auf Syncronization womit ein zerreissen des Bildes vermieden wird.
echo 'intel' > '/etc/prime-next-gpu.conf'
[[ -f /usr/lib/modprobe.d/nvidia-lts.conf ]] && rm /usr/lib/modprobe.d/nvidia-lts.conf
[[ -f /usr/lib/modprobe.d/nvidia.conf ]] && rm /usr/lib/modprobe.d/nvidia.conf
ln -sf /etc/X11/config.d/nvidia.conf /etc/X11/xorg.conf.d/10-xorg.conf
}
case "$@" in
"${D[0]}") # intel
modul_Intel;
#
;;
"${D[1]}") # nvidia
modul_Nvidia;
#
;;
"${D[2]}") # current
for i in $(lspci | grep VGA | awk '{print $1}'); do printf "$i $s $(lspci -s $i -k | grep Kernel\ driver\ in\ use)\n"; done
#
;;
esac
exit 0
In modul_Nvidia gibt es die Zeile option nvidia_drm modeset=1, diese ist für sync damit werden Verzerrungen vermieden, kann man auch weglassen falls es keine Vertikalen Probleme gibt.
Gruß Amber