CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
19.10.2021

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Desktop
Internet
Internet-серверы
Безопасность
Бизнес/Офис
Игры
Мультимедиа
Наука
Операционные системы
Программирование
СУБД
Создание веб-сайтов
Утилиты

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки

Разборки с HAL'ом

http://alv.me/

Страницы: предыдущая :: 1 :: 2

Все конфигурационные файлы HAL’а представляют собой XML-документы, начинающиеся с определения типа, например,

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- --><!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"

"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">

для файла PolicyKit.conf или
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
для одного из fdi-файлов. Внутренний формат конфигов мы рассмотрим на конкретных примерах.

Начнём с монтирования сменных устройств. Во всех современных дистрибутивах Linux, которые мне доводилось видеть в последнее время, он задействован по умолчанию, соответствующие пакеты — Xorg, интегрированные декстопы GNOME, KDE, Xfce — уже собраны с его поддержкой. Тем не менее, если это окажется не так, то настроить HAL руками тоже не составит большого труда.

Итак, для начала необходимо установить (средствами пакетного менеджмента данного дистрибутива) соответствующий пакет, который так и называется — hal. Хотя, как только что было сказано, при установке Иксов и какой-либо из интегрированных сред он уже будет инсталлирован как зависимость. Причём, возможно, вместе с собственно монтировщиком — в случае с GNOME и Xfce это будет пакет gnome-mount; если такового не окажется — нужно будет дополнительно озаботиться его установкой.

Далее, надо обеспечить запуск соответствующих демонов при старте системы. Собственно, демон, отвечающий за механизм HAL, так и называется — hald. Однако он зависит еще от нескольких стартовых служб — devd, usbd, dbus. Некоторые из них могут быть уже запущены. Определить, какие демоны уже функционируют, можно, например, командой

$ ps aux
Просматриваем её вывод и вписываем в файл (или файлы), отвечающий за запуск стартовых служб, недостающие демоны.

Подчеркну, что при использовании механизма HAL не возникает никакой необходимости в установке прав доступа к файлам устройств или редактировании /etc/fstab, что требовалось при настройке пользовательского монтировании вручную.

Теперь — собственно настройка. И тут возможны варианты, опять-таки зависящие от дистрибутива. Рассмотрим самый простой способ: отправляемся в каталог /etc/PolicyKit и обнаруживаем там файл PolicyKit.conf, о котором говорилось выше. По умолчанию содержимое его примерно следующее:

<config version="0.1">

<match user="root">

<return result="yes"/>

</match>

<define_admin_auth group="wheel"/>

</config>

Что предваряется следующей фразой:
<!-- See the manual page PolicyKit.conf(5) for file format -->
Руководствуясь man (5) PolicyKit.conf, между строками
    <define_admin_auth group="wheel"/>
и
</config>
дописываем следующие строки:
        <match action="org.freedesktop.hal.storage.mount-removable">

<return result="yes"/>

</match>

<match action="org.freedesktop.hal.storage.mount-fixed">

<return result="yes"/>

</match>

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

Это пример для дистрибутивов, в которых группа wheel задействована: только её члены могут получить доступ к правам администратора, например, командой su. Но в принципе группу можно определить произвольно — главное, чтобы пользователь, которому разрешено автоматическое монтирование сменных накопителей, был её членом.

И после реинициализации системы (например, посредством временного перехода в однопользовательский режим или полного рестарта) указанный пользователь получает возможность автоматического монтирования сменных устройств сразу вслед за их помещением в привод или подсоединением к USB-порту. Точнее, монтирование это происходит само, без всякого его участия.

По собственному опыту, через HAL нормально монтируется всё, что способно монтироваться: CD- и DVD-диски, флэшки, внешние винчестеры с USB-интерфейсом, носители внутри фотокамер и они же, подключённые через кард-ридер. Единственная проблема у меня возникла с флэшкой, переформатированной через штатную опцию Windows, то есть с файловой системой VFAT не на разделе, а непосредственно на raw-устройстве. Впрочем, и было это не в Linux’е, а во FreeBSD.

После монтирования флэшки или компакта описанным способом на рабочем столе интегрированного десктопа типа KDE, GNOME, Xfce появляется соответствующая пиктограмма, а команда mount без параметров показывает в списке смонтированных файловых систем соответствующее устройство.

Содержимое смонтированного устройства можно просмотреть в каталоге /media/mount_point. Точке монтирования, как правило, присваивается имя метки (Label) накопителя. Если таковая не была задана — каталог для монтирования будет носить имя типа Disk1 и так далее. Иногда раньше бывали случаи, когда устройство без метки отказывалось монтироваться, но я с этим давно уже не сталкивался.

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

Однако в некоторых ситуациях возникает необходимость в ручном отмонтировании автоматически смонтированного накопителя. По крайней мере, с одной такой я неоднократно сталкивался: это запись уже использовавшихся CD-RW или DVD-RW. Будучи вставленными в привод, они автоматически монтируются, и некоторыми фронт-эндами для записи дисков (например, Brasero) не могут быть повторно записаны даже после принудительной очистки. Подчеркну — это баг конкретных программ записи (или даже конкретных их сборок — например, Brasero в дистрибутиве Zenwalk), а не самого механизма HAL.

Решается проблема просто, хотя и не очень изящно: нужно просто в командной строке (например, терминала) от лица администратора отмонтировать “неправильное” устройство, например, так:

sudo umount /dev/sr0
Указывать в качестве аргумента имя устройства предпочтительно, потому что метки компакт-дисков (и, соответственно, точки их монтирования) иногда могут иметь длинные и нечленораздельные имена.

Ещё раз подчеркну, что в большинстве современных дистрибутивов Linux’а никаких специальных действий по настройке автоматического монтирования делать, скорее всего, не придётся. В отличие, скажем, от FreeBSD, где хотя HAL и задействуется точно так же, как в Linux’е, но по умолчанию не настроен совершенно (на счет чего имеется соответствующая заметка).

А вот с настройками Иксов через HAL, возможно, придётся иметь дело в любом случае. Ибо современные версии X-сервера (в исполнении Xorg) именно через него по умолчанию получают сведения об аппаратуре, не используя данные в файле /etc/X11/xorg.conf. Такое положение можно (пока?) изменить, но, похоже, на ближайшее время именно оно будет соответствовать генеральной линии развития, так что разбираться с этим так или иначе придётся.

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

Для начала проверяем текущее состояние с раскладками клавиатуры. Этой цели служит всё та же команда lshal. Для начала, дав её без опций в составе конструкции примерно такого вида

$ lshal | grep _logicaldev_input
выловим UDI нашего устройства ввода:
usb_device_46d_c517_noserial_if0_logicaldev_input
который и зададим как значение опции -u, повторив команду:
$ lshal -u usb_device_46d_c517_noserial_if1_logicaldev_input
Нас будет интересовать лишь фрагмент её вывода:
input.product = 'Logitech USB Receiver'  (string)

input.x11_driver = 'evdev' (string)

input.xkb.layout = 'us' (string)

input.xkb.model = 'pc105' (string)

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

Для начала обращаем внимание на драйвер: при использовании HAL вместо стандартного драйвера клавиатуры kbd (он содержится в пакете xserver-xorg-input-kbd) по умолчанию применяется драйвер evdev (пакет xserver-xorg-input-evdev), хотя, вроде бы, и kbd не возбраняется. Я лично не заметил между ними никакой разницы — единственное, нужно проследить за тем, чтобы указанный здесь драйвер соответствовал установленному пакету.

Далее мы видим, что в наличие имеется единственная раскладка, и та американская; соответственно, о каких-либо вариантах и переключателях говорить не приходится. Вот это положение нам и надлежит исправить.

За настройки клавиатуры отвечает файл вида 10-keymap.fdi — умолчальный его вариант можно найти в каталоге /usr/share/hal/fdi/policy/10osvendor: точный путь может различаться в разных дистрибутивах, поэтому для страховки лучше воспользоваться поиском (например, утилитой find) по маске \*keymap.fdi. Во избежание разночтений копируем его в место, специально предназначенное для конфигурационных файлов — а именно:

$ sudo /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi
/etc/hal/fdi/policy
После чего открываем в любимом редакторе с правами суперпользователя:
sudoedit /etc/hal/fdi/policy/10-keymap.fdi
Большая часть его содержимого в модификации не нуждается. Нужно только вписать строки, описывающие раскладки клавиатуры, их варианты, переключатель раскладок и, при необходимости, индикатор текущей раскладки:
<merge key="input.xkb.layout" type="string">us,ru</merge>

<merge key="input.xkb.variant" type="string">,winkeys</merge>

<merge key="input.xkb.options" type="string">grp:lwin_toggle,grp_led:caps</merge>

В данном примере задано переключение с латиницы на кирилицу по левой win-клавише, а в качестве индикатора кириллической раскладки выбран ScrollLock; разумеется, эти значения следует заменить на привычные.

В качестве варианта раскладки, вместо winkeys (соответствующего фабричной маркировке всех современных клавиатур) при желании можно указать legacy (маркировка старых клавиатур времён “чёрного” DOS’а) или typewriter (маркировка пишущих машинок — по моему мнению, самая разумная, но, увы, напрочь забытая).

После этого перезапускаем демона HAL:

$ sudo /etc/init.d/hal restart

[sudo] password for username:

* Restarting Hardware abstraction layer hald [ OK ]

$

И, перейдя на кириллицу посредством выбранного переключателя, убеждаемся в возможности ввода русских букв. Для дополнительного контроля повторяем команду
$ lshal -u usb_device_46d_c517_noserial_if1_logicaldev_input
в выводе которой наблюдаем все сделанные нами изменения:
  input.xkb.layout = 'us,ru'  (string)

input.xkb.options = 'grp:lwin_toggle,grp_led:scroll' (string)

input.xkb.variant = ',winkeys' (string)

Впрочем, у меня в Xubuntu изменения в выводе команды lshal появляются только после перезапуска X-сервера.

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

Кроме задачи подключения HAL’а, в ряде случаев не менее актуальной оказывается обратная задача — его отключения, по крайней мере отдельных компонентов. И именно тех, которые касаются настройки клавиатуры и мыши в Иксах.

Как я уже говорил, современные версии X-сервера благополучно могут стартовать без всякого конфигурационного файла вообще (то есть без /etc/X11/xorg.conf). Тем не менее, многие пользователи предпочитают использовать его и поныне — во-первых, в силу привычки (у меня, например, до недавнего времени один и тот же xorg.conf на протяжении многих лет кочевал, с минимальными правками, из дистрибутива в дистрибутив и из системы в систему).

Да и гораздо проще дописать в конфиг, автоматически сгенерированный, например, посредством

$ sudo Xorg -configure
две-три строки, чем разбираться с не вполне прозрачными XML-файлами HAL’а.

И вот тут могут начаться проблемы: результаты автоопределения оборудования через HAL, в частности, мышь и клавиатура, вступают в противоречие с их описанием в соответствующих секциях xorg.conf.

И в результате после успешного, казалось бы, старта Иксов (вне зависимости, через startx или какой-либо менеджер сеансов) оба эти устройства не подают признаков жизни. А в файле /var/log/Xorg.0.log обнаруживается такое сообщение:

(WW) AllowEmptyInput is on, devices using drivers
'kbd' or 'mouse' will be disabled.
Правда, решается эта проблема очень просто: достаточно в секцию Section “ServerLayout” файла /etc/X11/xorg.conf после строк, идентифицирующих устройства ввода
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
вписать запрет их автоматического добавления:
Option "AutoAddDevices" "False"
Option "AllowEmptyInput" "False"
После чего Иксы наконец благополучно запускаются. Не возникает при этом и проблемы с переключением раскладок.

И в заключение надо сказать несколько слов о D-Bus. Потому что это тот самый механизм, который обеспечивает передачу данных об оборудовании, полученных посредством HAL'а, системным и прикладным программам, таковые использующим. Хотя значение его далеко выходит за эти рамки.

D-Bus – это один из механизмов межпроцессного взаимодействия (иначе IPC – InterProcess Communication), подобный широко известному CORBA или DCOP, до недавнего времени использовавшемуся в KDE вплоть до вертки 3.X включительно. Он, как и HAL, разрабатывается в рамках метапроекта freedesktop.org (официальная страница проекта здесь). И первоначально использовался в GNOME, хотя ныне передаваемые по нему данные доступны и в других рабочих средах (Xfce, KDE, начиная с ветки 4.X) и системах разработки (Mono, Java и другие).

Практически этот механизм реализован в виде одноимённого демона dbus (как уже говорилось, он выступает в качестве записимости пакета hal), работа которого организована по шинному принципу. Шин, то есть каналов передачи сообщений, две:

  • системная шина —; по ней происходит обмен сообщениями с другими демонами (например, с тем же демоном hal);
  • сессионная шина —; создаётся для зарегистрированного в системе пользователя, для каждого из которых запускается собственная копия демона; по этой шине происходит обмен сообщениями с приложениями, запущенными пользователем (например, X-сервером или программой монтирования накопителей).
Я не очень представляю, каково может быть вмешательство пользователя в работу демона dbus (помимо установки соответствующего пакета и обеспечения его запуска). Разве что сочинить сценарий для отслеживания устройств, подобный приведённому в статье Романа Химова, и поиграться с подсоединением и отсоединением мыши, USB-накопителей и так далее.



Страницы: предыдущая :: 1 :: 2

Комментарии

аноним, Tue Jun 23 04:15:31 2009:
В топку HAl и дурацкий xml! Пингвинячьи приблуды уже и до Free BSD добрались,если так пойдет,скоро можно поменять название дистрибутива Free Ubuntu.
VeGeek, Sun Jun 21 10:24:06 2009:
Как бы HAL уже почти и умер... Да здравствует DeviceKit, товарищи.
AlterFritz, Fri Jun 19 22:55:28 2009:
Полезно. Даже сброшу текст на диск. И, слава Богу, без исторических аналогий, то есть ясно и кратко.
Andrey M., Thu Jun 18 03:26:17 2009:
С клавиатурой все более-менее понятно, не имея под рукой Олбанского шаблона нормальный человек без маникальных наклонностей лишается возможности смены переключателя раскладки. Как в песне: "А кто будет выступать - тому не буду наливать. Хочеш выпить? - Пей Боржоми..." в смысле используй интегрированные среды и не гунди. Пока мне не удалось прояснить вопрос с видеодрайвером: можно ли его поменять гламурно, т.е не используя xorg.conf
аноним, Wed Jun 17 12:06:23 2009:
> автор скромно промолчал когда это появилось в винде и когда в линуксе. И что сейчас в винде.

Автор писал не о том что, когда и где появилось, вот и не осветил данный вопрос. Упрекать его бессмысленно.
аноним, Wed Jun 17 11:10:12 2009:
Ошибка: у нас принято говорить по-русски! Reference(s):
Microsoft Windows NT "Resource Guide"
"Inside Windows NT," Helen Custer, Microsoft Press, 1993
http://support.microsoft.com/kb/99588
аноним, Wed Jun 17 11:05:17 2009:
В общем случае HAL предназначен для сокрытия различий в аппаратном обеспечении от основной части ядра операционной системы и в той или иной мере используется в самых разных ОС, от Windows до NetBSD

автор скромно промолчал когда это появилось в винде и когда в линуксе. И что сейчас в винде.
www2, Wed Jun 17 09:00:29 2009:
Спасибо, побольше таких статей. Учитывая то количество воды, которое Вы обычно переливаете из пустого в порожнее, эта статья просто шедевр.

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds