Διόρθωση αλλαγής φωτεινότητας σε κάρτες Intel

ΑΥΤΗ Η ΔΗΜΟΣΙΕΥΣΗ ΕΧΕΙ ΓΙΝΕΙ ΠΑΝΩ ΑΠΟ ΕΝΑ ΧΡΟΝΟ ΠΡΙΝ!

Σε αυτό τον οδηγό θα ασχοληθούμε με την διόρθωση της αλλαγής φωτεινότητας με τα Function Keys.
Σε αρκετά Laptop (όπως και στο δικό μου), η αλλαγή φωτεινότητας δεν δουλεύει out of the box. Έχω ένα acer aspire 5733 και η αλλαγή φωτεινότητας (η οποία είναι νομίζω ζωτικής σημασίας, ειδικά όταν εργάζεστε χωρίς ρεύμα) θα έπρεπε να λειτουργεί με τα Fn+δεξί βελάκι (αύξηση), Fn+αριστερό βελάκι (μείωση). Δυστυχώς το μόνο που λειτουργεί είναι η ειδοποίηση, χωρίς όμως αποτέλεσμα.

indicator-brightness

Παράμετροι στον grub

Το παραπάνω πρόβλημα μπορούμε να το λύσουμε με δυο τρόπους. Ο ένας είναι μια καταχώρηση στον grub, μιας (ή περισσοτέρων) παραμέτρου, η οποία θα «ξεκολλήσει» το acpi από εκεί μου είναι «κολλημένο» και θα το κάνει να δουλέψει. Αν δουλέψει τότε η φωτεινότητα θα αλλάζει με τα Function Keys, ωστόσο θα χάσουμε τον indicator. Καλύτερο πάντως από το να έχουμε indicator χωρίς να αλλάζει η φωτεινότητα.

Οι παράμετροι που θα δοκιμάσουμε είναι

  • acpi_osi=Linux
  • acpi_backlight=vendor
  • acpi_osi=

Τις παραπάνω παραμέτρους πρέπει να τις καταχωρήσουμε μια προς μια σε ένα αρχείο. Στο /etc/default/grub. Μετά από κάθε καταχώρηση και αφού σώσουμε το αρχείο, πρέπει να τρέχουμε την εντολή

sudo update-grub

για να γίνεται ανανέωση του grub και να συμπεριληφθεί η αλλαγή που κάναμε.

Πάμε να το επεξεργαστούμε.
Ανοίγουμε ένα τερματικό (CTRL+ALT+T) και εκτελούμε την παρακάτω εντολή

gksudo gedit /etc/default/grub

Ο gedit είναι ο προ-εγκατεστημένος editor σε Ubuntu. Αν χρησιμοποιείται κάποιο derivative που δεν έχει τον gedit, αλλάξτε ανάλογα την παραπάνω εντολή (π.χ για Lubuntu είναι ο leafpad)

Στον κειμενογράφο που θα ανοίξει, με προσοχή, βρίσκουμε και επεξεργαζόμαστε την γραμμή GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Προσθέτουμε την παράμετρο που θέλουμε. Ας ξεκινήσουμε από την πρώτη. Η γραμμή θα γίνει έτσι GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux"
Δεν πειράζουμε κάτι άλλο, κλείνουμε-αποθηκεύουμε το έγγραφο και τρέχουμε την εντολή ανανέωσης του grub.

sudo update-grub

Κάνουμε μια επανεκκίνηση και βλέπουμε αν λειτουργεί η αλλαγή φωτεινότητας με τα Function Keys.
Αν όχι, τότε δοκιμάζουμε και τις υπόλοιπες παραμέτρους. Αφαιρούμε αυτή που γράψαμε και γράφουμε κάποια άλλη (μην ξεχνάμε την ανανέωση του grub μετά από κάθε αλλαγή). Μπορούμε επίσης να κάνουμε και συνδυασμούς, όπως δυο παραμέτρους μαζί. GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux acpi_backlight=vendor"

«Ακούγοντας» το acpi

Ένας άλλος τρόπος, αν τίποτε από τα παραπάνω δεν δουλέψει, είναι μέσω κάποιων scripts που θα φτιάξουμε. Κάποια events στο acpi. Αυτή η μέθοδος μπορεί να χαρακτηριστεί κάπως, για πιο προχωρημένους χρήστες, διότι ίσως χρειαστεί η παρέμβασή σας. Δεν είναι δηλαδή απλά αντιγραφή και επικόλληση κάποιων εντολών και ούτε ισχύει ακριβώς το ίδιο για όλα τα Laptop. Οι τιμές ίσως να αλλάζουν, όπως και οι διαδρομές.
Παρακάτω θα παραθέσω την διαδικασία που έκανα εγώ στο δικό μου Laptop και δούλεψε, όπως επίσης επεξηγήσεις των εντολών και των scripts.

Ξεκινάμε δίνοντας την εντολή

for i in /sys/class/backlight/*; do echo $i; cat $i/brightness; cat $i/max_brightness; done

Η παραπάνω εντολή θα μας δώσει τις τιμές της φωτεινότητας και θα μας επιτρέψει να δούμε πόσες συσκευές έχει αναγνωρίσει το σύστημα. Τα αποτελέσματα σε μένα είναι

/sys/class/backlight/acpi_video0
9
9
/sys/class/backlight/intel_backlight
976
976

Το παραπάνω μου λέει πως έχω δύο συσκευές αλλαγής φωτεινότητας, με την πιο πιθανή να δουλεύει εκείνη της intel (μιας και η κάρτα γραφικών μου είναι intel).
Το επόμενο βήμα είναι να δοκιμάσουμε αν λειτουργεί όντως η αλλαγή φωτεινότητας. Πάμε να δοκιμάσουμε την Intel.
Δίνουμε την εντολή

echo 800 | sudo tee /sys/class/backlight/intel_backlight/brightness

Η maximum τιμή είναι 976 και η current τιμή είναι επίσης 976. Οπότε δίνουμε μια χαμηλότερη τιμή να δούμε αν θα μειωθεί η φωτεινότητα. Σε εμένα μειώθηκε. Οπότε προχωράμε στο επόμενο βήμα.

Ας ακούσουμε το acpi τώρα, να δούμε τι γίνεται όταν πατάμε τα function keys. Δίνουμε την εντολή
acpi_listen και μετά πατάμε Fn+δεξί βελάκι, Fn+αριστερό βελάκι, εναλλάξ 3-4 φορές. Σε εμένα η αλλαγή φωτεινότητας γίνεται με Fn+βελάκια.
Η παραπάνω ενέργεια πρέπει να παράξει κάποιες τιμές. Σε εμένα αυτές ήταν

video DD03 00000086 00000000
video DD03 00000087 00000000
video DD03 00000086 00000000
video DD03 00000087 00000000
video DD03 00000086 00000000
video DD03 00000087 00000000
video DD03 00000086 00000000
video DD03 00000087 00000000

Παραπάνω πατάω εναλλάξ Fn+δεξί, Fn+ αριστερό βελάκι. Οι παραπάνω τιμές θα μας χρειαστούν για το επόμενο βήμα.
Πάμε να φτιάξουμε τα events στο acpi.

gksudo gedit /etc/acpi/events/acer-brightness-up

Προσθέτουμε μέσα τα παρακάτω

event=video DD03 00000086 00000000
action=/etc/acpi/acer-brn-up.sh

Εδώ έχω βάλει το event να στοχεύει στο αποτέλεσμα που παρήγαγε το δεξί βελάκι μιας και με αυτό γίνεται η αύξηση της φωτεινότητας. Το action είναι μια διαδρομή για ένα script που θα δημιουργήσουμε στην συνέχεια.
Αντίστοιχα φτιάχνουμε και το acer-brightness-down στην ίδια διαδρομή, να στοχεύει στο event που παρήγαγε το αριστερό βελάκι (video DD03 00000087 00000000) και το action=/etc/acpi/acer-brn-down.sh
Ας δώσουμε και δικαιώματα εκτέλεσης στα event μας.

sudo chmod +x /etc/acpi/events/acer-brightness-up
sudo chmod +x /etc/acpi/events/acer-brightness-down

Πάμε να φτιάξουμε τα script τώρα.
Το πρώτο είναι (θυμηθείτε το action= στο even/acer-brightness-up)

gksudo gedit /etc/acpi/acer-brn-up.sh

Προσθέτουμε μέσα τα παρακάτω

#!/bin/bash

curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 976 ]; then
curr=$((curr+100));
echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi

Το παραπάνω script απλά θέτει μια μεταβλητή και εκμεταλλεύεται την if για να πει «αν η τιμή είναι μικρότερη του 976 τότε να την αυξάνεις ανά 100»
Το αντίστοιχο script της μείωσης της φωτεινότητας είναι

gksudo gedit /etc/acpi/acer-brn-down.sh

Με περιεχόμενα,

#!/bin/bash

curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -gt 100 ]; then
curr=$((curr-100));
echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi

το οποίο λέει: «Αν η τιμή είναι μεγαλύτερη από το 100, τότε να την μειώνεις ανά 100».
Αποθηκεύουμε τα script και τους δίνουμε δικαιώματα εκτέλεσης

sudo chmod +x /etc/acpi/acer-brn-up.sh
sudo chmod +x /etc/acpi/acer-brn-down.sh

Τέλος, κάνουμε μια επανεκκίνηση του acpi daemon με

sudo service acpid restart

και δοκιμάζουμε αν λειτουργούν τα Function Keys.
Αν λειτουργούν, τότε θα έχετε και αλλαγή φωτεινότητας, αλλά θα λειτουργεί και η ειδοποίηση σωστά.

UPDATE: 25/04/2014

Δημιουργώντας το αρχείο 20-intel.conf

Για πυρήνες 3.13 και πάνω, μπορούμε να δοκιμάσουμε να δημιουργήσουμε ένα configuration αρχείο στην διαδρομή /etc/X11/xorg.conf.d/ με όνομα 20-intel.conf.
Δίνουμε πρώτα την εντολή

lspci -nn | grep -i vga

και κρατάμε τον αριθμό από το Bus ID. Π.χ αν το αποτέλεσμα είναι

01:00.0 VGA compatible controller [0300]..........

κρατάμε τον αριθμό 1
αν είναι

02:00.0 VGA compatible controller..............

τότε τον αριθμό 2 ..κλπ.

Δημιουργούμε το .conf αρχείο

sudo gedit /etc/X11/xorg.conf.d/20-intel.conf

σε περίπτωση που μας επιστρέψει μήνυμα λάθους ότι δεν υπάρχει το xorg.conf.d , το δημιουργούμε πρώτα με

sudo mkdir /etc/X11/xorg.conf.d/

Τα περιεχόμενα του αρχείου να είναι:

Section "Device"
        Identifier  "Intel Driver"
        Driver      "intel"
        Option      "Backlight"  "intel_backlight"
EndSection

αποθηκεύουμε το αρχείο και κάνουμε μια επανεκκίνηση.

Καλή επιτυχία.

Συμβάλετε κι εσείς με ένα σχόλιο

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s