03.05.2013

Asus EeePC 1011cx и костыли с подсветкой

В моём хозяйстве появилась маленькая железка для ведения логов лекций и прочего рукописного стаффа: я из того поколения людей, которым проще печатать, чем писать. Собственно, железко на Яндекс.Маркете — характеристики и прочую отзывоту можете прочитать там. Я же вам расскажу о костылях с 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). Про этот драйвер следует знать следующее:

  1. аппаратное ускорение видео не будет работать (пока кто-то не сподобится написать нормальный драйвер или открыть и пофиксить проприетарный), так что этот ваш mplayer будет декодить видео на процессоре, и о FullHD можно забыть (хотя кто будет смотреть FullHD-видео на десятидюймовом экранчике с разрешением 1024х600?)
  2. все аппаратные клавиши, связанные с экраном (яркость, переключение на VGA/HDMI) не работают из коробки
  3. изменение яркости не работает штатными средствами.
Подчёркиваю, штатными средствами. Ибо есть костыль, который я честно стырил из арчевики (правда, там говорилось про ноутбук 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.


22 комментария:

  1. >Intel Atom N2600
    >Intel GMA 3600
    Также напоролся на эту конфигурацию и вдоволь настрадался (Samsung NC110). Сижу под fbdev, ибо vesa по умолчанию ставит 800x600 (в новых ядрах вроде исправили).

    > не удивлюсь, если под виндой его
    выключают.
    Вполне успешно включен по дефолту. Сам гипертрединг в линуксах спасает для декодирования 720р, но, по-моему, это извращение, качаю 480р.

    Яркость кручу тем же скриптом с арчевики. VGA пашет, а вот HDMI тестить не на чем.
    Также не работает ждущий режим, т.к. после пробуждения картинка гумно. Сон не пробовал.

    ОтветитьУдалить
    Ответы
    1. > fbdev

      не пробовал, modesetting вроде как лучше, чем fbdev ;)

      > но, по-моему, это извращение, качаю 480р.

      извращение вообще смотреть кинцо на таком маленьком экране :)

      > HDMI

      у меня есть на чём тестить, отпишусь, когда доберусь до провода)

      > Также не работает ждущий режим, т.к. после пробуждения картинка гумно. Сон не пробовал.

      и то, и другое работает "искаропки", единственная беда — яркость сбрасывается в ff (максимум)

      Удалить
    2. > извращение вообще смотреть кинцо на таком маленьком экране :)
      Бывают же ситуации, когда посмотреть хочется, но не на чем. Раньше для таких целей пользовался PSP, хе-хе.

      > и то, и другое работает "искаропки"
      Вот это либо неимоверно повезло тебе, либо в новых ядрах действительно пофиксили (также, вполне возможно, что это заслуга modesetting). Каюсь, арчем на нём не пользовался уже около полугода, потому как на данный момент для решения большинства задач нужна именно винда :с

      Думаю на следующих выходных-таки добраться до него, да запилить арчик по-новой.

      Удалить
    3. > Бывают же ситуации, когда посмотреть хочется, но не на чем. Раньше для таких целей пользовался PSP, хе-хе.

      убить последние глаза? there is an app for that :D

      > Каюсь, арчем на нём не пользовался уже около полугода, потому как на данный момент для решения большинства задач нужна именно винда :с

      как дружишь с systemd? есть ли неприязнь к нему? если да — арч уже не для тебя :)

      > Думаю на следующих выходных-таки добраться до него, да запилить арчик по-новой.

      пробуй :)

      Удалить
    4. Дружу-таки. На втором компе стоит арч, обновленный до systemd. Почему-то дольше всего привыкал к systemctl.

      Удалить
    5. в systemctl самое непривычное — указание [action] [unit], а не наоборот

      раньше-то было что-то типа service gdm restart, а теперь systemctl restart kdm :)

      Удалить
    6. после апдейта на ведро 3.9 изменение яркости работает искаропки. WIN.

      Проверь у себя ;)

      Удалить
    7. Поставил сегодня на него арч. modesetting заработал сразу, но вот яркости из коробки я не заметил.
      Либо это не для всех моделей, либо я уже не знаю, что. Проверь, может, у тебя старый скрипт выполняется?

      Удалить
    8. А вот, что происходит при попытке стартануть xf86-video-vesa: http://s.aloneunix.ru/img/IMG_20130602_150159.jpg

      Удалить
    9. у меня с весой оно тормозило адово, но работало. Возможно, самсунгопроблемы.

      Скриптуха точно не работает, ибо:

      1) никогда не подхватывалась xfce-power-manager, а сейчас всё как раз он и разруливает;
      2) я её удалил нафик

      Удалить
  2. Как избавиться от тормозов в гномшелле (Samsung NC110-p4)?

    ОтветитьУдалить
    Ответы
    1. драйвер иксов — modesetting?

      Удалить
    2. Не знаю, modesetting установлен, но он или не он работает я не знаю, как проверить?

      Удалить
    3. А если не он, то как его активировать на федоре?

      Удалить
    4. Этот комментарий был удален автором.

      Удалить
    5. и удали драйверы vesa и fbdev, если они у тебя установлены

      Удалить
  3. Не помогло. Те же тормоза в гномшелле.

    ОтветитьУдалить
  4. Раз уж тут собрались владельцы схожих систем, давайте меряться glxgears.
    Вот мой:
    [aloneunix@neko-netbook ~]$ glxgears
    304 frames in 5.0 seconds = 60.799 FPS
    682 frames in 5.0 seconds = 136.319 FPS
    739 frames in 5.0 seconds = 147.604 FPS
    704 frames in 5.0 seconds = 140.751 FPS
    671 frames in 5.0 seconds = 134.172 FPS
    733 frames in 5.0 seconds = 146.490 FPS
    734 frames in 5.0 seconds = 146.700 FPS
    732 frames in 5.0 seconds = 146.343 FPS
    764 frames in 5.0 seconds = 152.691 FPS

    ОтветитьУдалить