Debian on Sony Vaio NR270N

Преди доста време се бях оплакал от не особено добрата съвместимост на Debian testing с тогава новото Sony Vaio VGN-NR270N. Проблемите ми бяха свързани с нещица от сорта на неработещи функционални клавиши за управление на backlight-а на дисплея, както и дразнещият feature звука от вградените колонки да не спира при включването на слушалки в line out-a. Днес се сетих, че не е лоша идея да споделя как се оправих и с двата проблема… Предупреждавам, постът е дълъг, пълен с команди, или изхода от тях, има и малко listing-и, така че всеки трезвомислещ човек, който няма ядове с някои от тези два проблема, би следвало да го прескочи с чиста съвест.

За проблема със слушалките – в /etc/modprobe.d/alsa-base трябваше да конфигурирам драйвера snd_hda_intel по следния начин:

options snd_hda_intel model=sony-assamd

После с rmmod разкарах заредените модули свързани със snd_hda_intel и ги презаредих с което приключи с този проблем.

С осветлението на дисплея, обаче, нещата не бяха толкова розови. Специалните клавиши за него изобщо не работеха. За да получа кодовете на brightness up (Fn+F5) и brightness down (Fn+F6) пуснах от Konsole в KDE xev и с фокус върху него натиснах последователно двете комбинации. Резултата беше следното:

KeyRelease event, serial 31, synthetic NO, window 0x1a00001,
    root 0x78, subw 0x0, time 3516679, (535,672), root:(538,694),
    state 0x0, keycode 101 (keysym 0xffd1, F20), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
    .... (skipped) ....
KeyRelease event, serial 34, synthetic NO, window 0x1a00001,
    root 0x78, subw 0x0, time 3520374, (535,672), root:(538,694),
    state 0x0, keycode 212 (keysym 0xffd2, F21), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Kодовете, които ми трябваха бяха 101 и 212 (втората секция на всеки трети ред от KeyRelease event-a). Следващата стъпка беше да ги добавя във файла .xmodmaprc в /home/stinger.

# /home/stinger/.xmodmaprc
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
keycode 101 = F20
keycode 212 = F21

Това, обаче не ми реши проблема изобщо. За да накарам тези клавиши да работят, в KDE Control Center > Regional & Acessibility > Keyboard Actions си създадох два action-a от тип Keyboard Shortcut -> Command/URL (simple). Първият кръстих Brightness Up с Shortcut Key F21 и action /etc/acpi/sonybright.sh up, а вторият – Brightness Down с Shortcut Key F20 и action /etc/acpi/sonybright.sh down.

Сега вече командата се извикваше, но пак не вършеше никаква работа :) Причината беше, че търси за текущата стойност на осветеността на дисплея в /sys/class/backlight/sony/brightness, а поне на моята машина на съществуваше изобщо директория sony в /sys/class/backlight.

С малко човъркане из Google се спрях на бързото решение с ползването на вградения в X инструмент за управление на backlight-a, кръстен… xbacklight. Копирах си неработещия файл:

cp /etc/acpi/sonybright.sh /etc/acpi/sonybright.sh.orig

и на негово място създадох файл sonybright.sh със следното съдържание:

#!/bin/bash
case $1 in
   down)
      xbacklight -time 100 -steps 12 -dec 12.5
   ;;
   up)
      xbacklight -time 100 -steps 12 -inc 12.5
   ;;
   *)
      echo "Usage /etc/acpi/sonybright.sh {up|down}"
   ;;
esac

Забелязах обаче нещо странно – ACPI не хващаше event-a от клавишите. С малко четене разбрах, че Sony имат два модела контролери за notebooks – първият беше SNC (Sony Network Controller), вторият – SPIC. Моята машина беше със SNC, затова mod-нах леко два файла в /etc/acpi/events, докато не получих това:

# /etc/acpi/events/sony-brightness-up

event=sony/hotkey SNC 00000001 00000011
action=/etc/acpi/sonybright.sh up
# /etc/acpi/events/sony-brightness-down

event=sony/hotkey SNC 00000001 00000010
action=/etc/acpi/sonybright.sh down

Рестартирах acpi демона и пуснах следната команда, тествайки клавишите:

acpi_listen

Клавишите проработиха (поне връщаха event-и от вида sony/hotkey SNC 00000001 00000010), но xbacklight не вършеше никаква работа, защото достъпът до X като root беше забранен. Реших да го оставя така и да разчитам на KDE Input Actions за управление на клавишните комбинации към скрипта. Ако искате да имате управление през ACPI – разрешете root достъпа до X, или в конзола, като нормален потребител, напишете:

xhost +

За мен лично сигурността е по-важна от глезотиите. След това остана само да изпълня следното и всичко тръгна по вода:

xrandr --output LVDS --set BACKLIGHT_CONTROL native

За да не ми се налага всеки път като заредя KDE да пиша въпросната команда я сложих в края на .profile в /home/stinger. Малка персонализация на решението беше да сложа и команда, която променяше осветлението на 50% от интензитета му при всеки login, защото 100% ми идваха в повече. Затова, последните два реда на .profile изглеждат така:

xrandr --output LVDS --set BACKLIGHT_CONTROL native
xbacklight -set 50

С това машинката започна да си управлява осветлението на екрана, вярно само под KDE, но все пак е нещо. В GNOME получавам notification за статуса на осветлението, дори стойността му в notification-a се променя, но xbacklight не се изпълнява. При разрешаване на root access към X-a нещата ще проработят и там, а и в X изобщо, гарантирам… Друг е въпроса дали това е цената, която сте готови да платите за тази глезотийка. В крайна сметка, винаги в конзола можете да напишете нещо от сорта на:

xbacklight -set 50

Маркери: , , ,

За тази статия



Категории