[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < Übliche Programmbenutzung ] | [ Nach oben : lilypond starten ] | [ lilypond aufrufen > ] |
1.2 Benutzung auf der Kommandozeile
Dieser Abschnitt enthält zusätzliche Informationen, wie Sie LilyPond
von der Kommandozeile ausführen können. Dies kann erforderlich sein,
um etwa zusätzliche Optionen an das Programm zu übergeben. Außerdem
sind einige Zusatzprogramme (wie etwa midi2ly
) nur von der
Kommandozeile verfügbar.
Unter ‚Kommandozeile‘ verstehen wir die Kommandozeile des jeweiligen Betriebssystems. Windows Benutzern ist sie vielleicht eher unter den englischen Begriffen ‚DOS shell‘ oder ‚command shell‘ bekannt. MacOS X Benutzer kennen sie eher unter ‚Terminal‘ oder ‚Konsole‘. Einige zusätzliche Einrichtungsarbeiten werden unter MacOS X, siehe MacOS X.
Wie die Kommandozeile im jeweiligen Betriebssystem benutzt werden kann, soll in diesem Handbuch nicht näher beschrieben werden. Sehen Sie bitte im Handbuch Ihres Betriebssystems nach oder informieren Sie sich im Internet, wenn Sie mit der Kommandozeile nicht vertraut sind.
lilypond aufrufen | ||
Optionen auf der Kommandozeile für lilypond | ||
Umgebungsvariablen | ||
LilyPond in chroot-Kerker |
[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < Benutzung auf der Kommandozeile ] | [ Nach oben : Benutzung auf der Kommandozeile ] | [ > ] |
lilypond
aufrufen
Das lilypond
Programm kann folgendermaßen von der Kommandozeile
aufgerufen werden.
lilypond [Option]… Dateiname…
Wird ein ‘Dateiname’ ohne Erweiterung angegeben, so wird ‘.ly’ als
Standarderweiterung für LilyPond-Dateien benutzt. Um Daten von
stdin
einzulesen, benutzen Sie einfach einen Bindestrich (-
)
als Dateiname.
Wenn Lilypond die Datei ‘Dateiname.ly’ verarbeitet, werden daraus
die Dateien ‘Dateiname.ps’ und ‘Dateiname.pdf’ erzeugt.
Es können an lilypond
auch mehrere ‘.ly’ Dateien übergeben
werden, die dann einzeln und voneinander unabhängig abgearbeitet
werden.1
Falls ‘Dateiname.ly’ mehr als eine \book
-Umgebung enthält,
werden die weiteren Stücke in durchnummerierte Dateien der Form
‘Dateiname-1.pdf’ ausgegeben. Zusätzlich wird der Wert der
Variable output-suffix
zwischen den ursprünglichen Dateinamen
und der Zahl eingefügt. Eine Lilypond-Datei ‘Dateiname.ly’ mit dem Inhalt
#(define output-suffix "Geige") \score { … } #(define output-suffix "Cello") \score { … }
erzeugt daher die Dateien Dateiname‘-Geige.pdf’ und Dateiname‘-Cello-1.pdf’.
[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < lilypond aufrufen ] | [ Nach oben : lilypond aufrufen ] | [ Optionen auf der Kommandozeile für lilypond > ] |
Häufige Kommandozeilenbefehle
Wenn Ihre Kommandozeile normale Weiterleitungen unterstützt, können Sie es nützlich finden, mit folgenden Befehlen die Ausgabe der Kommandozeile in eine Datei zu leiten:
-
lilypond file.ly 1>stdout.log
um normale Ausgabe zu erhalten -
lilypond file.ly 2>stderr.log
um Fehlermeldungen zu erhalten -
lilypond file.ly &>all.log
um alle Meldungen zu erhalten
Wenden Sie sich an die Dokumentation für Ihre Kommandozeile, um zu sehen, ob derartige Optionen unterstützt werden oder die Syntax unterschiedlich ist. Beachten Sie, dass es sich hier um reine Verwaltungsprogramme handelt, die nichts mit LilyPond zu tun haben.
[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < ] | [ Nach oben : Benutzung auf der Kommandozeile ] | [ Umgebungsvariablen > ] |
Optionen auf der Kommandozeile für lilypond
Die folgenden Kommandozeilenoptionen werden von lilypond
unterstützt:
-
-d,--define-default=Variable=Wert
Damit wird die interne Programmoption Variable auf den Scheme-Wert Wert gesetzt. Wird kein Wert angegeben, so wird #t benutzt. Um eine Option auszuschalten, kann der Präfix
no-
dem Namen Variable der Variable vorangestellt werden. So ist etwa-dno-point-and-click
dasselbe wie
-dpoint-and-click=#f
Folgende Optionen werden unterstützt:
-
help
Die Ausführung von
lilypond -dhelp
zeigt alle verfügbaren ‘-d’-Optionen.-
paper-size
Setzt das Standard-Papierformat,
-dpaper-size=\"letter\"
Die Zeichenkette, die das Format angibt, muss in Anführungszeichen mit Backslash (
\"
) stehen.-
safe
Vertraut der ‘.ly’ Datei nicht.
Wenn LilyPond über einen Webserver verfügbar gemacht wird, MUSS unbedingt eine die Optionen ‘--safe’ oder ‘--jail’ angegeben werden. Die ‘--safe’ Option verhindert, dass in der ‘.ly’-Datei angegebener Scheme-Code das System gefährden kann, wie etwa in folgendem Beispiel:
#(system "rm -rf /") { c4^$(ly:gulp-file "/etc/passwd") }
Mit der ‘-dsafe’ Option werden alle Scheme-Ausdrücke einem speziellen sicheren Modus ausgewertet. Dieser Modus ist vom GUILE ‘safe-r5rs’ Modul abgeleitet und fügt noch zahlreiche weitere erlaubte Funktionen der LilyPond Programm-Schnittstelle hinzu. Diese Funktionen sind in ‘scm/safe-lily.scm’ angegeben.
Zusätzliche verbietet der sichere Modus auch
\include
Befehle.Im sicheren Modus ist es nicht möglich, LilyPond-Variablen nach Scheme zu exportieren.
‘-dsafe’ erkennt jedoch KEINE Überbeanspruchung der verfügbaren Ressourcen. In diesem Modus ist es also trotzdem möglich, dass LilyPond in einer Endlosschleife hängt, z.B. wenn zyklische Datenstrukturen an das Backend übergeben werden. Wenn LilyPond also auf einem öffentlich zugänglichen Webserver verfügbar gemacht wird, sollte der Prozess sowohl in der CPU- als auch in der Speichernutzung limitiert werden.
Der sichere Modus verhindert auch, dass zahlreiche nützliche Musikfragmente von LilyPond verarbeitet werden. Die ‘--jail’-Option ist eine sicherere Alternative, benötigt allerdings auch mehr Aufwand zur Einrichtung.
-
backend
Gibt an, welches Ausgabeformat das LilyPond Backend benutzt. Mögliche Werte für diese Option sind:
-
ps
PostScript-Ausgabeformat.
Postscript-Dateien enthalten auch TTF-, Type1- und OTF-Schriften. Allerdings wird die gesamte Schriftart eingefügt und nicht nur die benötigten Zeichen. Vor allem wenn nicht-westliche Zeichensätze benutzt werden, kann dies zu sehr großen Dateien führen.
-
eps
Erzeugt ‚encapsulated PostScript‘ (EPS). Jede Seite (oder jedes System) wird als eigene ‘EPS’-Datei ausgegeben, inklusive Schriftarten. Außerdem wird eine Datei mit allen Seiten (bzw. Systemen) und Schriftarten erzeugt.
Dies ist die Standardeinstellung von
lilypond-book
.-
svg
-
SVG-Ausgabe (Scalable Vector Graphics).
Hiermit wird eine einzelne SVG-Datei ohne eingebundene Schriften für jede Seite der Partitur erstellt. Es wird empfohlen, Century Schoolbook-Schriftarten zu installieren, die auch in der LilyPond-Installation enthalten sind, um optimales Rendern zu erhalten. Unter UNIX können diese Schriftarten einfach aus dem LilyPond-Verzeichnis (normalerweise ‘/usr/share/lilypond/VERSION/fonts/otf/’) nach ‘~/.fonts’ kopiert werden. Die SVG-Ausgabe sollte mit allen SVG-Editoren oder Betrachtungsprogrammen kompatibel sein.
-
scm
gibt die rohen Scheme-basierenden Zeichenbefehle aus („Scheme-dump“), wie sie intern von LilyPond benutzt werden.
-
null
Keine Partitur wird ausgegeben, hat gleichen Effekt wie ‘-dno-print-pages’.
Beispiel:
lilypond -dbackend=svg Dateiname.ly
-
-
preview
Unterstützt von allen Backendes:
pdf
,png
,ps
,eps
undsvg
aber nichtscm
und erzeugt eine Ausgabedatei, die nur die Titelzeilen und das erste System enthält. Wenn\bookpart
-Umgebungen benutzt werden, erscheinen die Titel und ersten Systeme jedes\bookpart
-Abschnitts in der Datei.Zusätzlich wird eine Datei in der Form
meineDatei.preview.Endung
erstellt, um das zu vermeiden, können die zusätzlichen Optionen ‘-dprint-pages’ oder ‘-dno-print-pages’ je nach gewünschtem Ergebnis gewählt werden.-
gui
Stiller Durchlauf, alle Ausgabe wird in eine Log-Datei umgeleitet.
Bemerkung für Windows-Benutzer: Standardmäßig schreibt
lilypond.exe
alle Fortschrittinformation in die Kommandozeile, währendlilypond-windows.exe
keine Fortschrittinformation angibt und sofort die Eingabeaufforderung anzeigt. Die Option ‘-dgui’ kann in diesem Fall eingesetzt werden, um die Ausgabe in eine Log-Datei umzuleiten.-
print-pages
Erzeugt vollständige Seiten (Standardeinstellung). ‘-dno-print-pages’ ist in Verbindung mit ‘-dpreview’ nützlich.
-
-
-e,--evaluate=expr
Wertet den Scheme-Ausdruck expr aus, bevor die ‘.ly’ Dateien gelesen und interpretiert werden. Die
-e
Option kann auch mehrfach angegeben werden, die Ausdrücke werden nacheinander ausgewertet.Da der Ausdruck im
guile-user
Modul ausgewertet wird, ist bei der Definitionen innerhalb von expr folgendes Vorgehen nötig. An der Kommandozeile wird z.B.a
imguile-user
Modul definiert:lilypond -e '(define-public a 42)'
Am Beginn der ‘.ly’-Datei muss dann das
guile-user
Modul noch geladen werden, bevor die Definition von a verfügbar ist:#(use-modules (guile-user))
Achtung: Windows-Benutzer müssen doppelte anstelle der einfachen Anführungsstriche einsetzen.
-
-f,--format=Format
Bestimmt das Ausgabeformat. Mögliche Werte von Format sind
svg
,ps
,pdf
undpng
.Beispiel:
lilypond -fpng Dateiname.ly
-
-h,--help
Zeigt eine Zusammenfassung der Programmbenutzung und der Optionen.
-
-H,--header=FELD
Gibt den Inhalt eines Feldes aus dem
\header
-Block in die Datei ‘Dateiname.FELD’ aus.-
-i,--init=Initialisierungsdatei
Benutzt Initialisierungsdatei zur gesamten Programminitialisierung. Der Standardwert ist ‘init.ly’.
-
-I, --include=Verzeichnis
Fügt Verzeichnis zur Liste der Suchpfade hinzu.
Mehrere -I-Optionen können angegeben werden. Die Suche beginnt mit dem ersten definierten Verzeichnis und setzt in den weiteren Verzeichnissen fort, wenn die gesuchte Datei nicht in dem Verzeichnis gefunden wird.
-
-j,--jail=Benutzer,Gruppe,Jail-Verzeichnis,Arbeitsverzeichnis
Führt
lilypond
in einem chroot-Jail aus.Die ‘--jail’ Option ist eine flexiblere Alternative zu ‘--safe’, wenn LilyPond über das Internet verfügbar gemacht wird oder LilyPond-Quelldateien von Dritten automatisch verarbeitet werden.
Sie funktioniert dergestalt, dass das Wurzelverzeichnis von
lilypond
auf Jail-Verzeichnis gesetzt wird, bevor die tatsächliche Kompilierung der ‘.ly’-Datei beginnt. Der Benutzer und die Gruppe werden auf die angegebenen Werte gesetzt und das aktuelle Arbeitsverzeichnis wird ebenfalls auf den angegebenen Wert Arbeitsverzeichnis gesetzt. Diese Einstellungen garantieren (zumindest in der Theorie), dass es nicht möglich ist, aus dem Jail auszubrechen. Damit ‘--jail’ funktioniert, musslilypond
allerdings als root ausgeführt werden, was normalerweise auf sichere Art mit dem Kommandosudo
erreicht werden kann.Das Jail-Verzeichnis zu erstellen ist etwas heikel, da LilyPond alle zur Ausführung nötigen Bibliotheken und Dateien innerhalb des Jail-Verzeichnisses finden muss. Ein typisches Setup besteht aus folgenden Punkten:
- Erstellung eines getrennten Dateisystems
Ein eigenes Dateisystem muss für LilyPond erstellt werden, sodass es mit sicheren Einstellungen wie
noexec
,nodev
undnosuid
eingebunden werden kann. Damit ist es unmöglich, Programme von diesem Dateisystem auszuführen oder direkt auf eine Hardware-Schnittstelle zuzugreifen. Wenn Sie keine eigene Partition erstellen möchten, können Sie auch eine Datei der entsprechenden Größe erstellen und sie als ‚loop‘-Gerät einbinden. Ein getrenntes Dateisystem garantiert auch, dass LilyPond nicht mehr Festplattenspeicher benutzt als erlaubt.- Erstellung eines eigenen Benutzerkontos
Es sollte ein eigener Benutzer und eine eigene Gruppe (z. B.
lily
/lily
) mit geringen Rechten für die Ausführung von LilyPond innerhalb des Jails benutzt werden. Nur ein einziges Verzeichnis des Jails sollte für den Benutzer schreibbar sein und als Arbeitsverzeichnis anlilypond
übergeben werden.- Einrichtung des Jails
LilyPond muss zahlreiche Dateien für die Ausführung einlesen. All diese Dateien müssen in das Jail-Verzeichnis kopiert werden (mit denselben Pfaden wie im tatsächlichen Wurzel-Dateisystem). Die gesamte LilyPond-Installation (typischerweise ‘/usr/share/lilypond’) sollte kopiert werden.
Falls Probleme auftreten, ist es am einfachsten, Lilypond mittels
strace
zu starten, wodurch Sie relativ leicht feststellen können, welche Dateien im Jail noch fehlen.- Ausführung von LilyPond
In einem mit
noexec
eingebundenen Jail ist es nicht möglich, externe Programme auszuführen. Daher muss LilyPond auf eine Art gestartet werden, die keine weitere Ausführung von Programmen benötigt. Wie bereits erwähnt muss LilyPond mit Administrator-Rechten gestartet werden (die es allerdings sofort wieder abgibt), beispielsweise mittelssudo
. Außerdem ist es eine gute Idee, die LilyPond zur Verfügung stehende CPU-Zeit zu limitieren (z. B. mitulimit -t
) und – falls das Betriebssystem dies unterstützt – auch den zur Verfügung stehenden Hauptspeicher.
-
-l,--loglevel=Logstufe
Passt die Ausführlichkeit der Ausgabe auf der Kommandozeile entsprechend Logstufe an. Mögliche Werte sind:
-
NONE
Keine Ausgabe, nicht einmal Fehlermeldungen.
-
ERROR
Nur Fehlermeldungen, keine Warnungen oder Fortschrittsmeldungen.
-
WARN
Warnungen und Fehlermeldungen, keine Fortschrittsmeldungen.
-
BASIC_PROGRESS
Grundlegende Fortschrittsmeldungen (Erfolg), Warnungen und Fehler.
-
PROGRESS
Alle Fortschrittsmeldungen, Warnungen und Fehler.
-
INFO (Standard)
Fortschrittmeldungen, Warnungen, Fehlermeldungen und weiter Information über die Ausführung.
-
DEBUG
Alle möglichen Meldungen, die auch mit der Fehlersuche (Debug) zu tun haben können.
-
-
-o,--output=DATEI oder ORDNER
Schreibt das Ergebnis der Verarbeitung mit LilyPond in die Ausgabedatei DATEI. Wenn ein Verzeichnis mit dem Namen existiert, werden die Ausgabedateien in dieses Verzeichnis gespeichert, wobei der Dateiname der Eingabedatei benutzt wird. Die entsprechende Dateinamenserweiterung wird angehängt (z.B.
.pdf
für pdf).-
--ps
Erzeugt PostScript.
-
--png
Erzeugt eine Grafik-Datei im PNG-Format von jeder Seite. Diese Option impliziert auch
--ps
. Die Auflösung in DPI der Grafik kann festgelegt werden durch-dresolution=110
-
--pdf
Erzeugt PDF-Dateien. Dies impliziert
--ps
.-
-v,--version
Gibt die Versionsnummer aus.
-
-V,--verbose
Gibt ausführliche informative Meldungen aus: Zeigt die vollen Dateipfade aller gelesenen Dateien sowie Informationen über die Laufzeit.
-
-w,--warranty
Zeigt die Garantiebedingungen an, unter denen GNU LilyPond steht. (Es besteht KEINERLEI GARANTIE!)
Umgebungsvariablen
lilypond
erkennt und benützt die folgenden Umgebungsvariablen:
-
LILYPOND_DATADIR
Diese Variable gibt das Verzeichnis an, wo Lilypond seine eigenen Dateien, Meldungen und Übersetzungen finden kann. Dieses Verzeichnis sollte Unterverzeichnisse ‘ly/’, ‘ps/’, ‘tex/’, etc. beinhalten.
-
LANG
Gibt die Sprache an, in der Warnungen und Fehlermeldungen ausgegeben werden.
-
LILYPOND_LOGLEVEL
Die standardmäßige Logstufe. Wenn LilyPond ohne eine explizite Logstufe aufterufen wird (d. h. die Kommandozeilenoption ‘--loglevel’ nicht eingesetzt wird), wird dieser Wert benutzt.
-
LILYPOND_GC_YIELD
Eine Variable (von 1 bis 100), die die Speicherverwaltung regelt. Bei niedrigeren Werten wird mehr Prozessor-Zeit, dafür weniger Hauptspeicher benötigt. Voreinstellung ist ein Wert von
70
.
[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < Umgebungsvariablen ] | [ Nach oben : Benutzung auf der Kommandozeile ] | [ Fehlermeldungen > ] |
LilyPond in chroot-Kerker
Einen Server einzurichten, der LilyPond in einem chroot-Kerker bedient, ist
recht kompliziert. Die einzelnen Schritten finden sich unten aufgeliestet.
Beispiele sind für Ubuntu Linux und erfordern evtl. die Benutzung von
sudo
an den entsprechenden Stellen.
- Installieren Sie die nötigen Pakete: LilyPond, GhostScript und ImageMagick.
- Erstellen Sie einen neuen Benutzer mit dem Namen
lily
:adduser lily
Hierdurch wird auch eine Gruppe
lily
und ein Heimat-Ordner/home/lily
für den neuen Benutzer erstellt. - Im Heimat-Ordner des Benutzers
lily
erstellen Sie eine Datei, die als eigenes Dateisystem eingesetzt wird:dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000
In diesem Beispiel wird eine 200-MB-Datei als Kerker-Dateisystem erstellt.
- Erstellen Sie ein loop device, erstellen Sie ein Dateisystem und
mounten Sie es, dann erstellen Sie dort einen Ordner, in dem der Benutzer
lily
Schreibrechte hat:mkdir /mnt/lilyloop losetup /dev/loop0 /home/lily/loopfile mkfs -t ext3 /dev/loop0 200000 mount -t ext3 /dev/loop0 /mnt/lilyloop mkdir /mnt/lilyloop/lilyhome chown lily /mnt/lilyloop/lilyhome
- In der Konfiguration des Servers ist der Kerker (JAIL)
/mnt/lilyloop
und das Verzeichnis (DIR)/lilyhome
. - Erstellen Sie einen großen Verzeichnisbaum in dem Kerker, indem Sie die
notwendigen Dateien dorthin kopiert, wie das Beispielskript unten zeigt.
Sie könne
sed
benutzen, um die notwendigen Kopierbefehle für ein bestimmtes Programm zu erstellen:for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done
Beispiel-Skript für 32-bit Ubuntu 8.04
#!/bin/sh ## defaults set here username=lily home=/home loopdevice=/dev/loop0 jaildir=/mnt/lilyloop # the prefix (without the leading slash!) lilyprefix=usr/local # the directory where lilypond is installed on the system lilydir=/$lilyprefix/lilypond/ userhome=$home/$username loopfile=$userhome/loopfile adduser $username dd if=/dev/zero of=$loopfile bs=1k count=200000 mkdir $jaildir losetup $loopdevice $loopfile mkfs -t ext3 $loopdevice 200000 mount -t ext3 $loopdevice $jaildir mkdir $jaildir/lilyhome chown $username $jaildir/lilyhome cd $jaildir mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp chmod a+w tmp cp -r -L $lilydir $lilyprefix cp -L /bin/sh /bin/rm bin cp -L /usr/bin/convert /usr/bin/gs usr/bin cp -L /usr/share/fonts/truetype usr/share/fonts # Now the library copying magic for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ | sed '/.*=>.*/d'; done | sh -s # The shared files for ghostscript... cp -L -r /usr/share/ghostscript usr/share # The shared files for ImageMagick cp -L -r /usr/lib/ImageMagick* usr/lib ### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, ### you should be able to run: ### Note that /$lilyprefix/bin/lilypond is a script, which sets the ### LD_LIBRARY_PATH - this is crucial /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly
Fußnoten
[1] Der Zustand von GUILE wird allerdings nicht nach jeder Datei zurückgesetzt, sodass Achtung geboten ist, wenn in einer Datei globale Änderungen von Scheme aus durchgeführt werden.
[ << lilypond starten ] | [Anfang][Inhalt][Index][ ? ] | [ Dateien mit convert-ly aktualisieren >> ] | ||
[ < Umgebungsvariablen ] | [ Nach oben : Benutzung auf der Kommandozeile ] | [ Fehlermeldungen > ] |
Andere Sprachen: English, español, français, magyar, italiano, 日本語.
About automatic language selection.