LINUX.ORG.RU

Регулировка яркости для GMA500/GMA3600 во FreeBSD

 , , , ,


3

1

Шалом, котанчики.

В общем есть нетбук с GMA3600 под FreeBSD, в котором невозможно было регулировать яркость. Лупила на всю. xbacklight и intel_backlight не работали, видимо потому что вместо видео там проклятый всеми ОС Intel GMA3600. Поэтому я соорудил небольшой скриптик, позволяющий регулировать яркость. К сожалению, только от root'а. Впрочем, %wheel ALL=(ALL) NOPASSWD: /path/to/intel_bl легко решает эту проблему. Если вдруг кому-то пригодится:

#!/bin/sh

intel_bl_setpci="pciconf -w"
intel_bl_getpci="pciconf -r"
INTEL_BL_DEVICE="pci0:0:2:0"
INTEL_BL_REGISTER="0xf4"
INTEL_BL_MAX_VALUE="255"
INTEL_BL_COMMAND="$1"
INTEL_BL_SET_VALUE="$2"

[ "`id -u`" -eq "0" ] || { echo "Only root can run `basename $0`." ; exit 1 ; }

intel_bl_use() {
    echo "Use: `basename $0` <+|-|=> <DEC_VALUE>"
    echo "Final max value can be no more ${INTEL_BL_MAX_VALUE}"
    exit 0
}

INTEL_BL_CUR_VALUE="`${intel_bl_getpci} ${INTEL_BL_DEVICE} ${INTEL_BL_REGISTER}`"
INTEL_BL_CUR_VALUE_DEC="`let 0x${INTEL_BL_CUR_VALUE}`"

if [ ! "$2" ] ; then
    echo "Current value is ${INTEL_BL_CUR_VALUE_DEC}"
    intel_bl_use
fi

if [ "$1" = "+" -o "$1" = "-" ] ; then
    INTEL_BL_EXP_VALUE="$((${INTEL_BL_CUR_VALUE_DEC} ${1} ${INTEL_BL_SET_VALUE}))"
elif [ "$1" = "=" ] ; then
    INTEL_BL_EXP_VALUE="${INTEL_BL_SET_VALUE}"
else
    intel_bl_use
fi

if [ "${INTEL_BL_EXP_VALUE}" -gt "${INTEL_BL_MAX_VALUE}" ] ; then
    echo "${INTEL_BL_EXP_VALUE} must not be greater than ${INTEL_BL_MAX_VALUE}" ; exit 1
elif [ "${INTEL_BL_EXP_VALUE}" -lt "0" ] ; then
    echo "${INTEL_BL_EXP_VALUE} must not be less than 0" ; exit 1
fi

echo "Set backlight: ${INTEL_BL_CUR_VALUE_DEC} -> ${INTEL_BL_EXP_VALUE}"
${intel_bl_setpci} ${INTEL_BL_DEVICE} ${INTEL_BL_REGISTER} 0x`printf "%x" ${INTEL_BL_EXP_VALUE}`

Он же на pastebin.

В параметре INTEL_BL_DEVICE указывается код девайса из pciconf, с вероятностью 99,9% менять не придётся. Запуск без параметров возвращает текущее значение в десятичной системе от 0 до 255. Между +, - или = и значением необходим пробел. Скрипт легко заставить работать в Линуксе, если подправить значения intel_bl_setpci, INTEL_BL_DEVICE, INTEL_BL_REGISTER.

Будут впоросы, пишите в личку.

★★★★★

Последнее исправление: IPR (всего исправлений: 1)

Оппа! Щас заценим! Больная тема, и не только на ноутах. Есть куча недоматеринок с этой недографикой, с которыми пришлось столкнуться многим.

Oberstserj ★★
()

Будут впоросы, пишите в личку.

Не у всех есть возможность, кстати. Лично у меня нет, а вопросы чую будут.

Oberstserj ★★
()

%wheel ALL=(ALL) NOPASSWD: /path/to/intel_bl

А это минутка юмора была, видимо. Так себе затея давать права левым процессам.

Oberstserj ★★
()
Ответ на: комментарий от IPR

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

Oberstserj ★★
()
Ответ на: комментарий от Oberstserj

На 3650 может заработать xbacklight или intel_backlight.

IPR ★★★★★
() автор топика
Ответ на: комментарий от iron

Ок, буду на работе - скину.

IPR ★★★★★
() автор топика
Ответ на: комментарий от iron

Скинул, на премодерации.

IPR ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.