HAL (Русский)

From ArchWiki

Jump to: navigation, search
Image:Tango-emblem-important.png The factual accuracy of this article is disputed.
Please help improve the article and verify/correct/remove disputed content. (Discuss)
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
Personal tools