HAL (Türkçe)

From ArchWiki

Jump to: navigation, search


i18n
English
Polish
Русский
简体中文
Español
Italiano
Türkçe

HAL (Hardware Abstraction Layer) ya da diğer adı ile Donanım Soyutlama Katmanı, masaüstü uygulamalarının doğrudan aygıt bilgilerine ulaşmasını sağlayan bir sistem servisidir. Böylece bir masaüstü ortamı, kullanıcısına tüm sistem kaynaklarını kolayca ve düzenli bir şekilde sunmaktadır.

Contents

HAL ve Otomatik Tanıma

Donanım otomatik tanımaya dair bir çok yöntem bulunmaktadır ve HAL bunlardan biridir. Yeni bir donanımı bilgisayarınıza taktığınızda, mesela USB disk bağladığınızda sırasıyla şu işlemler gerçekleşir:

  • Çekirdek takılan donanımdan haberdar olur ve donanım hakkındaki bilgileri /sys dizininde ilgili kısma yazar.
  • Udev aygıt düğümünü oluşturur (mesela /dev/sdb1) ve gerekli sürücüleri ve modülleri çalıştırır.
  • HAL servisi D-Bus tarafından uyarılır ve aygıtı ve aygıtla ilgili herşeyi veritabanına ekler.
  • Eklenen yeni aygıt HAL tarafından, D-Bus üzerinden, D-Bus ile etkileşim halinde bulunan uygulamalara bildirilir. Mesela, Thunar kısayollar panelinde aygıt simgesini gösterir veya Metacity/Nautilus masaüstüne simge ekler.
  • Etkileşim halinde bulunan uygulamalar, yani thunar-volman veya AutoFS gibi birim yöneticileri bağlama noktalarını ve belirli aygıtlar için uygulanacak işlemleri (mesela, iPod'u bağladığınızda Rhytmbox uygulamasının çalıştırılması) otomatik olarak belirlemek üzere ayarlanmışlardır.

HAL servisinin donanım tanıma (kernel), aygıt ve sürücü yönetme (udev) ve otomatik bağlama (birim yöneticileri) gibi bir vasfı bulunmamaktadır. HAL servisinin görevi daha çok uygulamalar ile aygıtlar arasında basit ve temiz bir arayüz oluşturmaya yönelik bir bağlantı merkezi kurmaktır. Tanınmayan aygıtlar veya tanındığı halde kullanılamayan aygıtlar için 'Sorun Giderme' kısmını inceleyebilirsiniz.

Temel Yapılandırma

HAL servisi çalışmak için D-Bus servisine ihtiyaç duymaktadır. Bu yüzden her ikisinin de kurulu olduğundan emin olmalısınız.

Eğer isterseniz, ayrıca pmount uygulamasını da kurabilirsiniz:

Yetkili kullanıcı olarak şu komutu vermeniz yeterlidir:

# pacman -S pmount

pmount, normal kullanıcıların, kaldırılabilir ortam aygıtlarını (diskler vs.) sudo kullanmaya veya /etc/fstab dosyasını düzenlemeye gerek kalmadan kullanmasını sağlamaktadır. Ayrıca bağımlılık olarak HAL ve D-Bus paketlerini de indirecektir.

Buna rağmen, isterseniz sadece HAL ve D-Bus paketlerini kurabilirsiniz:

# pacman -S hal dbus

pmount paketini kurmuş olun veya olmayın, aşağıdaki işlemleri takip etmeniz gerekmektedir: /etc/rc.conf dosyanızı açıp, DAEMONS satırına hal servisini eklemelisiniz. Mesela,

DAEMONS=(syslog-ng hal network netfs ...)

Böylelikle HAL servisi bilgisayarınızı her çalıştırdığınızda otomatik olarak başlatılacaktır. HAL çalışırken, D-Bus servisinin çalışıp çalışmadığını kontrol edecek ve eğer çalışmıyorsa onu otomatik çalıştıracaktır. Bu yüzden, eğer DAEMONS satırında dbus satırı varsa kaldırabilirsiniz.

Ayrıca servisi şu komutu vererek elle başlatabilirsiniz:

# /etc/rc.d/hal start

D-Bus ve HAL'i sorunsuz kullanabilmek için, kullanıcınızı şu optical ve storage gruplarına eklemelisiniz, bunun için yetkili kullanıcı olarak şu komutları vermeniz yeterlidir:

# gpasswd -a kullanıcı optical
# gpasswd -a kullanıcı storage
kullanıcı kısmını yetkilendirmek istediğiniz kullanıcı ile değiştirin (mesela ras0ir).

Grup değişikliklerinin fonksiyonel olması için, sistemden çıkıp tekrar giriş yapmanız gerekmektedir.

Kural dosyaları (policy)

İzin kuralları

Uygulamalarınız HAL denetimindeki aygıtlara D-Bus arabirimleri aracılığı ile ulaşmaktadır. Bu arabirimlere d-bus şartnamesinden ulaşabilirsiniz. Çeşitli arabirimler çeşitli vasıflar üstlenmektedirler. Mesela, storage arabirimi optik sürücüler için 'eject' (çıkarma) ve 'close tray' (tepsiyi kapatma) yöntemlerine sahiptir. Ayrıca eğer bir flash diski sistemde bir klasöre bağlamak için ilgili D-Bus arabirimine erişmeniz gerekmektedir. ('volume')

/etc/dbus-1/system.d/hal.conf dosyası HAL servisine özgün yetkileri tanımlar, mesela, hangi kullanıcı hangi arabirimlere erişebilir vs. Bu durum /etc/dbus-1/system.conf dosyasında tanımlanan D-Bus arabirimlerindeki bütün kısıtlamalara istisna niteliği gösterir. Kısaca, dbus yapılandırması öntanımlı olarak bütün erişimi kısıtlarken hal.conf dosyası kullanıcınıza spesifik DBUS/HAL arabirimlerine erişim yetkisi, yani istisna niteliği vermektedir.

Öntanımlı hal.conf dosyası erişime izin veren veya erişimi engelleyen kuralları barındırmaktadır.

<policy context="default">
  <deny send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
  <deny send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
  <deny send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
  <deny send_interface="org.freedesktop.Hal.Device.Volume"/>
  <deny send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>

Kısaca, kullanıcıların öntanımlı olarak mount ve unmount gibi yöntemlere sahip Volume ve benzeri arabirimlere erişimleri engellenmektedir. Bu engel kullanıcıyı 'power' ve 'storage' gruplarına ekleyerek aşılmaktadır. Aygıtlar ve onlara ilişkin grup örneği şu şekildedir:

<policy group="power">
  <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
  <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
</policy>
<policy group="storage">
  <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
  <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
</policy>

Kullanıcınızı yukarıda bahsedilen gruplara eklemek özel yapılandırma dosyası sayısını azaltmanızı sağlar. Farklı (ve güzel olmayan) bir yöntem ise 'policy user' değerini kullanıcınızla değiştirerek tanımlanan tüm HAL aygıtlarına erişmektir. (0 yerine kullanıcı adınızı yazın):

 <policy user="0">
   <allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"/>
   <allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"/>
   <allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"/>
   <allow send_interface="org.freedesktop.Hal.Device.Volume"/>
   <allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"/>
 </policy>

Aygıta Has Kurallar

NTFS

Aşağıdakileri /etc/hal/fdi/policy/20-ntfs-config-write-policy.fdi dosyasına yazın (eğer bu dosya yok ise oluşturun):

<?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>

PCManFM yöntemi

Eğer dosya yöneticisi olarak pcmanfm kullanıyorsanız, uygulamanın ntfs-3g sürücüsünü nasıl kullanabileceğini belirtme şansınız mevcuttur. '/usr/share/pcmanfm/mount.rules dosyasında şu şekilde değişiklik yapabilirsiniz:

[ntfs-3g]
# mount_options=locale=;exec
mount_options=uid=1000;gid=100;fmask=0113;dmask=0002;locale=;exec

Ayrıca bu parametrelerin içerisinde izinleri belirlemek yukarıda örnekte görüldüğü üzere mümkündür.

Hal 0.5.11-7 yöntemi

HAL paketinin 0.5.11-7 sürümünden itibaren, hal servisi üzerinden ntfs birimleri bağlamak mümkün olmayabilir. Bu sorunu aşmanın 2 yöntemi mevcuttur.

  • Diğer yöntem ise, /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi dosyasını açıp, aşağıdaki gibi görünecek şekilde o dosyada düzenleme yapmaktır. (<merge key= .. satırlarını eklemek yeterlidir)
<match key="volume.fstype" string="ntfs">
<match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
<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">uid=</append>

mount.ntfs sembolik bağı

HAL servisinin 0.5.10 sürümü ve üzerindeki sürümlerinde yukarıdaki kural dosyası çalışmamaktadır. Bu engeli aşmak amacıyla, HAL'i standart ntfs yerine ntfs-3g kullanmaya zorlayabilirsiniz. Bu yöntemin bütün NTFS diskler için ntfs-3g sürücüsünü kullanacağını unutmayın! Yetkili kullanıcı olarak, sembolik bağ oluşturun:

# ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs

Bu yöntemin şu problemlere neden olduğu bilinmektedir:

  • eğer mount komutu "-i" parametresi ile çağrılmışsa çalışmayacaktır
  • çekirdekteki ntfs modülü ile ilgili bazı problemler

Yerel Problemleri

Note: ntfs-3g 2009.1.1 sürümü itibariyle NTFS disklerde yerel problemi yaşanmamaktadır. Eğer problem yaşamaya devam ediyorsanız, aşağıdaki yönergeleri takip edebilirsiniz.

Türkçe karakterleri barındıran dosyalarda problem yaşayabilirsiniz. Bu sorunu aşmak için şu yöntemi uygulayabilirsiniz:

1) Sembolik bağı kaldırın: rm /sbin/mount.ntfs-3g

2) Sildiğiniz mount.ntfs-3g yerine aynı isimde bir bash betiği oluşturun:

#!/bin/bash
/bin/ntfs-3g $1 "$2" -o locale=tr_TR.UTF-8,$4 #farklı bir yerel de kullanabilirsiniz

3) Betiği çalıştırılabilir yapın: chmod +x /sbin/mount.ntfs-3g

4) /etc/pacman.conf dosyasına "NoUpgrade = sbin/mount.ntfs-3g" satırını ekleyin.


Farklı bir yöntem ise şu şekildedir:

1) Yetkili kullanıcı olarak bir konsol açın

2) Şu komutu verin: "mv /sbin/mount.ntfs-3g /sbin/mount.ntfs-3g.sav"

3) Aşağıdaki satırları içeren bir /sbin/mount.ntfs-3g dosyası oluşturun:

#!/bin/bash
/sbin/mount.ntfs-3g.sav $1 $2 -o locale=tr_TR.UTF-8

Yereli tr_TR.UTF-8 dışında bir yerel kullanıyorsanız ona göre ayarlayın.

4) Dosyayı çalıştırılabilir yapın:

" chmod +x /sbin/mount.ntfs-3g "

5) /etc/pacman.conf dosyasına "NoUpgrade = sbin/mount.ntfs-3g" satırını ekleyin.

6) /usr/share/hal/fdi/policy/10osvendor/20-storage-methods.fdi dosyasında ntfs ile ilgili kısmı şu şekilde değiştirin

<match key="volume.fstype" string="ntfs">
 <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="Linux">
   <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">uid=</append>
  <append key="volume.mount.valid_options" type="strlist">gid=</append>
  <append key="volume.mount.valid_options" type="strlist">umask=</append>
  <append key="volume.mount.valid_options" type="strlist">dmask=</append>
  <append key="volume.mount.valid_options" type="strlist">fmask=</append>
  <append key="volume.mount.valid_options" type="strlist">locale=</append>
  <append key="volume.mount.valid_options" type="strlist">utf8</append>
 </match>
 <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name" string="FreeBSD">
   <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">-u=</append>
  <append key="volume.mount.valid_options" type="strlist">-g=</append>
  <append key="volume.mount.valid_options" type="strlist">-m=</append>
  <append key="volume.mount.valid_options" type="strlist">-a</append>
  <append key="volume.mount.valid_options" type="strlist">-i</append>
  <append key="volume.mount.valid_options" type="strlist">-C=</append>
  <append key="volume.mount.valid_options" type="strlist">-W=</append>
 </match>

ntfs-3g için fmask ve dmask izni

dmask ve fmask değerleri farklı dizin ve dosyalara farklı erişim hakkı sağlamak bakımından kullanışlıdır. Mesela, dmask=000,fmask=111 değerleri dizinleri herkesin erişimine açmakla birlikte dosyalara çalıştıramaz (non-executable) izni atamaktadır.

    <device>
        <match key="volume.fstype" string="ntfs">
            <append key="volume.mount.valid_options" type="strlist">dmask=</append>
            <append key="volume.mount.valid_options" type="strlist">fmask=</append>
        </match>
    </device>

iPod için bağlama noktası belirleme

Eğer HAL servisine iPod'u nereye bağlayacağını belirtmezseniz, iPod'u /media dizinine farklı bir isimle bağlayacaktır. Bu davranışı değiştirmek için HAL için bir kural dosyası oluşturmak zorundasınız.

  <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>

Yukarıdaki satırlar arasında bulunan:

<merge key="volume.policy.mount_option.iocharset=iso8859-15" type="bool">true</merge>

satırını aşağıdaki satırla değiştirebilirsiniz:

<merge key="volume.policy.mount_option.iocharset" type="string">iso8859-15</merge>

Bu yöntemi eğer ilk satırı yazdığınızda yazma problemi yaşıyorsanız kullanın.

Sadece Çıkarılabilir Ortamı Otomatik Bağlama (automount)

HAL öntanımlı olarak /etc/fstab'da tanımlanan ve bağlanmamış bölümleri bağlar ve onlar için masaüstü simgeleri oluşturur. Bu davranışı değiştirmek için ve sadece çıkarılabilir sürücüler için uygulamak için şu kuralı oluşturun:

 <device>
   <match key="storage.hotpluggable" bool="false">
     <match key="storage.removable" bool="false">
       <merge key="storage.automount_enabled_hint" type="bool">false</merge>
     </match>
   </match>
 </device>

Eğer KDE kullanıyorsanız ve aygıt otomatik bağlanmasına rağmen masaüstüne simgesi gelmiyorsa, Kontrol Merkezi -> Masaüstü -> Davranış -> Aygıt Sembolleri (3. sekme) üzerine gidip, kutucuğu işaretleyin.

Kaldırılabilir sürücüler için noatime özelliğini kullanmak

Bu yöntem flash disklerde ve SD kartlarda dosya işlemlerini hızlandırmaktadır.

 <device> 
   <match key="block.is_volume" bool="true">
     <match key="@block.storage_device:storage.hotpluggable" bool="true">
       <merge key="volume.policy.mount_option.noatime" type="bool">true</merge>
     </match>
     <match key="@block.storage_device:storage.removable" bool="true">
       <merge key="volume.policy.mount_option.noatime" type="bool">true</merge>
     </match>
   </match>
 </device>

.. son

Yaptığınız değişikliklerden sonra HAL servisini tekrar başlatmayı unutmayın:

# /etc/rc.d/hal restart

Sorun Giderme

Otomatik bağlama işlemi "IsCallerPrivileged failed" hatası veriyor

Eğer "IsCallerPriviliged failed" mesajı alıyorsanız ve KDM veya GDM kullanmıyorsanız, ck-launch-session kullanarak masaüstü ortamınızı veya pencere yöneticinizi çalıştırmanız gerekmektedir.

Mesela startx komutu ile KDE'yi çalıştırıyorsanız ( ~/.xinitrc kullanarak):

exec startkde

satırını aşağıdaki satırla değiştirmeniz gerekmektedir:

exec ck-launch-session startkde

Permission Denied with automounter

Eğer güncelleme sonrasında diskleriniz otomatik olarak bağlanmıyor ve "PermissionDeniedByPolicy mount-removable no" veya "PermissionDeniedByPolicy mount-removable-extra-options no" şeklinde hata alıyorsanız, /etc/PolicyKit/PolicyKit.conf dosyasında şu şekilde değişikliğe gidebilirsiniz:

       <match user="$USER"> <!-- bu kısmı kendi kullanıcınız ile değiştirebilirsiniz veya birden çok kullanıcıya izin vermek için bu satırı silebilirsiniz -->
               <match action="org.freedesktop.hal.storage.*">
                       <return result="yes"/>
               </match>
               <match action="hal-storage-mount-fixed-extra-options"> <!-- for internal devices mounted with extra options like a wished mount point -->
                       <return result="yes" />
               </match>
               <match action="hal-storage-mount-removable-extra-options"> <!-- for external devices mounted with extra options like a wished mount point -->
                       <return result="yes" />
               </match>
       </match>  <!-- ilk satırı sildiyseniz bu satırı da silmelisiniz -->

$USER değerini kendi kullanıcı adınız ile değiştirmeniz gerekmektedir. Bu işlemi gerçekleştirdikten sonra, dbus ve hal servislerini tekrar başlatmanız gerekmektedir.

ya da alternatif olarak şöyle bir /etc/PolicyKit/PolicyKit.conf düzenleyebilirsiniz:

 <?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">
<config version="0.1">
<match action="org.freedesktop.hal.storage.mount-removable">
    <return result="yes"/>
</match>
<match action="org.freedesktop.hal.storage.mount-fixed">
    <return result="yes"/>
</match>
</config>

Tip: İkinci yapılandırmayı kullanmanız tavsiye edilmektedir.

Güvenlik Hatası

Eğer CD ve DVD'ler tanınmış ve masaüstüne simgeleri yerleştirilmiş, fakat bu aygıtı açıp, araştıramıyorsanız, aygıt udev tarafından tanınmıştır fakat bir şeyler HAL'in bu aygıtları bağlamasına engel olmaktadır. Eğer çift simgeye çift tıkladığınızda '"A security policy prevents this sender from sending this message to this recipient..." şeklinde bir hata penceresi ile karşılaşıyorsanız, yukarıda anlatılan izin kurallarını ve genel ayarlar kısmını tekrar gözden geçirmelisiniz.

HAL taktığım CD veya DVD'yi tanımıyor

Eğer takmış olduğunuz optik diskler HAL tarafından tanınmıyorsa (masaüstüne simgeleri gelmiyorsa), /etc/fstab dosyanızı gözden geçirin ve bu dosyada optik sürücülerle ilgili satırları kaldırın.

USB diskim ve flashdiskim otomatik olarak bağlanmıyor

Bu konuda ayrıntılı bilgi bu forum sayfasında bulunmaktadır.

Eğer USB disklerin otomatik bağlanmıyor fakat CD veya DVD'leriniz otomatik bağlanıyorsa veya USB disklerinizi elle bağlayabiliyorsanız, /etc/hal/fdi/policy/ dizini altında "preferences.fdi" isimli bir dosya oluşturup, içine aşağıdaki kodu ekleyiniz:

<merge key="volume.ignore" type="bool">false</merge>

Ayrıca, eğer sisteminizde GParted uygulaması kurulu ise, şu dosyayı silmeniz gerekebilir:

/usr/share/hal/fdi/policy/gparted-disable-automount.fdi

... kaynak: [1]

External links

HAL 0.5.10 specifications - A comprehensive HAL specification and introduction.

Dam's blog - An attempt to clarify the division of labor among the kernel, udev, D-Bus and HAL with links to HOWTOs and FAQs on each.

Dynamic Device Handling (pdf) - A presentation of device handling.

Personal tools