Когда-то никаких графических конфигураторов не существовало, стартовые скрипты занимали 200 строк в сумме, а идеи HAL и udev еще только начинали витать в умах разработчиков. Грамотная начальная конфигурация UNIX могла отнять целый день, а ее процесс сопровождался чтением книг и долгими поисками информации.

Сегодня дистрибутивы Linux сами подстраиваются под оборудование и почти не требуют настройки, однако ситуации, требующие личного вмешательства пользователя, могут возникнуть в самый неожиданный момент.

Считается, что UNIX-системы еще не доросли до того уровня, чтобы полностью сравняться с Windows в плане поддержки оборудования. Дескать, хоть драйвера и есть, но появляются они с задержкой и не могут обеспечить полной и всесторонней поддержки оборудования. А фирменных утилит от производителя для Linux и вовсе не дождешься. Как, например, тонко настроить тачпад ноутбука или управлять монитором без нативных утилит? К счастью, все далеко не так плачевно, и зачастую им можно найти достойную альтернативу.

Тюнингуем тачпад

С выходом версии 7.3 X.Org получил механизм горячего подключения, позволивший ему подхватывать любые устройства ввода в полностью автоматическом режиме. Особое удобство нововведение принесло владельцам ноутбуков, многие из которых попеременно пользуются мышью и тачпадом.

Отныне после подключения мышь сразу становилась активной и могла принимать участие в управлении курсором наравне со своим емкостным собратом. Картина омрачалась только тем, что тачпад при этом не отключался и продолжал функционировать, постоянно мешая набирать текст (кто знает, тот поймет). Эта же проблема сохранялась и при отключенной мыши (но в этом случае можно было успокоить себя хотя бы тем, что тачпад все-таки нужен).

Об этой проблеме производители ноутбуков уже давно знают и оснащают устройства специальным механизмом принудительного отключения тачпада, который состоит из специально помеченной клавиши, которую следует нажимать совместно с <Fn>, и драйвера, который перехватывает эту клавиатурную комбинацию и выключает мешающий сенсор. Естественно, в UNIX эта комбинация не работает. Но совсем не из-за отсутствия драйвера, как можно было бы подумать, а в угоду безопасности системы.

Дело в том, что почти все современные ноутбуки (а также куча других устройств) оснащаются сенсорными панелями, разработанными фирмой Synaptics. За их работу в X.Org отвечает прекрасный одноименный драйвер, а также специальная утилита и демон, позволяющие производить настройку сенсорной панели и автоматически менять режим ее работы. С помощью synclient можно спокойно отключить тачпад в любое время, а syndaemon позволяет отключать его в автоматическом режиме в зависимости от каких-либо внешних условий. Более того, во многих Linux-дистрибутивах уже полностью настроены горячие клавиши, деактивирующие тачпад на некоторых ноутбуках (например, есть настройки для всех ноутбуков ASUS — /etc/acpi/events/asus-touchpad, /etc/apci/asus-touchpad.sh).

Проблема только в том, что все это не работает. В целях повышения безопасности дистрибутивостроители держат механизм разделяемой памяти, используемый для взаимодействия всех этих компонентов с драйвером тачпада в выключенном состоянии (иначе любая вредоносная программа с минимальными правами легко смогла бы получить полный контроль над тачпадом, а значит, и над всеми действиями пользователя).

К счастью, активировать разделяемую память в драйвере synaptics очень легко, достаточно добавить всего одну строку в xorg.conf.
Однако здесь нас поджидает еще одна засада. Новый X-сервер (а именно — версия 1.8) уже не использует единый конфигурационный файл, а опирается на множество конфигов, расположенных в каталоге /usr/lib/X11/xorg.conf.d. Поэтому придется разбираться с его структурой (на самом деле совместимость с обычным конфигом, конечно же, сохранена, но правка xorg.conf теперь не является тру-вэй). Необходимый нам конфиг носит имя 10-synaptics.conf и содержит несколько секций InputClass, описывающих сенсорные панели разных ноутбуков, в одну из которых необходимо добавить строку «Option «SHMConfig» «true»» (не нашел свой ноут — пиши в самую первую секцию), а также несколько настроек. Например:

# Вертикальная и горизонтальная прокрутка двумя пальцами
Option "VertTwoFingerScroll" "1"
Option "HorizTwoFingerScroll" "1"

Настройка скорости

Option "AccelFactor" "0.010"

Круговая прокрутка

Option "CircularScrolling" "on"
Option "CircScrollTrigger" "0"

Но если насущной необходимости нет, я бы не рекомендовал их туда помещать. Во-первых, драйвер synaptics достаточно умен, чтобы самостоятельно включить все поддерживаемые тачпадом возможности, включая такие вкусности, как прокрутка двумя пальцами и эмуляция второй и третьей клавиш мыши с помощью двух- и трехпальцевого тапа. Смысл имеет разве что изменение ускорения или включение круговой прокрутки (и отключение двухпальцевой).

Во-вторых, все это можно сделать с помощью графических настройщиков KDE/Gnome, программы gsynaptics или консольного клиента synclient (современный X.Org движется по пути тотального хотплага, поэтому все, что может быть задано динамически, не должно быть задано статически).После окончания конфигурирования сохраняем файл и перезагружаем ОСь или X.Org, кому что удобнее. После загрузки владельцы ноутбуков ASUS (и некоторых других фирм) могут начинать радоваться заработавшей комбинацией отключения тачпада. Все остальные набирают команду:

$ synclient TouchpadOff=1

Выключается присваиванием нуля. Идеально для навески на горячие клавиши. Если же вариант с горячей клавишей тебе не подходит, вот рецепт для автоматического отключения тачпада во время набора текста (добавить в ~/.xinitrc или в файл автозапуска DE):

$ syndaemon -K -d -i 1

Опция ‘-K’ призывает syndaemon отключать тачпад только во время набора текста, оставляя его работать при нажатии клавиатурных комбинаций, опция ‘-d’ делает программу фоновым процессом, а ‘-i’ устанавливает задержку до включения тачпада. Для когото может оказаться удобной опция ‘-t’, которая отключает только возможность тапа через нажатие на тачпад, оставляя возможность перемещать курсор.

А теперь ответ всем тем, кто говорит, что тема, поднятая в первом абзаце раздела, не была раскрыта:

ACTION=="add", SUBSYSTEM=="input", ID_CLASS="mouse",
RUN+="/usr/bin/synclient TouchpadOff=1"
ACTION=="remove", SUBSYSTEM=="input", ID_CLASS="mouse",
RUN+="/usr/bin/synclient TouchpadOff=0"

Эти строки необходимо поместить в файл /etc/udev/rules.d/01touchpad.rules. Назначение должно быть ясно.

Подключаем второй монитор

Сегодня дополнительными видеовыходами оснащают даже самые дешевые видеокарты и ультра-бюджетные ноутбуки. Наверняка один (или даже больше) такой выход есть и на твоей видеокарте. Благодаря ему к машине можно подключить второй монитор, проектор, телевизор или любое другое устройство вывода информации, поддерживающее подключение с помощью VGA- или HDMIвходов. Проблема только в том, что без дополнительной настройки это устройство не заработает, а если и заработает, то совсем не так, как предполагалось.

Хорошо, когда в окружение рабочего стола уже встроены средства настройки второго монитора (например, при втыкании кабеля в дополнительный видеовыход среда KDE показывает предупреждающее сообщение с предложением настроить устройство). Однако не все предпочитают использовать KDE, которые к тому же далеко не всегда справляются со своей задачей. Поэтому наиболее безболезненным и гибким средством включения второго монитора являются встроенные инструменты самого X-сервера.

Всего таких инструментов два: расширение Xinerama, разработанное компанией DEC (сотрудники которой называли его PanoramiX), и расширение RandR, созданное совершенно для других целей, но с недавних пор позволяющее выполнять все функции Xinerama.
Причем смысл их одновременного сосуществования только в том, что первый оставили для совместимости и еще не успели выкинуть из X.Org (тысячи людей, начитавшись устаревших руководств, продолжают использовать Xinerama для подключения второго дисплея, наплевав на все его недостатки вроде необходимости перезагрузки иксов для изменения настроек).

В отличие от Xinerama, расширение RandR позволяет изменять конфигурацию «на лету» (ура горячему подключению!), отлично работает совместно с OpenGL и расширением AIGLX (ура Compiz’у и FlightGear!) и очень легко поддается настройке. Так, для настройки стандартного dual head с помощью xrandr необходимо выполнить всего четыре простых действия (два из которых опциональные):

1.Запускаем команду «xrandr -q» и смотрим инфу о доступных видеовыходах (для их идентификации смотри врезку «Соответствие видеопортов и их имен в xrandr на ноутбуках»). Обычно дополнительный VGA-выход отмечается как VGA-1 на десктопе, как VGA-0 — на ноутах, и disconnected, если к нему ничего не подключено.

2.Втыкаем кабель, вновь запускаем «xrandr -q» и видим надпись «connected» рядом с VGA-0. Если монитор поддерживает стандарт DDC (а это любая модель старше десяти лет), то ниже появится список поддерживаемых видеорежимов.

3. Набираем команду:

$ xrandr --output VGA-0 --auto

или

$ xrandr --output VGA-0 --mode 1024x768 --auto

если стандартное разрешение не подходит.

После этого на экране подключенного устройства должна появиться копия изображения головного дисплея (во избежание обрезки картинки или пустых областей разрешения на устройствах должны совпадать). Это идеальный режим работы при использовании проектора (показывающий должен видеть то, что он показывает), но совершенно неприемлемый для двухмониторной конфигурации. Чтобы сделать изображение панорамным, то есть растянутым между двумя экранами, придется выполнить еще одну команду.

4. Растягиваем рабочий стол на два монитора:

$ xrandr --output VGA-0 --right-of LVDS

Так мы получим рабочий стол, растянутый между двумя экранами (при разрешении обоих экранов равном 1024×768 размер виртуального экрана будет составлять 2048×768). При этом подключенный монитор будет отображать правую часть стола, а уже имеющийся (LVDS — это экран ноутбука) — левую. Такого эффекта мы достигли с помощью опции ‘—right-of’, что и логически, и лексически означает «правее от». Кроме нее xrandr поддерживает опции ‘—left-of’ (левее), ‘—above’ (выше) и ‘—below’ (ниже). Не возбраняется и точное указание части виртуального рабочего стола, отображаемого вторым монитором, с помощью опции ‘—pos’. Например:

$ xrandr --output VGA-0 --pos 1024x0

В сущности, это все, что нужно знать о подключении второго монитора любому линуксоиду. Но только в том случае, если он не использует видеокарту от nVidia с драйверами от производителя. Проприетарные драйвера от nVidia — это единственные дрова для видеокарт большой тройки (Intel, nVidia, AMD/ ATi), которые не поддерживают расширение RandR версии 1.2, которая как раз и содержит все вкусности, описанные в статье. Взамен производитель предл агает воспользоваться фирменным костылем под названием TwinView, который можно настроить с помощью nvidia-settings (не буду пояснять, как это делать, там все просто).

Меняем настройки монитора автоматически

Уже упомянутый выше стандарт DDC (Display Data Channel) используется не только для получения информации о поддерживаемых видеорежимах от монитора, но и для ответной посылки специальных команд, управляющих состоянием монитора. При этом зачастую диапазон понимаемых монитором команд очень широк и может включать в себя аналоги всех пунктов меню самого монитора, а также несколько сервисных команд, которые не должны быть доступны рядовым пользователям.

Обычно DDC используются для реализации функционала управления монитором в фирменных утилитах, поставляемых его производителем. Чаще всего такие утилиты не несут особой выгоды для пользователя, так как выполняют все те же действия, которые доступны с лицевой панели монитора. Иногда, конечно, программисты добавляют в них автоматизма, позволяя менять параметры на лету в зависимости от запускаемых приложений и других факторов, но все это не дает той гибкости, которую может предоставить низкоуровневое вмешательство в настройки монитора.

По самой своей сути DDC — это набор протоколов для двунаправленного обмена данных, передаваемых по шине I2C (InterIntegrated Circuit). Физическим носителем для него выступает обычный VGA-кабель, а абонентами — монитор и видеоадаптер.

DDC описывает способ представления монитором информации о себе и своих характеристиках, поэтому любой видеоадаптер может легко получить всю необходимую информацию о мониторе (причем не важно, включен он будет или нет), однако о том, какие сообщения должен обрабатывать монитор, и каким образом он должен это делать, стандарт умалчивает, обязывая производителя всего лишь предоставить для записи 256 регистров (ячеек памяти, своего рода приемников сообщений). Поэтому при управлении с помощью DDC необходимо точно знать, что нужно записать и в какие регистры, чтобы получить желаемый результат (а зачастую эти данные известны только самому производителю мониторов).

Это и есть главная причина того, что DDC так непопулярен среди пользователей альтернативных ОС. К счастью, ситуация не такая уж и безвыходная. Во-первых, существует утилита ddccontrol, которая уже содержит достаточно большую базу мониторов и описаний их регистров, поэтому если с моделью повезло, все будет просто. Во-вторых, даже если монитора нет в базе ddccontrol, можно надеяться на то, что некоторые комбинации «регистрзначение» одинаковы для всех мониторов (а это так и есть), а остальные можно найти в интернете. В-третьих, можно устроить брутфорс (всего 256 однобайтовых ячеек памяти) и надеяться, что в процессе монитор не умрет.

Итак, попробуем. Устанавливаем ddccontrol:

$ sudo apt-get install ddccontrol

Запускаем утилиту с флагом ‘-p’, чтобы найти доступные мониторы:

$ sudo ddccontrol -p

И получаем сообщение о том, что мониторов нет. ОК, подгружаем модуль поддержки шины I2C и прописываем его в автозагрузку:

$ sudo modprobe i2c-dev
$ sudo su

echo i2c-dev >> /etc/modules

Вновь запускаем утилиту. Бинго! Мониторы найдены. Однако, даже несмотря на то, что утилита смогла определить модель одного из них, соответствий в базе найдено не было. Зато ddccontrol заботливо описала все регистры и допустимые значения, описанные в стандарте VESA. Из них единственно полезными мне показались регистры, регулирующие яркость и контрастность монитора (адрес — 0x10 и 0x12, максимальное значение — 50 и 127). Для их чтения используем такую команду:

$ sudo ddccontrol dev:/dev/i2c-1 -r 0x10

Для записи — такую:

$ sudo ddccontrol dev:/dev/i2c-1 -r 0x10 -w 50

Здесь dev:/dev/i2c-1 — это имя I2C-устройства из самого начала вывода команды «ddccontrol -p», 0x10 — адрес регистра, 50 — значение. Теперь можно подобрать оптимальные для вечернего времени значения яркости и контрастности, прописать их установку в скрипт, а скрипт засунуть в cron и наслаждаться автоматической регулировкой яркости в зависимости от времени суток (правда, придется еще решить проблему изменчивости продолжительности дня).

Более интересные регистры не описаны в стандарте VESA. Например, на многих мониторах регистр 0xe1 отвечает за выключение и включение монитора:

$ sudo ddccontrol dev:/dev/i2c-1 -r 0xe1 -w 0
$ sudo ddccontrol dev:/dev/i2c-1 -r 0xe1 -w 1

Засовываем команду выключения в alias рута:

$ sudo su

echo "alias haltmon='ddccontrol dev:/dev/i2c-1

-r 0xe1 -w 0'" > ~/.bashrc

И спокойно смотрим фильмы перед сном, не обременяя себя вставанием с постели и выключением монитора после его окончания:

$ sudo su

mplayer фильм.avi; haltmon

Многие Samsung’овские мониторы поддерживают различные предустановки яркости и контраста, которые легко доступны через кнопку на их лицевой стороне. Было бы удобно переключаться между этими режимами во время старта определенных типов приложений (например, режим «Game» при запуске игры). Это можно реализовать с помощью простых скриптов и команды ddccontrol (регистр 0xdc и значения от нуля по возрастающей для разных режимов).

Прошиваем BIOS

Бытует мнение, что корректно перепрошить BIOS можно только с помощью программ, доступных в DOS. К счастью, это неправда. Вопервых, некоторые производители материнских плат уже начали включать в набор предоставляемых пользователям инструментов программы для Linux, а во-вторых, для Linux доступна полностью свободная универсальная программа для перепрошивки под названием flashrom.

Изначально flashrom разрабатывалась как часть проекта OpenBIOS, но очень скоро обросла функциональностью и стала самостоятельным проектом. Сегодня flashrom поддерживает большое количество материнских плат и может быть использована для записи не только открытых прошивок, но и вполне обычных обновлений BIOS, распространяемых производителем железа.
Исходный код утилиты доступен на домашней странице, расположенной по адресу http://flashrom.org, а прекомпилированные пакеты включены в репозитории многих Linux-дистрибутивов и BSD-систем.

Важная особенность утилиты в том, что она никогда сознательно не угробит материнку. Даже чтобы заставить flashrom работать, придется сделать так, чтобы она на 100% правильно определила используемый чипсет и тип чипа EEPROM, хранящего текущую версию BIOS (а сделать это могут только разработчики утилиты).

Во всех остальных случаях утилита просто откажется работать, и никакое указание похожего типа чипа и флагов ‘—force’ здесь не поможет.
Именно поэтому первое, что необходимо сделать сразу после установки программы — это запустить ее в режиме поиска EEPROMчипов:

$ sudo flashrom

На экран будет выведен список найденных чипов (их может быть несколько, некоторые производители материнских плат устанавливают на свои детища сразу две копии BIOS — на случай его повреждения или неудачной перепрошивки), либо сообщение «No EEPROM/flash device found», тогда все, что остается делать — это ждать обновлений программы.

Следующий шаг — сохранение текущей заведомо работоспособной прошивки в файл (одни разрабы знают, какие баги они добавили в новую версию):

$ sudo flashrom -r old_bios.bin

И только после этого можно запускать процесс записи обновления:

$ sudo flashrom -w new_bios.bin

Который обязательно нужно завершить проверкой на корректность (соответствие между прошивкой и файлом):

$ sudo flashrom -v new_bios.bin

Если EEPROM-чипов на матери два, то выбор между ними производится с помощью флага ‘-c’, сразу за которым следует имя чипа (обычно доступным для записи является первый).

Вот и все. Прошить BIOS из Linux не только можно, но и чрезвычайно просто. Более того, все это можно сделать удаленно, используя SSH-соединение или даже систему для централизованного управления множеством серверов (такую как Puppet, например).

Выводы

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

Соответствие между видеопортами и их именами в xrandr на ноутбуках

Intel

  • LVDS: внутренняя панель
  • TMDS-1: порт DVI
  • VGA: порт VGA
  • TV: TV-порт

ATI

  • LVDS: внутренняя панель
  • DVI-0: первый порт DVI
  • DVI-1: второй порт DVI
  • VGA-0: первый порт VGA
  • VGA-1: второй порт VGA

Nvidia (открытый драйвер)

  • LVDS: внутренняя панель
  • DVI0: первый порт DVI
  • DVI1: второй порт DVI
  • VGA0: первый порт VGA
  • VGA1: второй порт VGA

Горячее подключение SATA-устройств

Начиная с ядра 2.6, Linux научился подключать и отключать на лету не только SCSI-диски, но и SATA. По сути, теперь диск можно выдернуть в любой момент и подключить его вновь, не рискуя угробить устройство или отправить ядро в панику. Однако, чтобы избежать возможной потери данных или проблем с диском, операцию извлечения лучше предварить несколькими командами (пример для диска sda с двумя разделами: sda1 и sda2)

# sync; sync

umount /dev/sda1

umount /dev/sda2

echo 1 >/sys/block/sda/device/delete

После подключения нового диска заставляем SATA-контроллер вновь просканировать шину:

# echo "- - -" >/sys/class/scsi_host/host{0..3}/scan

Info

  • Исчерпывающую информацию о железе выдает простая консольная утилита lshw.
  • Утилита nvramwakeup способна настроить время автоматического включения компа без необходимости использовать окно настройки BIOS.
  • Перед перепрошивкой настройки BIOS можно сохранить с помощью команды «modprobe nvram && dd if=/dev/nvram of=nvram.bin».

Оставить мнение

Check Also

Выход есть всегда. Решаем проблемы, возникающие при работе в Linux

Разработчики дистрибутивов Linux изо всех сил стараются сделать свои творения максимально …