LXDE: Mit halvet Geräte Aktionen festlegen

von Paul Arnote (parnote)

Viele Benutzer sehen LXDE als einen Ersatz für ihr geliebtes KDE3.5.x an. Fakt ist, mit den richtigen Kenntnissen und Fähigkeiten, kann LXDE einfach dem Aussehen und den Funktionen von KDE 3.5.x angepasst werden. Natürlich ist die Anwendung dieses Wissens und dieser Fertigkeiten viel einfacher, wenn man die richtigen Werkzeuge benutzt.

Nutze halvet. Halvet ist ein Daemon, der ihnen hilft, bei der Überwachung und Änderung ihrer Hardware am Computer. Es steht für HAL (Hardware Abstraction layer) Event Manager. Die Aufgabe von halvet besteht darin bestimmte Eigenschaften auszuführen, wenn Geräte gestartet werden oder Änderungen vorgenommen werden.

Diese Geräte können Audio-CDs, CD-Rohlinge oder CD-RWs, DVD-Filme, USB-Sticks, oder beliebig viele andere Begriffe, die von ihrem Computer unterstützt werden, beinhalten. Es sind nur die vorinstallierten Eigenschaften, die man mit PCLinuxOS-LXDE nutzen kann. Aber wie können Sie die Standard-Aktionen ändern, fragen Sie sich jetzt? Es ist einfacher als Sie vielleicht denken, aber zuerst müssen Sie wissen, wie halevt aufgebaut ist.

So funktioniert es

Halevt weiß, wie es mit den verschiedenen Hardware-Events umzugehen hat, dank der halevt.xml Datei. Diese Datei teilt halevt mit, was zu tun ist, wenn bestimmte Ereignisse in der Hardware geschehen. Sie können einen Einlick auf die Grundlagen von halevt bekommen, wenn Sie diesen Beitrag (leider nur in Englisch) im PCLinuxOS Forum nachlesen.

Auch wenn Sie noch nie eine XML-Datei angeschaut habe, so ist die Struktur eigentlich einfach aufgebaut. Es ist eine textbasierte Datei, mit einer HTML ähnlichen Syntax. Wenn Sie diese lesen können (oder ein grundlegendes Verständnis für rohes HTML haben), sind Sie gut gerüstet. Da wir hier nicht genügend Platz haben, um noch einen Grundkurs in HTML anzufangen, geben wir ihnen einige Grundlagen. Nur so viel, wenn Sie ein Gerät öffnen mit <halevt:Device match="xxxx.yyyy.zzzz = true">, so müssen Sie es auch schließen mit </halevt: Device>. Das gleiche müssten Sie angeben, im fettgedruckten Text in HTML, wo <b> vor dem Text steht und </b> am Ende des Textes, somit wird fest gelegt, was fett geschrieben wird.

Hier ist die grundlegende halevt.xml Datei, die in PCLinuxOS-LXDE installiert ist:

<?xml version="1.0" encoding="UTF-8"?>
<halevt:Configuration version="0.1" xmlns:halevt="http://www.environnement.ens.fr/perso/dumas/halevt.html">
  
<halevt:Device match="hal.volume.disc.has_data = true">
<halevt:Insertion exec="pcmanfm"/>
</halevt:Device>
  
<halevt:Device match="hal.volume.disc.has_audio = true">
<halevt:Insertion exec="xmms /mnt/cdrom"/>
<halevt:Removal exec="killall xmms"/>
</halevt:Device>
  
<halevt:Device match="hal.volume.disc.has_video = true">
<halevt:Insertion exec="xine dvd://"/>
<halevt:Removal exec="killall xine"/>
</halevt:Device>
  
<halevt:Device match="hal.volume.disc.is_videodvd = true">
<halevt:Insertion exec="xine dvd://"/>
<halevt:Removal exec="killall xine"/>
</halevt:Device>
  
<halevt:Device match="hal.info.udi = /org/freedesktop/Hal/devices/volume_empty_cd_r">
<halevt:Insertion exec="gnomebaker"/>
</halevt:Device>
  
<halevt:Device match="hal.info.udi = /org/freedesktop/Hal/devices/volume_empty_cd_rw">
<halevt:Insertion exec="gnomebaker"/>
</halevt:Device>
  
<halevt:Device match="hal.info.udi = /org/freedesktop/Hal/devices/volume_empty_dvd">
<halevt:Insertion exec="gnomebaker"/>
</halevt:Device>
  
<halevt:Device match="hal.info.category = storage &amp; hal.storage.bus = usb">
  <halevt:Insertion exec="pcmanfm"/>
  </halevt:Device>
  
<halevt:Device match="hal.info.category = camera">
  <halevt:Insertion exec="gtkam"/>
  </halevt:Device>
  
<halevt:Device match="hal.info.udi = /org/freedesktop/Hal/devices/computer_power_supply_ac_adapter_AC">
  <halevt:Property name="hal.ac_adapter.present">
  <halevt:Action value="true" exec="notify-send -t 5000 -i /usr/share/icons/Tango/scalable/status/info.svg 'The AC adapter is connected now ...'"/>
  </halevt:Property>
  </halevt:Device>
  
<halevt:Device match="hal.info.udi = /org/freedesktop/Hal/devices/computer_power_supply_ac_adapter_AC">
  <halevt:Property name="hal.ac_adapter.present">
  <halevt:Action value="false" exec="notify-send -t 5000 -i /usr/share/icons/Tango/scalable/status/info.svg 'The AC adapter was removed ...'"/>
  </halevt:Property>
  </halevt:Device>
  
</halevt:Configuration>

Die oben angegebene halvet.xml Datei funktioniert für viele Dinge in meiner Installation von PCLinuxOS-LXDE, aber es gibt ein paar Dinge, die nicht so recht funktionieren wollen. Meine LXDE-Version ist im vollem Umfang aktualisiert. Also habe ich angefangen die halevt.xml Datei, zu erkunden, um diese Dinge ans laufen zu bekommen.

Zuerst schauen Sie sich die achte Zeile in der halevt.xml an (Leerzeilen werden mit angegeben). Diese lautet:

<halevt:Device match="hal.volume.disc.has_audio = true">

In der neunten Zeile wird( ) XMMS verwendet, um eine AudioCD zu öffnen. Es öffnet sich zwar XMMS, weigert sich aber, die Audio-CD abzuspielen. Ich bekomme es leider nicht hin, dass XMMS die Audio-CD abspielt, geschweige denn automatisch abspielt, wenn ich die Audio-CD einlege.

Jedoch ist in der PCLinuxOS-LXDE Version der SMPlayer vorinstalliert (Basis-Installation). Dieser leistungsfähigere Media Player, kann nicht nur DVDs, sondern auch Audio-CDs, Video CDs und Super Video-CDs abspielen. Wieso also nicht in der halevt.xml Datei den SMPlayer eintragen? Eine ziemlich einfache Aufgabe. Ersetzen Sie in der halvet.xml die neunte und zehnte Zeilen durch folgenden Eintrag:

<halevt:Insertion exec="smplayer cdda://1 -actions play"/>
<halevt:Removal exec="killall smplayer"/>

pic

Wenn Sie nun eine Audio-CD einlegen, wird automatisch SMPlayer geöffnet und beginnt mit der Wiedergabe. Einfach oder? Um herauszufinden, wie der Befehl lauten musste, dass die Audio-CD automatisch abgespielt wird, verwendete ich LXTerminal und gab dort den Befehl smplayer --help ein.

Ändern Sie auch die DVD-Videos Wiedergabe. In der halevt.xml wird standardmäßig xine für die Wiedergabe von Videos angegeben. Auch hier kann SMPlayer diese Aufgabe übernehmen. Ich bekam beim einlegen einer DVD xine nicht dazu, die Wiedergabe meiner Disc zu starten. So ersetzte ich die Zeilen 19 und 20 mit folgendem Eintrag:

<halevt:Insertion exec="smplayer dvd://"/>
<halevt:Removal exec="killall smplayer"/>

SMPlayer startet nun automatisch, wenn Sie eine Video-DVD einlegen. Doch einfacher als Sie vielleicht dachten.

halvet.xml erweitern: Machen Sie mehr daraus

Neben Audio-CDs und DVD-Videos, habe ich auch eine Ansammlung von VCDs (Video Compact Discs) und Super-VCDs (Super Video Compact Discs). Ich möchte auch das diese Discs automatisch gestartet werden, im SMPlayer.

Bevor ich dies tun konnte, musste ich erst herausfinden, wie halvet die Medien sieht und welche Namen ihnen gegeben werden. Nach dem ich eine Super-VCD in das optische Laufwerk eingelegt hatte, startete ich lxterminal, und gab lshal ein. Es wurde eine Tonne an Informationen ausgegeben. Scrollen Sie bis zu dem Abschnitt, wo die Hardware für Ihr optisches Laufwerk auflistet wird. Sobald Sie den richtigen Abschnitt gefunden haben, er sollte so aussehen:

udi = '/org/freedesktop/Hal/devices/volume_label_NEW'
  block.device = '/dev/sr0'  (string)  block.is_volume = true  (bool)  block.major = 11  (0xb)  (int)
  block.minor = 0  (0x0)  (int)
  block.storage_device = '/org/freedesktop/Hal/devices/storage_model_DW_28E'  (string)
  info.capabilities = {'volume.disc', 'volume', 'block'} (string list)
  info.category = 'volume'  (string)
  info.interfaces = {'org.freedesktop.Hal.Device.Volume'} (string list)
  info.parent = '/org/freedesktop/Hal/devices/storage_model_DW_28E'  (string)
  info.product = 'NEW'  (string)
  info.udi = '/org/freedesktop/Hal/devices/volume_label_NEW'  (string)
  linux.hotplug_type = 3  (0x3)  (int)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sr0/fakevolume'  (string)
  org.freedesktop.Hal.Device.Volume.method_argnames = {'mount_point fstype extra_options', 'extra_options', 'extra_options'} (string list)
  org.freedesktop.Hal.Device.Volume.method_execpaths = {'hal-storage-mount', 'hal-storage-unmount', 'hal-storage-eject'} (string list)
  org.freedesktop.Hal.Device.Volume.method_names = {'Mount', 'Unmount', 'Eject'} (string list)
  org.freedesktop.Hal.Device.Volume.method_signatures = {'ssas', 'as', 'as'} (string list)
  volume.block_size = 2048  (0x800)  (int)
  volume.disc.capacity = 735051776  (0x2bd00000)  (uint64)
  volume.disc.has_audio = false  (bool)
  volume.disc.has_data = true  (bool)
  volume.disc.is_appendable = false  (bool)
  volume.disc.is_blank = false  (bool)
  volume.disc.is_blurayvideo = false  (bool)
  volume.disc.is_rewritable = false  (bool)
  volume.disc.is_svcd = true  (bool)
  volume.disc.is_vcd = false  (bool)
  volume.disc.is_videodvd = false  (bool)
  volume.disc.type = 'cd_r'  (string)
  volume.fstype = 'iso9660'  (string)
  volume.fsusage = 'filesystem'  (string)
  volume.fsversion = ''  (string)
  volume.ignore = false  (bool)
  volume.is_disc = true  (bool)
  volume.is_mounted = false  (bool)
  volume.is_mounted_read_only = false  (bool)
  volume.is_partition = false  (bool)
  volume.label = 'NEW'  (string)
  volume.linux.is_device_mapper = false  (bool)
  volume.mount.valid_options = {'ro', 'sync', 'dirsync', 'noatime', 'nodiratime', 'relatime', 'noexec', 'quiet', 'remount', 'exec', 'utf8', 'uid=', 'mode=', 'iocharset='} (string list)
  volume.mount_point = ''  (string)
  volume.num_blocks = 1436264  (0x15ea68)  (uint64)
  volume.size = 735367168  (0x2bd4d000)  (uint64)
  volume.unmount.valid_options = {'lazy'} (string list)
  volume.uuid = ''  (string)

Dies ist nur ein Bruchteil der gesamten Menge an Informationen, die ausgegeben wird. Ich habe die Farbe des Textes für den Abschnitt der Ausgabe in rot gesetzt. Die siebte rote Linie sieht wie folgt aus volume.disc.is_svcd = true? Das zeigt an, dass halevt einer Super-VCD als svcd erkennt.

Bewaffnet mit dieser Information kann ich jetzt auch Super-VCD in SMPlayer abspielen.

pic

In der Titelleiste des SMPlayer, bemerkte ich, dass es als vcd://2 angegeben wurde. Diese Information ist wichtig, da ich diese in der halvet.xml an der Befehlszeile, exec= Parameter, eintragen musste.

Nun habe ich alle Informationen, die ich brauche, um halevt mit der Fähigkeit Super VCD zu erkennen, zu erweitern. Um dies zu tun, müssen wir die folgenden Zeilen einfügen:

<halevt:Device match="hal.volume.disc.is_svcd = true">
<halevt:Insertion exec="smplayer vcd://2"/>
<halevt:Removal exec="killall smplayer"/>
</halevt:Device>

Um alles bei einander stehen zu haben, fügte ich die obigen vier Zeilen direkt unter der videodvd Zeile ein. Sie kann aber auch eingefügt werden, wo immer Sie wollen, außer am Ende. Es muss vor der </halevt:Property> Zeile eingefügt werden. Ansonsten würde halvet überhaupt nichts erkennen.

pic

Ebenso kann ich den Vorgang wiederholen, für die Video-CDs (siehe oben abspielen in SMPlayer). Legen Sie weiterhin die folgenden vier Zeilen nach der VideoDVD Zeile an:

<halevt:Device match="hal.volume.disc.is_vcd = true">
<halevt:Insertion exec="smplayer vcd://2"/>
<halevt:Removal exec="killall smplayer"/>
</halevt:Device>

Haben Sie bemerkt, dass der "exec" Befehl der gleiche ist, wie von oben vcd://2, obwohl im SMPlayer Menüleiste vcd://3 steht? Das liegt daran, dass der Inhalt der Video-CD mit dem zweiten Track beginnt. Bei dieser besonderen Track, handelt es sich um den Inhalt eines 17 Minuten dauernden "hinter den Kulissen" Spezials mit George Lucas. Bei fast allen anderen VCDs, beginnen unsere Inhalte mit diesem zweiten "Track". Wenn Sie das Making of nicht sehen möchten, klicken Sie schnell forwärts zum Filmbeginn.

Sobald Sie fertig sind mit den Änderungen an der halevt.xml Datei, sollten Sie ihren Computer neu starten. Warum? Die halevt.xml Datei ist im Arbeitsspeicher zwischengespeichert. Durch den Neustart des Computers wird die halevt.xml Datei mit den neuen Werten geladen.

Die VCD und SVCD-Discs werden nun automatisch im SMPlayer gestartet. Aber auch PCManFM, bietet die Option an die VCD und SVCD-Discs zu öffnen, als Daten-CDs. Ich habe noch nicht den Weg entdeckt, um zu verhindern, dass der Dateimanager PCManFM sich öffnet, jedoch ist es am einfachsten diesen zu schließen.

Fazit

Wie Sie sehen können, bietet halevt.xml eine relativ einfache Art und Weise ihr LXDE System auf Hardware-Ereignisse anzupassen. Wie wir bereits erwähnt haben, existieren die Konfigurationsdateien bereits, aber nur Sie müssen bereit sein, diese Konfigurationsdateien mit den eigenen Händen manuell zu bearbeiten. Wie Sie sehen können, ist es gar nicht so schwierig. Sie müssen sich nur an "die Regeln halten."