HAL (Русский)
From ArchWiki
i18n |
---|
English |
Español |
简体中文 |
Français |
Italiano |
Polish |
Русский |
Türkçe |
Contents |
Обзор HAL
HAL (Hardware Abstraction Layer) это демон, который представляет программам быстрый доступ к информации об оборудовании. Взаимодействуя с HAL приложения сами могут определять и использовать железо, не обращая внимания на такие особенности как шина или тип устройства. Таким образом графический интерфейс оказывается способным представлять пользователю все ресурсы компьютера в однотипном и унифицированном виде.
Например, HAL способен собирать информацию об устройствах хранения информации (флешках, внешних HDD, и.пр.) и создавать иконки этих устройств на рабочем столе пользователя, упрощающие доступ к этим устройствам.
Установка и настройка HAL
Установка HAL
HAL требует для своего функционирования наличие запущенного демона dbus, поэтому необходимо быть уверенным, что они оба установлены. Откройте терминал и запустите следующее под root`ом:
# pacman -S dbus hal
Далее нужно отредактировать файл /etc/rc.conf (под root`ом) своим любимым текстовым редактором, добавив hal в список DAEMONS, например:
DAEMONS=(syslog-ng dbus hal network netfs ...)
Теперь демоны dbus и hal будут запускаться во время загрузки системы. Хотя во время загрузки HAL проверяет наличие демона dbus и загружает его автоматически, если он не запущен, он не будет правильно остановлен при выключении системы, если отсутствует в списке демонов. Таким образом, чтобы избавиться от возможных осложнений лучше всего запускать dbus до hal через список.
Замечание: Иногда пользователи сообщали о проблемах при использовании такого подхода. Если у вас также есть проблемы, нужно попробовать запускать hal сразу после dbus. (If you also experience problems also you should try loading hal first followed by dbus.)
Вы также можете запустить HAL вручную, введя под root`ом следующую команду:
# /etc/rc.d/hal start
Для того, чтобы dbus и hal нормально функционировали, необходимо добавить локальных пользователей в группы: optical и storage. Это можно сделать, открыв терминал и введя под root`ом следующие команды:
# gpasswd -a username optical # gpasswd -a username storage
Замените username именем реально существующего пользователя (например, johndoe).
Для того, чтобы эти изменения вступили в силу, нужно выйти и зайти в пользователя снова.
Также, если HAL был запущен до того, как вы добавили себя в эти группы, возможно, понадобится перезапустить dbus и hal для того, чтобы изменения вступили в силу. Это можно проделать, запустив под root`ом следующие команды:
# /etc/rc.d/dbus restart # /etc/rc.d/hal restart
Тонкости и хитрости
Автомонтирование NTFS с поддержкой записи (ntfs-3g)
Если у вас появилось желание автомонтировать разделы с NTFS с поддержкой записи, вам необходимо для установить ntfs-3g и создать файл /etc/hal/fdi/policy/10-ntfs-policy.fdi следующего содержания:
<?xml version="1.0" encoding="UTF-8"?> <deviceinfo version="0.2"> <device> <match key="volume.fstype" string="ntfs"> <match key="@block.storage_device:storage.hotpluggable" bool="true"> <merge key="volume.fstype" type="string">ntfs-3g</merge> <merge key="volume.policy.mount_filesystem" type="string">ntfs-3g</merge> <append key="volume.mount.valid_options" type="strlist">locale=</append> </match> </match> </device> </deviceinfo>
Задание точки монтирования iPod
Если вы не укажите hal куда монтировать ваш ipod, он будет монтироваться в папку с тем именем, которое вы ему присвоили. Чтобы исправить это недаразумение надо создать правило для hal. Это правило можно добавить, например, в /etc/hal/fdi/policy/90-user-methods.fdi. Если этого файла не существует просто создайте его.
<?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="@block.storage_device:storage.model" string="iPod"> <merge key="volume.policy.desired_mount_point" type="string">ipod</merge> <merge key="volume.policy.mount_option.iocharset=iso8859-15" type="bool">true</merge> <merge key="volume.policy.mount_option.sync" type="bool">true</merge> </match> </device> </deviceinfo>
Автомонтирование только съёмных устройств
По умолчанию hal автомонтирует все доступные (включая скрытые) разделы не смонтированные в /etc/fstab и создает ярлыки на рабочем столе для них. Чтобы переопределить это правило достаточно создать файл 90-user-methods.fdi в /etc/hal/fdi/policy со следующим содержанием:
<?xml version="1.0" encoding="UTF-8"?> <deviceinfo version="0.2"> <device> <match key="volume.fsusage" string="filesystem"> <merge key="volume.ignore" type="bool">true</merge> <match key="@block.storage_device:storage.removable" bool="true"> <merge key="volume.ignore" type="bool">false</merge> <merge key="storage.policy.should_mount" type="bool">true</merge> </match> </match> </device> </deviceinfo>
Кодировка CP1251 в vfat
Чтобы в некоторых плеерах, телефонах и т.п. не было крякозябриков, нужно создать файл /etc/hal/fdi/policy/codepage.fdi
<?xml version="1.0" encoding="UTF-8"?> <deviceinfo version="0.2"> <device> <match key="volume.fstype" string="vfat"> <merge key="volume.policy.mount_option.iocharset=cp1251" type="bool">true</merge> <merge key="volume.policy.mount_option.codepage=866" type="bool">true</merge> </match> </device> </deviceinfo>
В гноме, XFCE, KDE3 этот способ, возможно, не работает.
В GNOME параметры кодировки можно настроить через gconf-editor, путём изменения редактирования ключа
/system/storage/default_options/vfat:mount_options
Для корректного отображения русских букв требуется указать нужное значение параметра iocharset (например, iocharset=utf8)
Далее необходимо перезапустить hal:
# /etc/rc.d/hal restart
Возможные проблемы
Вставленный CD/DVD диск не распознается hal`ом
Если вставленный CDs/DVDs диски не распознаются hal`ом (не создаются иконки на рабочем столе), просмотрите файл /etc/fstab и удалите из него все строки, касающиеся оптических приводов.
USB диски и флешки не автомонтируются корректно
Данный подраздел взят с форума.
Если вы испытываете проблемы с автомонтированием usb дисков, но проблем с CD/DVD дисками у вас не возникает, и монтировать вручную USB диски вы можете, вы можете попробовать создать файл "preferences.fdi" в папке /etc/hal/fdi/policy и вставить туда следующую строку
<merge key="volume.ignore" type="bool">false</merge>
Не забудьте также убедиться в отсутствии монтируемых с помощью HAL устройств в /etc/fstab
Если у вас Gnome, то смотрите Монтирование_внешних_носителей_в_Gnome_и_кодировка_символов
Группы Dbus and HAL
Некоторые пользователи считают, что HAL работает если ваш пользователь также является членом групп dbus и hal . Чтобы это проверить запустите следующие команды от пользователя root:
# gpasswd -a username dbus # gpasswd -a username hal
Если это не решит вашей проблемы удалите пользователя из этих групп на всякий случай, чтобы избежать в дальнейшем проблем:
# gpasswd -d username dbus # gpasswd -d username hal
При извлечении флешки размонтирование выполняется некорректно
Если извлечь флешку, не размонтировав её перед этим, HAL может производить автоматическое размонтирование некорректно.
Проявляется это в том, что в файле /media/.hal-mtab остаются записи о смонтированном устройстве, а в списке устройств nautilus (и на рабочем столе) остаётся ярлык - ссылка на пустую папку.
Исправить это можно, производя при извлечении флэшки размонтирование с ключом lazy. Делается это так:
1) Создаётся скрипт /usr/lib/hal/hal-unmount.sh с правами 755 и содержимым
#!/bin/sh # sanity check. DEVNAME should start with a / [ "$DEVNAME" != "${DEVNAME#/}" ] || exit 0 # Lazily unmount drives which are removed, but still mounted if [ "$ACTION" = remove ] ; then if [ -x /usr/bin/pumount ] ; then /usr/bin/pumount -l "$DEVNAME"; else /bin/umount -l "$DEVNAME"; fi fi exit 0
2) Добавляется выполнение этого скрипта при извлечении флэшки. Для этого в файл /etc/udev/rules.d/90-hal.rules нужно добавить строчку
SUBSYSTEM=="block", ACTION=="remove", RUN+="/usr/lib/hal/hal-unmount.sh"
Использвание PMount
Если всё вышеперечисленное у вас так и не заработало, то можете попробовать устоновить pmount. PMount - это обёртка для стандартного mount, позволяющая обычным пользователям монтировать устройства без прописывания их в /etc/fstab.
# pacman -Sy pmount