Hier eine Beisiellösung!
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.
Auf meinem System läuft es soweit, somit sind bei mir intel, nouveau und nvidia installiert.
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 "Module"
Load "nouveau"
EndSection
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
Die Intel.conf wurde angepasst mit Section Module. Somit kann man im Intel - Modus mit dem Befehl DRI_PRIME=1 Programmname dieses Programm mit den nouveau Treiber starten, Prinzip wie bumblebee nur ohne diese Leistungshemmende alte Software!
Beispiel:
$ DRI_PRIME=1 glxgears
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
46854 frames in 5.0 seconds = 9370.725 FPS
lief per nouveau Treiber
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
# xrandr --output LVDS1 --set "scaling mode" center
# xrandr --output VGA1 --set "scaling mode" center
# output - Name muß angepasst werden (Beispiel statt LVDS / HDMI)
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
[[ $(whoami) != "root" ]] && printf "Bitte als root ausführen\n" && exit 0
D=("intel" "nvidia")
modul_Intel() {
echo '' > '/etc/modules-load.d/modules.conf'
echo 'options nouveau modeset=0' > '/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
options nouveau modeset=0
options 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.
## siehe auch https://devtalk.nvidia.com/default/topic/957814/prime-and-prime-synchronization/
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;
#
;;
esac
exit 1
Gruß Amber