Dimensione: 4075
Commento:
|
Dimensione: 15005
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
## page was renamed from Hardware/Video/Grafica Ibrida/Acpi_call | ## page was renamed from Hardware/Video/Grafica Ibrida/Vga_switcheroo ## page was renamed from EmanueleCisotti/Prova3 ## page was renamed from Hardware/Video/Ati/AbilitareDriverProprietari #format wiki #LANGUAGE it <<BR>> |
Linea 3: | Linea 8: |
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=463584"; rilasci="12.04")>> <<BR>> |
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=463584"; rilasci="11.04 10.10")>> <<BR>><<BR>><<BR>><<BR>> |
Linea 8: | Linea 13: |
In questa guida verrà spiegato come abilitare/disabilitare la scheda video dedicata tramite l'utilizzo del modulo acpi_call = Installazione = 0. Installare il pacchetto [[apt://git | git]]. 0. Aprire una finestra di terminale e digitare: {{{ git clone http://github.com/mkottman/acpi_call.git cd acpi_call make sudo insmod acpi_call.ko }}} = Utilizzo = Nella tabella al [[http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls#Individual_Model_results|seguente indirizzo]] sono disponibili nella colonna '''Working ACPI handle OFF''' i codici per la disattivazione della scheda dedicata classificate in base alla marca dei pc. I codici saranno utilizzabili per dare un comando del tipo:{{{ echo '\_CODICE_RIPORTATO_IN_TABELLA_OFF' > /proc/acpi/call }}} Supponendo ad esempio di utilizzare il modello ''Aspire 4830TG'' il codice risulta essere ''\_SB.PCI0.PEG0.PEGP._OFF''. Sarà quindi sufficiente digitare il comando:{{{ echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call }}} A questo punto facendo clic sull'indicatore della batteria si dovrebbe notare un miglioramento nel tempo di durata della carica. = Script di avvio automatico = Se si desidera escludere la scheda dedidacata per i successivi riavvii è possibile creare un'apposito script. 0. Creare il file in `/usr/local/bin` digitando in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]:{{{ sudo touch /usr/local/bin/script_acpi_call.sh }}} 0. Aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/usr/local/bin/script_acpi_call.sh` e inserire al suo interno:{{{ #!/bin/sh #!/bin/sh echo '\_CODICE_RIPORTATO_IN_TABELLA_OFF' > /proc/acpi/call }}}avendo cura di sostituire la dicitura "CODICE_RIPORTATO_IN_TABELLA" con il relativo codice del proprio modello riportato nella [[http://hybrid-graphics-linux.tuxfamily.org/index.php?title=ACPI_calls#Individual_Model_results|tabella]]. Salvare e chiudere il file. 0. Rendere il file eseguibile digitando:{{{ sudo chmod 755 /usr/local/bin/script_acpi_call.sh }}} 0. Aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/rc.local` e inserire prima della dicitura '''exit''' la seguente riga:{{{ /usr/local/bin/script_acpi_call.sh }}}Salvare e quindi chiudere il file. = Script per aggiornamento automatico = In seguito ad ogni aggiornamento del Kernel, lo stesso kernel deve essere ricompilato per inserire il modulo acpi_call. Per rendere questo automatico, si può creare un apposito script. 0. Creare lo script digitando in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]: {{{ sudo gedit /usr/local/bin/agg_acpi_call.sh }}} 0. Si aprirà l'editor di testo, copiare al suo interno: {{{ #!/bin/sh s=$(uname -r) x=$(sed -n '1p' $HOME/acpi_call/kernel.txt) if [ $s != $x ] then cd $HOME/acpi_call make sudo insmod acpi_call.ko uname -r > $HOME/acpi_call/kernel.txt |
Il kernel fornito da '''Ubuntu 10.10''' in poi supporta la grafica ibrida per mezzo del flag '''vga_switcheroo'''. È inoltre possibile compilare un modulo del kernel che consente di effettuare chiamate direttamente ACPI. = Abilitazione di vga_switcheroo = '''vga_switcheroo''' è un meccanismo del kernel che consente di passare da una GPU all'altra se la propria macchina dispone di un selettore hardware. ||<tablestyle="text-align: justify; width:100%;" style="border:none;" 5%><<Immagine(Icone/Piccole/note.png,,center)>> ||<style="padding:0.5em; border:none;">''Questo metodo non è supportato da tutte le macchine e funziona solo se si utilizzano driver open source ([[Hardware/Video/Nvidia/DriverNouveau|Nouveau]], [[Hardware/Video/Ati/Radeon|Radeon]]) ''. || Per verificare se il kernel è compilato con l'opzione corretta si può esaminare il file `config-*` del kernel nella directory `/boot` digitando in un terminale: {{{ grep -i switcheroo /boot/config-* }}} Il meccanismo '''vga_switcheroo''' sarà attivo solo quando il kernel verrà avviato con l'opzione :{{{ "modeset = 1"}}} e/o con l'opzione: {{{ "nomodeset" assente}}} Per verificare se '''vga_switcheroo''' è abilitato, cercare il file `switch` digitando in un terminale: {{{ ls -l /sys/kernel/debug/vgaswitcheroo/switch }}} se viene trovato il file allora '''vga_switcheroo''' è abilitato. = Uso di vga_switcheroo = Una volta che ci si è accertati che '''vga_switcheroo''' è disponibile, è possibile utilizzare queste opzioni per cambiare GPU: * {{{ echo ON > /sys/kernel/debug/vgaswitcheroo/switch }}}attiva la GPU che è scollegata (attualmente non guida uscite), ma non uscite di commutazione. * {{{ echo IGD > /sys/kernel/debug/vgaswitcheroo/switch }}}connette la scheda grafica integrata con le uscite. * {{{ echo DIS > /sys/kernel/debug/vgaswitcheroo/switch }}}connette la scheda grafica dedicata con le uscite. * {{{ echo OFF > /sys/kernel/debug/vgaswitcheroo/switch }}}consente di disattivare la scheda grafica che è attualmente scollegata. Ci sono anche un paio di opzioni che sono utili all'interno di una sessione X-Windows: * {{{ echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch }}}accoda un passaggio alla grafica integrata che si verifica quando il server X è prossimo al riavvio. * {{{ echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch }}}accoda un passaggio alla grafica dedicata che si verifica quando il server X è prossimo al riavvio. = Script per l'utilizzo all'interno di una sessione di X = È stato creato anche uno script che crea una interfaccia grafica per scegliere tra le schede grafiche. Per crearlo: 0. installare innanzitutto i seguenti pacchetti, digitando in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]:{{{ sudo apt-get update sudo apt-get install wget gxmessage libnotify-bin wget -P /home/"$USER"/.local/share/icons/ http://lh4.ggpht.com/_Dw3SC8gD9Jk/S-MGVcEfaiI/AAAAAAAAAIA/Pguy_uSeqSk/s800/hardware_down.png wget -P /home/"$USER"/.local/share/icons/ http://lh5.ggpht.com/_Dw3SC8gD9Jk/S-MGVSO0JbI/AAAAAAAAAIE/_mdAnW7UiCQ/s800/hardware_up.png wget -P /home/"$USER"/.local/share/icons/ http://lh4.ggpht.com/_Dw3SC8gD9Jk/TNbQXzK6hrI/AAAAAAAAAJ8/YlqK46MusuE/s800/hardware.png wget -P /home/"$USER"/.local/share/icons/ http://lh5.ggpht.com/_Dw3SC8gD9Jk/S41DjuMt_MI/AAAAAAAAAF4/5pQm2-dX6Sg/s800/switch_before_shutdown.png}}} 0. Dopodiché bisognerà creare lo script digitando in un terminale:{{{ sudo touch /usr/bin/switch_between_cards.sh}}} 0. Aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/usr/bin/switch_between_cards.sh` e inserire al suo interno:{{{ #!/bin/bash #!/bin/bash # "switch_between_cards.sh" script by RM, with useful changes from LoLL # version 20101107 pci_integrated=$(lspci | grep VGA | sed -n '1p' | cut -f 1 -d " ") pci_discrete=$(lspci | grep VGA | sed -n '2p' | cut -f 1 -d " ") integrated=$(cat /sys/kernel/debug/vgaswitcheroo/switch | grep $pci_integrated | grep -o -P ':.:...:') discrete=$(cat /sys/kernel/debug/vgaswitcheroo/switch | grep $pci_discrete | grep -o -P ':.:...:') name_integrated=$(lspci | grep VGA | sed -n '1p' | sed -e "s/.* VGA compatible controller[ :]*//g" | sed -e "s/ Corporation//g" | sed -e "s/ Technologies Inc//g" | sed -e 's/\[[0-9]*\]: //g' | sed -e 's/\[[0-9:a-z]*\]//g' | sed -e 's/(rev [a-z0-9]*)//g' | sed -e "s/ Integrated Graphics Controller//g") name_discrete=$(lspci | grep VGA | sed -n '2p' | sed -e "s/.* VGA compatible controller[ :]*//g" | sed -e "s/ Corporation//g" | sed -e "s/ Technologies Inc//g" | sed -e 's/\[[0-9]*\]: //g' | sed -e 's/\[[0-9:a-z]*\]//g' | sed -e 's/(rev [a-z0-9]*)//g' | sed -e "s/ Integrated Graphics Controller//g") if [ "$integrated" = ":+:Pwr:" ] then integrated_condition="(*) - Power ON" elif [ "$integrated" = ": :Pwr:" ] then integrated_condition="( ) - Power ON" elif [ "$integrated" = ": :Off:" ] then integrated_condition="( ) - Power OFF" |
Linea 73: | Linea 111: |
}}} Salvare e chiudere il file. 0. Rendere il file eseguibile digitando: {{{ sudo chmod 755 /usr/local/bin/agg_acpi_call.sh }}} 0. Digitare ora nella finestra di terminale: {{{ sudo gedit /etc/rc.local }}} Ed inserire ''' prima ''' della dicitura ''' /usr/local/bin/script_acpi_call.sh ''' la seguente riga: {{{ /usr/local/bin/agg_acpi_call.sh }}} Salvare e chiudere il file. 0. Digitare ora nella finestra di terminale: {{{ uname -r > $HOME/acpi_call/kernel.txt }}}Procedura terminata. |
if [ "$discrete" = ":+:Pwr:" ] then discrete_condition="(*) - Power ON" elif [ "$discrete" = ": :Pwr:" ] then discrete_condition="( ) - Power ON" elif [ "$discrete" = ": :Off:" ] then discrete_condition="( ) - Power OFF" fi gxmessage -center \ -buttons "_Cancel":1,"switch to _Integrated":101,"switch to _Discrete":102 \ -wrap \ -title "Choose Hybrid Graphic Card" \ "Choose Hybrid Graphic Card ================= Integrated: $integrated_condition : $name_integrated Discrete: $discrete_condition : $name_discrete" whichCard=$? case "$whichCard" in 1) echo "Exit" ;; 101) if [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo OFF > /sys/kernel/debug/vgaswitcheroo/switch elif [ "$integrated" == ": :Pwr:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Off:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo ON > /sys/kernel/debug/vgaswitcheroo/switch echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Off:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "already switched to $name_integrated" fi ;; 102) if [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Pwr:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo OFF > /sys/kernel/debug/vgaswitcheroo/switch elif [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Off:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo ON > /sys/kernel/debug/vgaswitcheroo/switch echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Off:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "already switched to $name_discrete" fi ;; esac}}}Salvare e chiudere il file. 0. Per utilizzare questo script, gli utenti non root hanno bisogno delle autorizzazioni di scrittura sul file `/sys/kernel/debug/vgaswitcheroo/switch`. Se si esegue lo script con {{{sudo}}}, il computer si bloccherà, dato che lo script non può poi terminare la sessione corrente gnome in modo corretto. Per avere permessi di scrittura permanenti al file `switch`, aprire con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/rc.local` e aggiungere la seguente riga:{{{ chown root:plugdev /sys/kernel/debug/vgaswitcheroo/switch }}} prima della riga:{{{ exit 0}}} questo dà il permesso di passare le GPU a qualunque utente si trovi gruppo plugdev, che di solito è di tutti gli utenti regolari. 0. È inoltre possibile assegnare a questo script un hotkey globale andando su '''''Sistema → Preferenze → Scorciatoie da tastiera'''''. Si avrà bisogno di rinominare lo script in `switch_between_cards` senza estensione .sh con i [[AmministrazioneSistema/Sudo|privilegi di amministrazione]] e di assicurarsi che sia eseguibile: per far questo digitare in una in una finestra di [[AmministrazioneSistema/RigaDiComando|terminale]]:{{{ sudo mv /usr/bin/switch_between_cards.sh /usr/bin/switch_between_cards sudo chmod +x /usr/bin/switch_between_cards }}} 0. Testarlo eseguendo in un terminale: {{{ switch_between_cards}}} 0. E' possibile assegnare qualsiasi combinazione di tasti a piacere se non già definita. Le combinazioni '''Super + G''' o '''Ctrl + Alt + G''' funzionano bene. = Script per l'utilizzo durante l'avvio di sistema = Si consiglia di passaggio ad un adattatore grafico dato durante l'avvio, ad esempio per abilitare l'uscita per la GPU che Linux utilizza per interrogare le password per decifrare il volume di root (ed altri messaggi di avvio). Oppure si consiglia di disabilitare una delle schede durante l'avvio per risparmiare la batteria. Attualmente non ci sono opzioni del kernel per controllare il meccanismo '''vga_switcheroo''', ma qui c'è uno script initramfs che compie lo stesso. Inserirlo in un file chiamato `/etc/initramfs-tools/scripts/local-top/hybrid_boot_options`: {{{ # # Standard initramfs preamble # prereqs() { : } case $1 in prereqs) prereqs exit 0 ;; esac # source for log_*_msg() functions, see LP: #272301 . /scripts/functions # # Helper functions # message() { if [ -x /bin/plymouth ] && plymouth --ping; then plymouth message --text="$@" elif [ -p /dev/.initramfs/usplash_outfifo ] && [ -x /sbin/usplash_write ]; then usplash_write "TEXT-URGENT $@" else echo "$@" >&2 fi return 0 } run_switcheroo() { local hybridopts hybridopts="$1" if [ -z "$hybridopts" ]; then return 1 fi local IFS=" ," for x in $hybridopts; do message "Switching hybrid graphics to $x" echo $x > /sys/kernel/debug/vgaswitcheroo/switch done return 0 } # # Begin real processing # # Do we have any kernel boot arguments? for opt in $(cat /proc/cmdline); do case $opt in hybridopts=*) run_switcheroo "${opt#hybridopts=}" ;; esac done exit 0 }}} Impostarlo come eseguibile e creare nuovi file initramfs con initramfs-tools: {{{ chmod +x /etc/initramfs-tools/scripts/local-top/hybrid_boot_options initramfs-tools -c -k all }}} o, se il comando initramfs-tools non funziona: {{{ update-initramfs -c -k all }}} Ora, è possibile aggiungere una riga di comando per le opzioni di avvio del kernel in `/etc/default/grub`: {{{ GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modeset=1 hybridopts=ON,IGD,OFF" }}} L'esempio precedente abilita entrambe le GPU, passa alla GPU integrata ed alla fine spegne la GPU integrata. Infine, le opzioni devono essere effettivamente applicate a '''Grub''' (dato che quanto sopra è solo un modello),con il comando: {{{ sudo update-grub }}} ||<tablestyle="text-align: justify; width:100%;" style="border:none;" 5%><<Immagine(Icone/Grandi/info.png,,center)>> ||<style="padding:0.5em; border:none;">È anche possibile provare le opzioni durante l'avvio premendo il tasto "e" in '''Grub''' e l'aggiunta/rimozione dei comandi (separati da virgola) da "hybridopts =" opzione.|| = Risoluzione problemi = == Ventole che girano alla massima velocità == Come spiegato al [[http://asusm51ta-with-linux.blogspot.com/|seguente indirizzo]], le ventole della scheda grafica dovrebbero funzionare a piena velocità, se non si è tenute accese entrambe le schede grafiche prima di spegnere il computer. Viene quindi fornito uno script per risolvere il problema. Occorre digitare in un terminale: {{{ echo ON > /sys/kernel/debug/vgaswitcheroo/switch }}} prima di spegnere il sistema. == Luminosità == La luminosità dello schermo del portatile all'avvio potrebbe essere molto bassa. Se si dispone di uno schermo quasi nero durante l'avvio, basta premere il tasto giusto per aumentare la luminosità. == GPU predefinita == La GPU che è abilitato dal BIOS durante l'avvio può dipendere dal fatto che il portatile è collegato o meno alla rete elettrica. == Console FB == È possibile selezionare quale dispositivo utilizza il kernel di Linux per la fase di avvio della console utilizzando l'opzione fbcon della riga di comando del kernel, come "fbcon = map: 1" per `/dev/fb1`. ||<tablestyle="text-align: justify; width:100%;" style="border:none;" 5%><<Immagine(Icone/Grandi/info.png,,center)>> ||<style="padding:0.5em; border:none;">In alternativa, se si vuole tenere una GPU disabilitata in ogni momento, c'è anche la possibilità di mettere in blacklist i driver pertinenti ed aggiornare initramfs e quindi liberarsi di uno dei dispositivi di fb. || |
Linea 91: | Linea 336: |
* [[http://linux-hybrid-graphics.blogspot.com/2010/07/using-acpicall-module-to-switch-onoff.html|Documento originale]] * [[http://ubuntuforums.org/showpost.php?p=11116131&postcount=102|Guida sul forum internazionale]] |
* [[https://help.ubuntu.com/community/HybridGraphics|Documento originale]] * [[http://asusm51ta-with-linux.blogspot.com/| Il blog di Roberto Martinez]] |
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
Il kernel fornito da Ubuntu 10.10 in poi supporta la grafica ibrida per mezzo del flag vga_switcheroo.
È inoltre possibile compilare un modulo del kernel che consente di effettuare chiamate direttamente ACPI.
Abilitazione di vga_switcheroo
vga_switcheroo è un meccanismo del kernel che consente di passare da una GPU all'altra se la propria macchina dispone di un selettore hardware.
Questo metodo non è supportato da tutte le macchine e funziona solo se si utilizzano driver open source (Nouveau, Radeon) . |
Per verificare se il kernel è compilato con l'opzione corretta si può esaminare il file config-* del kernel nella directory /boot digitando in un terminale:
grep -i switcheroo /boot/config-*
Il meccanismo vga_switcheroo sarà attivo solo quando il kernel verrà avviato con l'opzione :
"modeset = 1"
e/o con l'opzione:
"nomodeset" assente
Per verificare se vga_switcheroo è abilitato, cercare il file switch digitando in un terminale:
ls -l /sys/kernel/debug/vgaswitcheroo/switch
se viene trovato il file allora vga_switcheroo è abilitato.
Uso di vga_switcheroo
Una volta che ci si è accertati che vga_switcheroo è disponibile, è possibile utilizzare queste opzioni per cambiare GPU:
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
attiva la GPU che è scollegata (attualmente non guida uscite), ma non uscite di commutazione.echo IGD > /sys/kernel/debug/vgaswitcheroo/switch
connette la scheda grafica integrata con le uscite.echo DIS > /sys/kernel/debug/vgaswitcheroo/switch
connette la scheda grafica dedicata con le uscite.echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
consente di disattivare la scheda grafica che è attualmente scollegata.
Ci sono anche un paio di opzioni che sono utili all'interno di una sessione X-Windows:
echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch
accoda un passaggio alla grafica integrata che si verifica quando il server X è prossimo al riavvio.echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch
accoda un passaggio alla grafica dedicata che si verifica quando il server X è prossimo al riavvio.
Script per l'utilizzo all'interno di una sessione di X
È stato creato anche uno script che crea una interfaccia grafica per scegliere tra le schede grafiche.
Per crearlo:
installare innanzitutto i seguenti pacchetti, digitando in una finestra di terminale:
sudo apt-get update sudo apt-get install wget gxmessage libnotify-bin wget -P /home/"$USER"/.local/share/icons/ http://lh4.ggpht.com/_Dw3SC8gD9Jk/S-MGVcEfaiI/AAAAAAAAAIA/Pguy_uSeqSk/s800/hardware_down.png wget -P /home/"$USER"/.local/share/icons/ http://lh5.ggpht.com/_Dw3SC8gD9Jk/S-MGVSO0JbI/AAAAAAAAAIE/_mdAnW7UiCQ/s800/hardware_up.png wget -P /home/"$USER"/.local/share/icons/ http://lh4.ggpht.com/_Dw3SC8gD9Jk/TNbQXzK6hrI/AAAAAAAAAJ8/YlqK46MusuE/s800/hardware.png wget -P /home/"$USER"/.local/share/icons/ http://lh5.ggpht.com/_Dw3SC8gD9Jk/S41DjuMt_MI/AAAAAAAAAF4/5pQm2-dX6Sg/s800/switch_before_shutdown.png
Dopodiché bisognerà creare lo script digitando in un terminale:
sudo touch /usr/bin/switch_between_cards.sh
Aprire con i privilegi di amministrazione e con un editor di testo il file /usr/bin/switch_between_cards.sh e inserire al suo interno:
#!/bin/bash # "switch_between_cards.sh" script by RM, with useful changes from LoLL # version 20101107 pci_integrated=$(lspci | grep VGA | sed -n '1p' | cut -f 1 -d " ") pci_discrete=$(lspci | grep VGA | sed -n '2p' | cut -f 1 -d " ") integrated=$(cat /sys/kernel/debug/vgaswitcheroo/switch | grep $pci_integrated | grep -o -P ':.:...:') discrete=$(cat /sys/kernel/debug/vgaswitcheroo/switch | grep $pci_discrete | grep -o -P ':.:...:') name_integrated=$(lspci | grep VGA | sed -n '1p' | sed -e "s/.* VGA compatible controller[ :]*//g" | sed -e "s/ Corporation//g" | sed -e "s/ Technologies Inc//g" | sed -e 's/\[[0-9]*\]: //g' | sed -e 's/\[[0-9:a-z]*\]//g' | sed -e 's/(rev [a-z0-9]*)//g' | sed -e "s/ Integrated Graphics Controller//g") name_discrete=$(lspci | grep VGA | sed -n '2p' | sed -e "s/.* VGA compatible controller[ :]*//g" | sed -e "s/ Corporation//g" | sed -e "s/ Technologies Inc//g" | sed -e 's/\[[0-9]*\]: //g' | sed -e 's/\[[0-9:a-z]*\]//g' | sed -e 's/(rev [a-z0-9]*)//g' | sed -e "s/ Integrated Graphics Controller//g") if [ "$integrated" = ":+:Pwr:" ] then integrated_condition="(*) - Power ON" elif [ "$integrated" = ": :Pwr:" ] then integrated_condition="( ) - Power ON" elif [ "$integrated" = ": :Off:" ] then integrated_condition="( ) - Power OFF" fi if [ "$discrete" = ":+:Pwr:" ] then discrete_condition="(*) - Power ON" elif [ "$discrete" = ": :Pwr:" ] then discrete_condition="( ) - Power ON" elif [ "$discrete" = ": :Off:" ] then discrete_condition="( ) - Power OFF" fi gxmessage -center \ -buttons "_Cancel":1,"switch to _Integrated":101,"switch to _Discrete":102 \ -wrap \ -title "Choose Hybrid Graphic Card" \ "Choose Hybrid Graphic Card ================= Integrated: $integrated_condition : $name_integrated Discrete: $discrete_condition : $name_discrete" whichCard=$? case "$whichCard" in 1) echo "Exit" ;; 101) if [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo OFF > /sys/kernel/debug/vgaswitcheroo/switch elif [ "$integrated" == ": :Pwr:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Off:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "switching to $name_integrated" echo ON > /sys/kernel/debug/vgaswitcheroo/switch echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Off:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_down.png" "already switched to $name_integrated" fi ;; 102) if [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Pwr:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo OFF > /sys/kernel/debug/vgaswitcheroo/switch elif [ "$integrated" == ":+:Pwr:" ] && [ "$discrete" == ": :Off:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "switching to $name_discrete" echo ON > /sys/kernel/debug/vgaswitcheroo/switch echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch if [ "$DESKTOP_SESSION" = "openbox" ] then killall -u "$USER" elif [ "$DESKTOP_SESSION" = "gnome" ] then gnome-session-save --logout fi elif [ "$integrated" == ": :Off:" ] && [ "$discrete" == ":+:Pwr:" ] then notify-send -t 5000 --icon="/home/$USER/.local/share/icons/hardware_up.png" "already switched to $name_discrete" fi ;; esac
Salvare e chiudere il file.Per utilizzare questo script, gli utenti non root hanno bisogno delle autorizzazioni di scrittura sul file /sys/kernel/debug/vgaswitcheroo/switch. Se si esegue lo script con sudo, il computer si bloccherà, dato che lo script non può poi terminare la sessione corrente gnome in modo corretto. Per avere permessi di scrittura permanenti al file switch, aprire con i privilegi di amministrazione e con un editor di testo il file /etc/rc.local e aggiungere la seguente riga:
chown root:plugdev /sys/kernel/debug/vgaswitcheroo/switch
prima della riga:
exit 0
questo dà il permesso di passare le GPU a qualunque utente si trovi gruppo plugdev, che di solito è di tutti gli utenti regolari.È inoltre possibile assegnare a questo script un hotkey globale andando su Sistema → Preferenze → Scorciatoie da tastiera. Si avrà bisogno di rinominare lo script in switch_between_cards senza estensione .sh con i privilegi di amministrazione e di assicurarsi che sia eseguibile: per far questo digitare in una in una finestra di terminale:
sudo mv /usr/bin/switch_between_cards.sh /usr/bin/switch_between_cards sudo chmod +x /usr/bin/switch_between_cards
Testarlo eseguendo in un terminale:
switch_between_cards
E' possibile assegnare qualsiasi combinazione di tasti a piacere se non già definita. Le combinazioni Super + G o Ctrl + Alt + G funzionano bene.
Script per l'utilizzo durante l'avvio di sistema
Si consiglia di passaggio ad un adattatore grafico dato durante l'avvio, ad esempio per abilitare l'uscita per la GPU che Linux utilizza per interrogare le password per decifrare il volume di root (ed altri messaggi di avvio).
Oppure si consiglia di disabilitare una delle schede durante l'avvio per risparmiare la batteria.
Attualmente non ci sono opzioni del kernel per controllare il meccanismo vga_switcheroo, ma qui c'è uno script initramfs che compie lo stesso. Inserirlo in un file chiamato /etc/initramfs-tools/scripts/local-top/hybrid_boot_options:
# # Standard initramfs preamble # prereqs() { : } case $1 in prereqs) prereqs exit 0 ;; esac # source for log_*_msg() functions, see LP: #272301 . /scripts/functions # # Helper functions # message() { if [ -x /bin/plymouth ] && plymouth --ping; then plymouth message --text="$@" elif [ -p /dev/.initramfs/usplash_outfifo ] && [ -x /sbin/usplash_write ]; then usplash_write "TEXT-URGENT $@" else echo "$@" >&2 fi return 0 } run_switcheroo() { local hybridopts hybridopts="$1" if [ -z "$hybridopts" ]; then return 1 fi local IFS=" ," for x in $hybridopts; do message "Switching hybrid graphics to $x" echo $x > /sys/kernel/debug/vgaswitcheroo/switch done return 0 } # # Begin real processing # # Do we have any kernel boot arguments? for opt in $(cat /proc/cmdline); do case $opt in hybridopts=*) run_switcheroo "${opt#hybridopts=}" ;; esac done exit 0
Impostarlo come eseguibile e creare nuovi file initramfs con initramfs-tools:
chmod +x /etc/initramfs-tools/scripts/local-top/hybrid_boot_options initramfs-tools -c -k all
o, se il comando initramfs-tools non funziona:
update-initramfs -c -k all
Ora, è possibile aggiungere una riga di comando per le opzioni di avvio del kernel in /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modeset=1 hybridopts=ON,IGD,OFF"
L'esempio precedente abilita entrambe le GPU, passa alla GPU integrata ed alla fine spegne la GPU integrata.
Infine, le opzioni devono essere effettivamente applicate a Grub (dato che quanto sopra è solo un modello),con il comando:
sudo update-grub
È anche possibile provare le opzioni durante l'avvio premendo il tasto "e" in Grub e l'aggiunta/rimozione dei comandi (separati da virgola) da "hybridopts =" opzione. |
Risoluzione problemi
Ventole che girano alla massima velocità
Come spiegato al seguente indirizzo, le ventole della scheda grafica dovrebbero funzionare a piena velocità, se non si è tenute accese entrambe le schede grafiche prima di spegnere il computer. Viene quindi fornito uno script per risolvere il problema. Occorre digitare in un terminale:
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
prima di spegnere il sistema.
Luminosità
La luminosità dello schermo del portatile all'avvio potrebbe essere molto bassa. Se si dispone di uno schermo quasi nero durante l'avvio, basta premere il tasto giusto per aumentare la luminosità.
GPU predefinita
La GPU che è abilitato dal BIOS durante l'avvio può dipendere dal fatto che il portatile è collegato o meno alla rete elettrica.
Console FB
È possibile selezionare quale dispositivo utilizza il kernel di Linux per la fase di avvio della console utilizzando l'opzione fbcon della riga di comando del kernel, come "fbcon = map: 1" per /dev/fb1.
In alternativa, se si vuole tenere una GPU disabilitata in ogni momento, c'è anche la possibilità di mettere in blacklist i driver pertinenti ed aggiornare initramfs e quindi liberarsi di uno dei dispositivi di fb. |