Когда-то в X.org добавили поддержку HAL, чтобы сервер мог на ходу подключать и отключать устройства ввода. Через XML-файлики настройки HAL можно было прописать присваивание нужных значений условным параметрам девайса, после чего X-сервер мог этот девайс задействовать в работе:
<match key="info.capabilities" contains="input.keyboard">
<merge key="input.x11_driver" type="string">evdev</merge>
…
С версии 1.8 в файлах настройки X.org можно и нужно использовать udev вместо HAL и более читабельный синтаксис для гибкой настройки устройств ввода:
Section "InputClass"
Identifier "kb"
MatchIsKeyboard "yes"
Driver "evdev"
Option "XkbModel" "evdev"
Option "XkbLayout" "us,ru"
Option "XkbVariant" ",winkeys"
Option "XkbOptions" "grp_led:caps,compose:ralt"
EndSection
Вся магия — в опциях Match…: при их указании настройки данной секции
InputClass применяются ко всем устройствам, удовлетворяющим
соответствующему условию. MatchIsKeyboard "yes" означает «для любых
клавиатур». Далее я просто указываю нужные опции для клавиатуры.
Также теперь можно разносить конфиг иксов по нескольким файлам: при
загрузке сервера читается не только /etc/X11/xorg.conf, но и файлы с
расширением .conf из директории /etc/X11/xorg.conf.d/.
Начиная с версии
148
в udev содержится код (перенесённый из HAL, кстати), который
присваивает устройствам ввода на уровне udev специальные метки типа
ID_INPUT_KEY, ID_INPUT_MOUSE или ID_INPUT_TABLET. X.org может
читать эти метки, за счёт чего указание в конфигурации иксов секций
InputClass с определёнными опциями вроде MatchIsKey или
MatchIsPointer позволяет назначать железкам с этими метками нужные
настройки.
Таким образом, за последние годы X.org прошёл примерно следующий путь:
Написание секций InputDevice для каждого устройства ввода вручную.
При использовании старого драйвера клавиатуры kbd(4x) минусом было
то, что каждая секция привязывалась к одному физическому устройству с
помощью опции Device. Не было поддержки подключения на лету, а самое
главное — для клавиатур, которым соответствует несколько устройств
(например, MS NEK 4000), нельзя было
написать одну секцию. В результате приходилось дублировать информацию.
Чтобы избавиться от необходимости жёстко прописывать путь к
устройству ввода (/dev/input/что-у-вас-там/), в универсальном
драйвере evdev(4x) некоторое время была возможность искать
устройство по производителю или названию модели прямо с помощью опций
самого драйвера: Option "vendor" и Option "name". Смысла в в
реальном названии устройства куда больше, чем в пути к файлу из
/dev, но реализация этого механизма на уровне конкретного драйвера
была сомнительным решением. На данный момент этих фич там уже нет.
Появилась возможность работать с HAL. Настройка ввода, по сути,
выполнялась полностью средствами HAL через XML-файлы .fdi. Можно
было назначать специальные опции, которые потом читались иксами,
всем устройствам с нужными свойствами, вроде производителя
(<match key="info.vendor" contains="Microsoft">) или «возможностей»
(<match key="info.capabilities" contains="input.mouse">). HAL
пытался решать сходные с udev задачи и сдох под тяжестью собственного
веса.
Наконец, появились секции InputClass, стало можно описывать нужное
подмножество устройств прямо на уровне X.org.
Однажды в пятом классе я участвовал в конкурсе компьютерных проектов среди школьников. Я как раз тогда недавно обнаружил у себя на компе какую-то странную версию среды Microsoft QBasic. По очень хорошей советской книжке по Бейсику (с кучей опечаток, разбор сорцов с которыми был полезным опытом) и встроенному мануалу (который был похож на программу info — с преферансом и гиперссылками) я быстро разобрался в языке и настрочил большую игру-гонки, позаимствовав основную идею из книжки же. В игре была куча крутых, на мой взгляд, фич. Всё это было под DOS и выглядело невероятно убого (кроме вступительной заставки) даже в 2001-ом.
В моём QBasic почему-то нельзя было компилить программы, поэтому «распространял» свою игру я в исходниках вместе с самой средой QBasic. Надо было загрузить код в неё и нажать Run (F5).
Когда я поехал с учительницей информатики в методцентр показывать прогу, тётка-методист увидела это и спросила меня:
— Деточка, ты компилировать умеешь?
Я заметил, что у меня в среде нет возможности делать готовые бинарники. Тётка поцокала языком и вроде бы дала мне версию покруче, где можно было собирать программы. Потом она ещё показала мне Visual Basic с кнопочками и всякими гуйками.
Со временем я стал думать, что привязанность к Gentoo вызвана именно этим случаем.
Вот так.
И вот прошёл ещё один год. Время сказать о том, что мне глобального запомнилось из окружающей среды за прошедшие 365 дней.
Шум года — мировой финансовый кризис. Доллары долой.
Событие года в мире — смерть Майкла Джексона 25 июня. Всё остальное по важности для людей просто не дотягивает. Eщё было укрепление ЕС, очередное мочилово в Израиле, окончательное скурвление Нобелевского комитета.
Событие года в России — расстрел мирных граждан в супермаркете майором милиции Денисом Евсюковым 27 апреля. Eщё просрали СШГЭС.
Событие года в среде свободного ПО — значительный прогресс в поддержке современных видеокарт AMD свободным драйвером, разрабатываемым в рамках проекта X.org. Eщё был релиз GNU Emacs 23.1.
Событие года в Интернете — победа Firefox на массовом рынке браузеров. Морально IE умер много лет назад, как и Microsoft, и вот теперь современные браузеры вымывают это говно с десктопов миллионов пользователей по всему миру. Eщё было объявление о разработке Google Chrome OS (которой ещё нет, but who cares), которая обещает приблизить торжество «веба как платформы».
Событие года в русском сегменте Интернета — закрытие Двача 17 января. (При этом огромное количество граждан продолжает называть Двачем многочисленные сайты-подобия оного. Двача нет, он сдох.) Ещё удмуртские приставы ловили должников на фотки блондинки.
В науке событие, наверное, будет в следующем году, когда LHC наконец-то даст всем просраться!
Залепуха года — свиной грипп.
Бодрячком, и have a nice year!