25 января 2013 г.

Установка и настройка asus-switcheroo в Linux Ubuntu.

Года 3-4 назад в ноутбуках стала широко применяться гибридная графика. Данная технология была призвана решить две задачи на одном устройстве: автономность и производительность, в зависимости от того, что вам наиболее важно в данный момент.

В этом посте я хочу затронуть лишь одну из подобных технологий: Optimus. Данная технология была разработана компанией NVidia и в отличие от предшествующих технологий, Optimus без вмешательства пользователя, самостоятельно, по мере необходимости переключает видеокарты. При этом, вы можете даже не подозревать о том, что ноутбук переходит с одной видеокарты на другую. Но у этой технологии есть значительный минус - она работает лишь под управлением Microsoft Windows 7. Даже для Windows XP нет ее реализации.

За все время существования данной технологии для UNIX-подобный ОС было предложено не мало вариантов решения, среди которых можно отметить vgaswitcheroo и Bumblbee. Правда, все они далеки от совершенства, да и работают не на всех лэптопах.

Причина плохой поддержки технологии Optimus для GNU/Linux кроется в закрытости программного кода и различной аппаратной реализации в разных моделях ноутбуков, даже от одного производителя. Так, для ноутбуков фирмы ASUS неким Алексом Вильямсом из Red Hat был разработан специальный пакет под названием asus-switcheroo, основанный на технологии vgaswitcheroo. Это одно из простейших решений для переключения между видеокартами в ноутбуках ASUS: вам предлагают просто отключить дискретную видеокарту по вводу соответствующей команды.

Вильямсон проверял ее только на ноутбуке ASUS UL30VT, но уверяет, что ему писали об удачном применении и на других лэптопах. У меня же, имеется ASUS UL30JT и утилита эта прекрасно работает. А потому, данное руководство будет описано с учетом опыта на ноутбуке ASUS UL30JT и дистрибутива Ubuntu.

Перед установкой asus-switheroo вам необходимо убедиться в наличии метода _DSM. Для этого вам необходимо извлечь из DSDT (Differentiated System Description Table) необходимую информацию. (Как добыть сам файл DSDT я писал здесь.) После получения файла под названием dsdt.dsl, спокойно открываем его в любом текстовом редакторе, например, gedit. И при помощи поиска ищем необходимый нам метод _DSM. (Для этого достаточно ввести в строке поиска "method (_dsm".) Искать необходимо что-то вроде этого:

...
Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg0, Buffer (0x10)
{
/* 0000 */ 0xA0, 0xA0, 0x95, 0x9D, 0x60, 0x00, 0x48, 0x4D,
/* 0008 */ 0xB3, 0x4D, 0x7E, 0x5F, 0xEA, 0x12, 0x9F, 0xD4
}))
{
...

Также стоит убедиться в наличии методов MXMX и MXDS:

...
Method (MXMX, 1, NotSerialized)
{
Store (One, HLMM)
Store (One, HCMM)
Store (One, HDMU)
Store (One, HHMM)
Store (Zero, HLMX)
Store (Zero, HCMX)
Store (Zero, HDMX)
Store (Zero, HHMX)
\SGPL (0x42, 0x01, 0x01)
Return (0x01)
}
...

...
Method (MXDS, 1, NotSerialized)
{
If (And (Arg0, 0x00))
{
Return (\_SB.PCI0.GFX0.HLMX)
}
Else
{
Store (One, \_SB.PCI0.GFX0.HLMX)
Store (One, \_SB.PCI0.GFX0.HCMX)
\SGPL (0x34, 0x01, 0x00)
Sleep (0x64)
}
}
...

Если данные методы поддерживаются вашим устройством, то скорее всего asus-switcheroo будет работать. А значит, можем перейти к установке самого пакета. Для этого необходимо перейти на git проекта и загрузить пакет программы к себе на лэптоп, например, в zip архиве. И после успешной загрузки распакуем его в домашнюю папку. А далее, в консоли переходим в директорию, распакованного нами, архива при помощи такой командой:

cd ~/asus-switcheroo-master

Далее нам необходимо подготовить пакет к установке. Для этого воспользуемся командой:

make

После успешного завершения процесса воспользуемся командой для его установки:

sudo make install-ubuntu

По завершению установки утилиты, желательно, перезагрузить ноутбук.

Алекс указывает на то, что для работы утилиты раздел debug должен быть примонтирован. Чтобы в этом убедиться, необходимо в файле /etc/mtab найти строку примерно такого содержания:

none  /sys/kernel/debug  debugfs  rw  0  0

Если же подобной строки не окажется то, раздел debug необходимо установить на автомонтирование. Для этого в файле /etc/fstab необходимо добавить такую строку (как правильно это сделать я писал в этом посте):

debugfs  /sys/kernel/debug  debugfs  defaults  0  0

Теперь, можно попробовать отключить дискретную видеокарту. Для этого выполним следующую команду:

sudo echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

Скорее всего, терминал выдаст сообщение о том, что вам отказано в доступе. Возникновение подобной ошибки заключается в том, что даже пользователь sudo не имеет всех полномочий над директорией debug и всех ее файлах. Поэтому, для решения этой проблемы можно сменить права на директорию debug и файл switch вводом следующих команд:

sudo chmod 755 /sys/kernel/debug
sudo chmod 666 /sys/kernel/debug/vgaswitcheroo/switch

Но, после перезагрузки системы, в целях безопасности, эти права будут сброшены. Поэтому, пропишем в файл /etc/rc.local те же строки, но без запроса прав администратора:

chmod 755 /sys/kernel/debug
chmod 666 /sys/kernel/debug/vgaswitcheroo/switch

И уже после стольких движений пальцами, можно спокойно перезагрузить устройство и выполнить следующую команду:

sudo echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

Отключение видеокарты пройдет "молча": консоль лишь ненадолго задумается и выдаст приглашение на ввод очередной команды. А для того, чтобы при включении ноутбука дискретная видеокарта автоматически отключалась можно, выше указанную команду, также добавить в файл rc.local, но, конечно же, без команды sudo.

Конечно, можно попробовать написать скрипт, который будет отключать видеокарту по комбинации клавиш или при иных ситуациях, но это уже отдельная история. А пока, на этом все. Приятных экспериментов! :)

Комментариев нет:

Отправить комментарий