Προς το περιεχόμενο

Nvidia Optimus και λινουξ


mphxths

Προτεινόμενες αναρτήσεις

Καλησπερα σας ,

 

Σε αυτον τον και καλα οδηγο θα αναφερθω στο πως θα κανετε την nvidia optimus καρτα σας να δουλεψει στο λινουξακι σας.Θα αναφερθω στην διανομη sabayon(το ιδιο ισχυει για την gentoo , μιας και το sabayon στηριζεται σε αυτην). Οσον αφορα σε αλλες διανομες ο καθενας μπορει να το ψαξει απο την μερια του.

 

1.Εισαγωγη

 

 

Optimus ειναι μια νεα εμπνευση της nvidia για να κανει την ζωη μας ευκολη.Ενιοτε και δυσκολη.Ειναι μια τεχνολογια που συνδυαζει την χρηση δυο καρτων (κυριως σε φορητα δηλ),ετσι ωστε να κανει εξοικονομηση ενεργειας για να κραταει η μπαταρια περισσοτερο.Στην ουσια για τις απλες εργασιες χρησιμοποιειται μια "ποταπη" καρτα , συνηθως μια ιντελ , και οταν απαιτειται περισσοτερο "δυναμη" αυτοματως (με καποιο software γινεται αυτο στα windows) αλλαζει στην πιο δυνατη nvidia.

 

Απο οτι καταλαβα ψαχνοντας δεξια και αριστερα , οι δυο αυτες καρτες ειναι κατα καποιον τροπο συνδεδεμενες μεταξυ τους , δηλαδη δεν μπορεις να παρακαμψεις τελειως την πρωτη (ποταπη) και να δουλευεις αποκλειστικα με την δευτερη (nvidia).Σε μερικα φορητα υπαρχει επιλογη στο ΒΙΟΣ για να διαλεγεις ποια θα δουλευει πρωτη σαν κυρια.Στα περισσοτερα φορητα με αυτην την τεχνολογια (οπως και στο δικο μου Aspire 5745G) , δεν εχει τετοια επιλογη , οπως και επισης πολλοι εχουν αναφερει οτι και το software που αναλαμβανει την αυτοματη εναλλαγη στην χρηση των καρτων επι τω πλειστω δεν δουλευει ποτε σωστα.

 

Τελος να αναφερω οτι η nvidia δηλωσε οτι δεν προκειται να υποστηριξει την τεχνολογια αυτην στο λινουξ.

 

2.Και τωρα τι γινεται ?

Περιπτωση 1.

===========

Υπαρχει ενας χειροκινητος τροπος για να αντιμετωπισουμε την κατασταση , και πιστευω λιγο πολυ δουλευει ανεξαρτητου διανομης.(Βεβαια εγω θα αναφερθω σε sabayon/gentoo , ισως στις υπολοιπες να θελει μικρες τροποποιησεις)

 

Η ουσια λοιπον της λυσης αυτης ειναι να στησουμε 2 xorg.conf και να εχουμε 2 Χ να τρεχουν παραλληλα , ο ενας με την ιντελ και ο αλλος με την nvidia.

 

Εχουμε και λεμε λοιπον

 

1.Εγκαθιστουμε τους κλειστους κατα προτιμηση drivers της nvidia καρτας (θεωρω οτι της ιντελ οι οδηγοι εχουν μπει αυτοματα απο την εγκατασταση της διανομης μας)

2.Δηλωνουμε την ιντελ σαν primary openGL interface : eselect opengl set xorg-x11 (gentoo specific command)

3.Φτιαχνουμε ενα 2ο xorg.conf ειδικα για την nvidia καρτα μας.

 

Συνηθως το κλασικο xorg.conf ειναι στο /etc/X11/xorg.conf και ενα τυπικο xorg.conf περιεχει τα ακολουθα

 

>Section "Module" 
   Disable        "dri"
EndSection

Section "ServerFlags"
   Option "AllowEmptyInput" "no"
EndSection

Section "Monitor"
   Identifier "Monitor0"
   VendorName 	"Unknown"
   ModelName      "Unknown"
   HorizSync   	28.0 - 73.0
   VertRefresh 	43.0 - 72.0
   Option 		"DPMS"
EndSection

Section "Device"
   Identifier 	"Device1"
   Driver 		"intel"
   VendorName 	"onboard"
   BusID          "PCI:0:2:0"
   #Screen 		1
EndSection

Section "Screen"
   Identifier 	"Screen0"
   Device 		"Device1"
   Monitor        "Monitor0"
   DefaultDepth    24
   SubSection 	"Display"
       Depth   	24
   EndSubSection
EndSection

 

Ενα δευτερο για την nvidia μας θα μοιαζει ως εξης.

 

>Section "DRI"
       Mode 0666
EndSection

Section "ServerLayout"
   Identifier 	"Layout0"
   Screen 		"Screen1"
   Option 		"AutoAddDevices" "false"
EndSection

Section "Module"
       Load  "dbe"
       Load  "extmod"
       Load  "glx"
       Load  "record"
       Load  "freetype"
       Load  "type1"
EndSection

Section "Files"
EndSection

Section "Device"
   Identifier 	"Device1"
   Driver 		"nvidia"
   VendorName 	"NVIDIA Corporation"
   BusID          "PCI:01:00:0"
   Option 		"IgnoreEDID"
   Option 		"ConnectedMonitor" "CRT-0"
EndSection

Section "Screen"
   Identifier 	"Screen1"
   Device 		"Device1"
   Monitor        "Monitor0"
   DefaultDepth    24
   SubSection 	"Display"
       Depth   	24
   EndSubSection
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection

Section "Monitor"
   Identifier "Monitor0"
   VendorName 	"Unknown"
   ModelName      "Unknown"
   HorizSync   	28.0 - 73.0
   VertRefresh 	43.0 - 72.0
   Option 		"DPMS"
EndSection

 

4. Εκκινηνουμε τον Χ μας και φτιαχνουμε ενα σκριπτακι για να φορτωνει αυτοματα και τον 2ο Χ που φτιαξαμε

 

rc-update add xdm default (gentoo specific command)

 

Ενα σκριπτακι για να φορτωνει τον 2ο Χ μας , μοιαζει καπως ετσι

 

>#!/sbin/runscript

depend()
{
       need xdm
       after xdm
}

start()
{
       ebegin "Starting Optimus X Server"                                                                                                                                                    
                                                                                                                                                                                               
       export LD_LIBRARY_PATH="/usr/lib/opengl/nvidia/lib:${LD_LIBRARY_PATH}"

       start-stop-daemon --start --background --pidfile /tmp/.X1-lock --exec /usr/bin/X \
           -- -ac -config /etc/X11/xorg.nvidia.conf -sharevts -modulepath /usr/lib/opengl/nvidia,/usr/lib/xorg/modules -nolisten tcp -noreset :1 vt9

       eend $?
}

stop()
{
       ebegin "Stopping Optimus X Server"

       start-stop-daemon --stop --exec /usr/bin/X \
           --pidfile /tmp/.X1-lock

       eend $?
}

 

Απο οτι φαινεται το 2ο xorg.conf το ονομασαμε /etc/X11/xorg.nvidia.conf

Ονομαζουμε το σκριπτακι optimus , το βαζουμε στο /etc/init.d , το κανουμε και εκτελεσιμο (chmod u+x optimus) και το εκτελουμε

/etc/init.d/optimus start

 

ή το σεταρουμε να ξεκιναει αυτοματα με το boot. (rc-update add optimus default -- μονο για gentoo/sabayon)

 

5.Εγκαθιστουμε το VirtualGL που ειναι απαραιτητο για να κανει δουλεια η nvidia μας.Ο τροπος εγκαταστασης προφανως θα διαφερει απο διανομη σε διανομη.

Δημιουργουμε ενα configuration file (/etc/default/optimus)

 

># VirtualGL Defaults

# Display for the nVidia X Server
VGL_DISPLAY=:1

# Image transport xv|yuv
VGL_COMPRESS=xv

# Readback mode
VGL_READBACK=fbo

# Logging
VGL_LOG=/var/log/vgl.log

6.Φτιαχνουμε ενα σκριπτακι για να το εκτελουμε πριν απο την εφαρμογη που θελουμε να "στειλουμε" στην nvidia.

 

>#!/bin/bash

if [ ! -f /tmp/.X1-lock ]; then
       echo "Optimus X Server is not running!"
       exit 1
fi

source /etc/default/optimus

export VGL_READBACK
export VGL_LOG
vglrun -c $VGL_COMPRESS -d $VGL_DISPLAY -ld /usr/lib/opengl/nvidia/lib "$@"

 

To βαζουμε καπου στο PATH (/usr/bin ή /usr/local/bin) και το εκτελουμε ως εξης

 

optimus <εφαρμογη>

 

για παραδειγμα , για να δειτε αν οντως δουλευει η φαση τρεχτε το glxgears , και καταγραψτε τα FPS

μετα τρεχτε optimus glxgears

Στην 2η περιπτωση πρεπει να βγαλει σημαντικα περισσοτερα fps (στην περιπτωση μου εβγαλε 3πλασια , αρα καταλαβα οτι λειτουργει η nvidia).

 

Περιπτωση 2

============

Μη-χειροκινητος τροπος

 

Επειδη οπως ειδατε παραπανω θελει πολυ μανουρα η ολη φαση και βασει του Νομου του Μερφι κατι θα παει κατα διαολου , ο επομενος τροπος ειναι πιο αυτοματοποιημενος και περιποιημενος.

Στηριζεται σε ενα προτζεκτ που εχει ξεκινησει και ονομαζεται bumblebee (αν δεν κανω λαθος ειναι το κιτρινο καμαρο-τρανσφορμερ) :)

 

Θα παραθεσω τον τροπο εγκαταστασης σε gentoo/sabayon.

 

1.Σιγουρευομαστε οτι ειναι fully updated.

 

equo update

equo upgrade

 

2.Εγκαθιστουμε layman portage και git

 

equo install layman portage git

 

3.Προσθετουμε το rainyday overlay

 

layman -L

layman -a rainyday

 

4.Συγχρονιζουμε emerge

 

emerge --sync

 

5.Τσεκαρουμε τι deps εχει το bumblebee για να τα περασουμε

 

emerge bumblebee -p

 

Oτιδηποτε μας βγαλει το περναμε ειτε με το equo ειτε με το emerge (συνηθως τα περισσοτερα αν οχι ολα υπαρχουν στο equo , απο αυτα που ζηταει)

 

6.Εγκαθιστουμε το bumblebee

 

emerge bumblebee

 

7.Εκ γεννετης το προγραμμα αυτο εχει μια λαθος ρυθμιση , οποτε και την αλλαζουμε χειροκινητα.

 

nano /etc/default/bumblebee/bumblebee

 

αλλαζουμε το :8 στο display σε :1

 

8.Προσθετουμε τον "δαιμονα" του bumblebee στο default runlevel , για να εκκινει αυτοματα

 

rc-update add bumblebee default

 

9.Ενημερωνουμε το equo οτι περασαμε κατι πακετακια με το emerge.

 

equo rescue spmsync

 

Κανουμε τον σταυρο μας 2-3 χιλιαδες φορες και κανουμε reboot.

 

Μολις μπουμε με το καλο σε γραφικο περιβαλλον κανουμε το προηγουμενο τεστ με το glxgear / optirun glxgears να δουμε τι ψαρια πιασαμε.

 

 

***ΠΡΟΣΟΧΗ - Ενδεχεται μετα σε μελλοντικα updates το sulfur να βγαζει το bumblebee στην λιστα προς διαγραφη πακετων , βρισκοντας και καλα ορφανο.Καλου κακου το αφηνουμε να υπαρχει --ΑΦΟΡΑ SABAYON USERS***

 

Οπως ανεφερα συχνα πυκνα , τα βηματα αφορουσαν sabayon/gentoo.Ενδεχεται ορισμενα απο αυτα να ειναι πανομοιοτυπα και σε αλλες διανομες , ή η gentoo-specific εντολες να εχουν αλλες αντιστοιχες στις αλλες διανομες.

 

Οσον αφορα στο bumblebee ψαξτε το στον package manager της διανομης σας , αν υπαρχει τοτε η δουλεια σας θα γινει πολυ πολυ ευκολα.

Επισης να τονισω οτι δεν δουλευει αυτοματα.Εννοω οτι παντα πρεπει να τρεχετε την εφαρμογη/παιχνιδι που θελετε με optirun <εφαρμογη/παιχνιδι>.Μπορειτε καλλιστα να φτιαξετε συντομευση και να προσθεσετε το optirun στην γραμμη εντολης του προγραμματος/παιχνιδι.

 

 

ΑΦΟΡΑ UBUNTU (μεχρι και 11.10)

 

1. sudo apt-add-repository ppa:mj-casalogic/bumblebee (προσθετουμε το ρεπο του bumblebee)

2. sudo apt-get update &&sudo apt-get install bumblebee (ενημερωνουμε πληρως το συστημα και εγκαθιστουμε το bumblebee)

 

 

***Yπηρξε ενα γεγονος καποια στιγμη και εγινε και μεγαλος σαλος , οπου ενα σκριπτ του bumblebee , λογω ενος τυπογραφικου λαθους..ενα space εκει που δεν επρεπε , εσκαγε ενα rm -rf /usr.Ολοι καταλαβαινουμε ποσο καταστροφικο ειναι αυτο.Πλεον ομως το εχουν φτιαξει , μιας και το εχω περασει και το /usr ειναι ακομα στην θεση του.Αρα δεν υπαρχει λογος ανησυχιας!***

 

ΠΗΓΕΣ

 

http://www.danilopia...icles&Itemid=23

 

http://en.gentoo-wik.../nVidia_Optimus

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...