В моём хозяйстве появилась маленькая железка для ведения логов лекций и прочего рукописного стаффа: я из того поколения людей, которым проще печатать, чем писать. Собственно, железко на Яндекс.Маркете — характеристики и прочую отзывоту можете прочитать там. Я же вам расскажу о костылях с Linux-ом. UPD: описанные далее костыли актуальны для версии ядра Linux 3.8. В ядре 3.9 сделали что-то, и теперь изменение яркости работает “искаропки” на данном девайсе (то есть адекватно воспринимается, например, xfce4-power-manager-ом). Необходимость нижеописанного костыля ставится под сомнение (если у вас не Debian ;))
Начнём с того, что железка 32-хбитная: в 2013-м году это выглядит ужасающе, но пока что Arch не выкинул поддержку i686 из своих реп (да и Xilitra свою бету таки выкатит летом), так что это не столь печально. А вот четырёхядерный (привет гипертредингу!) тридцатидвухбитный проц — это заставляет шаблоны трещать аки жёсткие диски 90-х годов под Windows XP без сервиспаков ;) Что интересно — про гипертрединг в рекламных материалах к данному ноутбуку не говорится ни слова, не удивлюсь, если под виндой его выключают.
Wi-Fi модуль и прочие стандартные вещи любой современный Linux на этом нетбуке подхватит “искаропки”. Тачпад мимикрирует под PS/2 мышь, и его функционал напрямую зависит от настроек вашего дистрибутива, DE, машины времени и фазы луны (и установленности пакета xf86-input-mouse). Батарейки даже без особой настройки в режиме “юзаем как печатный станок и тестируем всё, что тестируется” хватает на 6 с половиной часов — как раз на учебный день или около того. Всё бы ничего, но есть у этого нетбука беда — и это его серьёзная и главная беда.
Главная беда в этой железке — видео. Обычно Intel славится своими открытыми дровами ко всему своему железу, но это — печальное исключение: чип Cedar Trail разработан не ими, так что об официальных открытых дровах под этот наш пингвин можно забыть. Об официальных закрытых драйверах тоже можно забыть — они рассчитаны на древние ядро, Xorg и Mesa. Но у сообщества таки хватило сил накатать нечто вроде драйвера, о чём мы сейчас и поговорим.
Под Arch пакет с данным драйвером называется xf86-video-modesetting и не требует дополнительной настройки (в арче: ваш дистрибутив может обладать иными представлениями о действительности). Судя по названию, я могу предположить, что это generic-драйвер, юзающий KMS в качестве опоры для работы — но я могу ошибаться. Учтите, что если у вас стоит драйвер vesa — без дополнительной настройки грузиться будет он, а не modesetting, из-за чего производительность упадёт ниже плинтуса (именно этим объясняются тормоза Ubuntu 13.04 LiveCD). Про этот драйвер следует знать следующее:
- Аппаратное ускорение видео не будет работать (пока кто-то не сподобится написать нормальный драйвер или открыть и пофиксить проприетарный), так что этот ваш mplayer будет декодить видео на процессоре, и о FullHD можно забыть (хотя кто будет смотреть FullHD-видео на десятидюймовом экранчике с разрешением 1024х600?)
- Все аппаратные клавиши, связанные с экраном (яркость, переключение на VGA/HDMI) не работают из коробки изменение яркости не работает штатными средствами.
Подчёркиваю, штатными средствами. Ибо есть костыль, который я честно стырил из арчевики (правда, там говорилось про ноутбук Samsung с похожей проблемой), и применил под свои нужды.
Код костыля:
#!/bin/bash
var1=`setpci -s 00:02.0 F4.B`
var1d=$((0x$var1))
case "$1" in
up)
#calculate new brightness
var2=`echo "ibase=10; obase=16; a=($var1d+16);if (a < 255) print a else print 255" | bc`
echo "$0: increasing brightness from 0x$var1 to 0x$var2"
setpci -s 00:02.0 F4.B=$var2
;;
down)
#calculate new brightness
var2=`echo "ibase=10; obase=16; a=($var1d-16);if (a > 15) print a else print 15" | bc`
echo "$0: decreasing brightness from 0x$var1 to 0x$var2"
setpci -s 00:02.0 F4.B=$var2
;;
set)
#n.b. this does allow "set 0" i.e. backlight off
echo "$0: setting brightness to 0x$2"
setpci -s 00:02.0 F4.B=$2
;;
get)
echo "$0: current brightness is 0x$var1"
;;
toggle)
if [ $var1d -eq 0 ] ; then
echo "toggling up"
setpci -s 00:02.0 F4.B=FF
else
echo "toggling down"
setpci -s 00:02.0 F4.B=0
fi
;;
*)
echo "usage: $0 {up|down|set |get|toggle}"
;;
esac
exit 0
Данный скрипт использует очень ценную и полезную для нас утилиту setpci для нужной нам цели — регулировки яркости. Яркость регулируется на самом “нижнем” уровне: эксперименты с этой утилитой могут привести к беде, так что не советую особо баловаться с этой тулзой. В нашем же случае эта тулза шлёт в соответствующий регистр видюхи сигнал об установлении яркости ниже/выше/на определённый уровень, например (допустим, что наш скрипт назван backlight.sh; все действия идут от суперпользователя):
backlight.sh up
— поднимает яркость экранаbacklight.sh down
— опускает яркость экранаbacklight.sh toggle
— включает экран (яркость 100%) или выключает экран (яркость 0%, аналогично команде vbetool dpms off)backlight.sh set [шестнадцатеричная цифра, например 0f]
— задаёт яркость,00
— минимум (выключенный экран),ff
— максимумbacklight.sh get
— выплёвывает текущую яркость.
Теперь на кнопки Fn+F4 и Fn+F5 можно повесить команды backlight.sh down
и backlight.sh up
соответственно (озаботьтесь тем, чтобы они запускались от суперюзера правильно!) средствами вашего DE. Да, пока что это не решение по автоматической регулировке яркости, но уже что-то: /me в поисках чего-нибудь типа power manager-а, к которому можно будет прикрутить данный скрипт :) Надеюсь, данный скрипт сэкономит вам немного нервов.
Данный пост был написан на Asus EeePC 1011cx, на котором установлен Archlinux и Xfce вместо DE.