[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 通常の使用方法 ] | [ 上へ : lilypond を実行する ] | [ LilyPond を呼び出す > ] |
1.2 コマンド ラインの使用方法
この節にはコマンド ラインで LilyPond を使用するための追加情報が含まれます。これにはプログラムに追加オプションを渡す必要があるかもしれません。さらに、いくつかの特別なプログラム (midi2ly
など) はコマンド ラインからしか利用できません。
ここで ‘コマンド ライン’ とは、OS の中にあるコマンド ラインを意味します。Windows ユーザは ‘DOS シェル’ や ‘コマンド シェル’ ‘コマンド プロンプト’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは ‘ターミナル’ や ‘コンソール’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは追加のセットアップが必要かもしれません。 MacOS X を参照してください。
OS のコマンド ラインの使用方法についての説明はこのマニュアルが扱う範囲ではありません。コマンド ラインに馴染みがない場合は、その内容を扱っている他のドキュメントをあたってください。
lilypond を呼び出す | ||
LilyPond の基本的なコマンド ライン オプション | ||
LilyPond の高度なコマンド ライン オプション | ||
環境変数 | ||
再配置 | ||
chroot jail 環境で LilyPond を実行する |
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < コマンド ラインの使用方法 ] | [ 上へ : コマンド ラインの使用方法 ] | [ > ] |
lilypond
を呼び出す
lilypond
実行可能形式ファイルはコマンド ラインから以下のように呼び出されます。
lilypond [option]… file…
拡張子を持たないファイル名で呼び出された場合、‘.ly’ が最初に試されます。stdin から入力を読み込む場合には、file に対してダッシュ (-
) を使用します。
‘filename.ly’ が処理されると、lilypond は出力として ‘filename.pdf’ を作り出します。いくつかのファイルを指定することもできます。その場合、それらのファイルは個々に処理されます。1
‘filename.ly’ が複数の \book
ブロックを含んでいる場合、残りの score は
‘filename-1.pdf’ から始まる番号付きのファイルに出力されます。さらに、output-suffix
がベース名と番号の間に挿入されます。例えば、 ‘filename.ly’ が以下の内容を含んでいる場合、
#(define output-suffix "violin") \score { … } #(define output-suffix "cello") \score { … }
LilyPond は ‘filename-violin.pdf’ と ‘filename-cello-1.pdf’ を出力します。
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < LilyPond を呼び出す ] | [ 上へ : LilyPond を呼び出す ] | [ LilyPond の基本的なコマンド ライン オプション > ] |
標準シェルで LilyPond を使う
LilyPond はコマンドラインアプリケーションなので、LilyPond を呼び出すために ‘シェル’ の機能をうまく利用することができます。
例えば,
lilypond *.ly
は、カレントディレクトリのすべての LilyPond ファイルを処理します。
コンソール出力をリダイレクトする(例えばファイルへ)のも有用でしょう。
lilypond file.ly 1> stdout.txt lilypond file.ly 2> stderr.txt lilypond file.ly &> all.txt
上記コマンドはそれぞれ ‘普通の’ 出力、‘エラー’ のみ、‘すべて’ 、 をテキストファイルにリダイレクトします。あなたの使用しているシェル、コマンドプロンプト (Windows)、ターミナルやコンソール (MacOS X) がリダイレクトをサポートしているか、あるいは構文が異なるかどうかは、そのシェルのドキュメントを調べてください。
以下は、カレントディレクトリ以下のすべての入力ファイルを再帰的に探し、処理する例です。出力ファイルは元の入力ファイルのあるディレクトリではなく、コマンドを実行したディレクトリに置かれます。
find . -name '*.ly' -exec lilypond '{}' \;
これは MacOS X ユーザでも使えるでしょう。
Windows ユーザは
forfiles /s /M *.ly /c "cmd /c lilypond @file"
スタートメニューから
スタート > アクセサリ > コマンドプロンプト
とたどるか、検索ウィンドウで ‘コマンドプロンプト’ と入力して、
コマンド プロンプト
を起動し、これらのコマンドを入力します。
または、入力ファイルを含むすべてのサブフォルダを含む、最上位のフォルダを明示的に指定できる /p
オプションもあります;
forfiles /s /p C:\Documents\MyScores /M *.ly /c "cmd /c lilypond @file"
最上位フォルダ名がスペース文字を含む場合は、パス全体をダブルクオーテーションで囲む必要があります。;
forfiles /s /p "C:\Documents\My Scores" /M *.ly /c "cmd /c lilypond @file"
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < ] | [ 上へ : コマンド ラインの使用方法 ] | [ LilyPond の高度なコマンド ライン オプション > ] |
LilyPond の基本的なコマンド ライン オプション
以下のオプションがサポートされます。
-
-d
,--define-default=
var[=
val] LilyPond の高度なコマンド ライン オプション を参照してください。
-
-e
,--evaluate=
expr ‘.ly’ ファイルを解析する前に Scheme expr を評価します。複数の
-e
オプションが与えられた場合、それらは順番に評価されます。Scheme 表記は
guile-user
モジュールの中で評価されます。そのため、expr の中で(define-public a 42)
のような定義を使いたいのならば、コマンド ラインで以下を使用して、lilypond -e '(define-public a 42)'
‘.ly’ ファイルの先頭に以下を含めます.
#(use-modules (guile-user))
Note: Windows ユーザはシングル クォートではなく、ダブル クォートを使う必要があります。
-
-E
,--eps
EPS ファイルを生成します。
このオプションは LilyPond のコマンドラインオプションに
--ps
, と-dlilypond-book-output
, を指定するのと同じです。-
-f
,--format=
format (主な)出力ファイルのフォーマットを指定します。
format
の選択肢はps
,pdf
, またはpng
です。例:
lilypond -fpng foo.ly
svg
フォーマットやeps
フォーマットを出力するには-dbackend
オプションを用います。 LilyPond の高度なコマンド ライン オプション を参照してください。-
-h
,--help
使用方法の要約を表示します。
-
-H
,--header=
field ヘッダ フィールドをファイル ‘BASENAME.field’ に吐き出します。
例えば、 ‘foo.ly’ という入力ファイルが以下の内容を含んでいる場合、
\header { title = "bar" } \score { c1 }
コマンド
lilypond -H title foo.ly
を実行すると、文字列
bar
を含んだプレーンテキストファイル ‘foo.title’ が作られます。-
-i
,--init=
file init ファイルとして file をセットします (デフォルト: ‘init.ly’)。
-
-I
,--include=
directory directory を入力ファイルのサーチ パスに相対パスとして追加します。デフォルトではカレントディレクトリのみが検索されます。
複数の ‘-I’ オプションを与えることができます。検索はカレントディレクトリから開始され、入力ファイルが見つからない場合は、最初の ‘-I’ で指定されたディレクトリ、そして二番目の ‘-I’ で指定されたディレクトリ、というように検索します。
Note: チルド記号 (
~
) を ‘-I’ と共に使用すると、シェルによっては予期しない結果をもたらす場合があります。Windows ユーザは、ディレクトリのパスの最後にスラッシュを含める必要があります。
-
-j
,--jail=
user,
group,
jail,
dir [このオプションは OS が
chroot
機能をサポートする場合のみ有効です。特に、 Windows はサポートしていません。]lilypond
を chroot jail 環境で実行します。(訳者: chroot jail 環境とはセキュリティのためにカレント プロセスに対してルート ディレクトリの位置を変更すること。)‘--jail’ オプションは、Web サーバ経由で LilyPond 譜刻を提供する時や LilyPond が外部ソースから送られてきたコマンドを実行する時に、
--dsafe
よりも自由度の高い代替手段を提供します。 (LilyPond の高度なコマンド ライン オプション を参照してください。)--jail
オプションはコンパイル プロセスの開始直前にlilypond
のルート ディレクトリを jail に変更します。それから、ユーザとグループを user と group に変更して、カレント ディレクトリを dir に変更します。これにより、jail (牢獄) から抜け出せないことを (少なくとも理論上は) 保証します。--jail
を指定したlilypond
の実行は root (ユーザ名) として行う必要があります。通常、これはsudo
を用いた安全な方法で行います。jail のセットアップは比較的複雑な問題です。LilyPond がソースをコンパイルするのに必要とされるものすべてを jail の内部 で見つけられるということを保証しなければならないからです。一般的なセットアップには以下の項目が含まれます:
- 専用のファイルシステムをセットアップする
noexec
,nodev
,nosuid
などのセーフ オプションでマウントするための専用ファイルシステムを作成すべきです。こうすることで、LilyPond から実行可能形式ファイルを実行したり、デバイスに直接書き込むことは不可能になります。専用のパーティションを作成することを望まないのなら、適当なサイズのファイルを作成し、それを使用してループ デバイス (ループバック デバイス) をマウントしてください。専用ファイルシステムはさらに、LilyPond が許可されたディスク容量以上には書き込めないということを保証します。- 専用のユーザをセットアップする
jail 内部で LilyPond を実行する際、低い権限を持つ専用のユーザとグループ (仮に
lily
/lily
とします) で行うべきです。このユーザが書き込み可能なディレクトリが 1 つだけ存在すべきであり、それを dir に渡します。- jail の準備をする
LilyPond は実行中にいくつかのファイルを読み込む必要があります。それらのファイルをすべて jail にコピーしておきます。それらのファイルが本当のルート ファイル システムで存在しているパスと同じパスにコピーします。LilyPond インストールの内容すべて (例えば、‘/usr/share/lilypond’) をコピーすべきです。
問題が発生した場合、その原因を突き止める最も簡単な方法は
strace
を使って LilyPond を実行することです。これによりどのファイルが見当たらないのかがわかります。- LilyPond を実行する
noexec
でマウントされた jail の中では、外部プログラムを実行することは一切できません。そのため、外部プログラムを必要としないバックエンドで LilyPond を実行しなければなりません。すでに述べたように、jail モードでの LilyPond の実行はスーパーユーザ権限で行われなければならず (もちろん、その権限はすぐに外されます)、たぶんsudo
を使います。LilyPond が使用可能な CPU 時間を数秒に制限する (例えば、ulimit -t
を使って) というのも良い方法です。さらに、OS がサポートしているのなら、割り当て可能なメモリ容量を制限するというのも良い方法です。chroot jail 環境で LilyPond を実行する も参照してください。
-
-l
,--loglevel=
level コンソール出力の饒舌さを level にセットします。取り得る値は以下の通りです:
-
NONE
何も出力しません。エラー メッセージさえも出力しません。
-
ERROR
エラー メッセージだけを出力します。警告や進捗メッセージは出力しません。
-
WARN
警告とエラー メッセージを出力し、進捗メッセージは出力しません。
-
BASIC_PROGRESS
基本的な進捗メッセージ (成功メッセージ)、警告、それにエラー メッセージを出力します。
-
PROGRESS
すべての進捗メッセージ、警告とエラー メッセージを出力します。
-
INFO
進捗メッセージ、警告、エラーそれに追加の実行情報を出力します。 これがデフォルトです。
-
DEBUG
饒舌なデバッグ出力を含む、出力可能なメッセージをすべて出力します。
-
-
-o
,--output=
file -
-o
,--output=
folder デフォルトの出力ファイルとして file をセットします。セットした名前のフォルダが存在する場合、 folder に入力ファイルから取ったファイル名で出力されます。どちらの場合にも適切な接尾辞が追加されます (つまり、PDF ならば拡張子 ‘.pdf’ が追加されます)。
-
-O
,--pspdfopt=
key -
key へ PS/PDF 最適化を設定します。選択肢は:
-
size
非常に小さい PS/EPS/PDF ドキュメントを生成します。 これがデフォルトです。
LilyPond の Scheme コマンドラインオプション
-dmusic-font-encodings='#f'
と-dgs-never-embed-fonts='#f'
を指定した場合と同じです。-
TeX
pdfTeX, LuaTeX, XeTeX ドキュメントにインクルードされるのに最適化されたファイルを生成します。
LilyPond の Scheme コマンドラインオプション
-dmusic-font-encodings='#t'
と-dgs-never-embed-fonts='#f'
を指定した場合と同じです。-
TeX-GS
LilyPond によって生成された PDF を TeX ドキュメントに複数インクルードしたい場合は、このオプションを使い、TeX によって生成された PDF を Ghostscript で後処理してください。
LilyPond の Scheme コマンドラインオプション
-dmusic-font-encodings='#t'
と-dgs-never-embed-fonts='#t'
を指定した場合と同じです。
-
-
--ps
PostScript を生成します。このオプションは
-fps
と同じです。-
--png
各ページの図を PNG フォーマットで生成します。このオプションは
-fpng
と同じです。画像の解像度を N DPI に設定するには以下のようにします。
-dresolution=N
-
--pdf
PDF を生成します。これがデフォルトで、
-fpdf
と同じです。-
-s
,--silent
進行状況を表示せず、エラーメッセージのみ表示します。これは
-lERROR
と同じです。-
-v
,--version
バージョン情報を表示します。
-
-V
,--verbose
冗長表示モードにします: 読み込むすべてのファイルのフル パスを表示して、時間情報などを表示します。これは
-lDEBUG
と同じです。-
-w
,--warranty
GNU LilyPond の保証責任を表示します。(GNU LilyPond には保証責任はありません!)
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < LilyPond の基本的なコマンド ライン オプション ] | [ 上へ : コマンド ラインの使用方法 ] | [ 環境変数 > ] |
LilyPond の高度なコマンド ライン オプション
オプション ‘-d’ は LilyPond の Scheme 関数 ly:set-option
のコマンドラインインタフェースです。つまり、ここで示しているすべてのオプションは ‘.ly’ ファイルの中で設定することが可能です。
-
-d
,--define-default=
option-name[=
value] -
-d
,--define-default=no-
option-name 内部 Scheme シンボル option-name に value を設定するのと同じです。例えば、コマンドラインオプション
-dbackend=svg
は LilyPond 入力ファイルに
#(ly:set-option 'backend 'svg)
を書くことと同じです。
value が指定されない場合、
#t
(真偽値以外を取る場合は、おかしな結果になるかもしれません)が使われます。option-name に接頭辞no-
を付けると、そのオプションは ‘off’ つまり#f
が使われます。例えば、-dpoint-and-click='#f'
は
-dno-point-and-click
と同じです。
[‘#’ 文字は多くのシェルでコメントの開始を意味することに注意してください。そのため、それを含む式は常にクォートすることをお勧めします。]
次の表に、サポートされているすべてのオプション名と値を示します。Scheme コード内では、オプション値は関数 ly:get-option
で読み取ることができます。
-
anti-alias-factor
num (与えられた因数 num を用いて) 高解像度で描画して、その結果をスケールダウンすることにより、
PNG
画像の輪郭がギザギザになることを防ぎます。デフォルト:1.0
。-
aux-files
bool bool が
#t
ならば、eps
バックエンドオプションを使っているときに ‘.tex’, ‘.texi’, と ‘.count’ ファイルを生成します。デフォルト:#t
。-
backend
symbol symbol を LilyPond 出力のバックエンドとして使用します。 選択肢は:
-
ps
こればデフォルトです。 Postscript ファイルは
TTF
,Type1
, それにOTF
フォントを埋め込みます。フォントのサブセットは作成されません。日本語のような ‘東洋’ の文字セットを用いるとファイルが非常に大きくなる可能性があることに注意してください。PDF 出力には
ps
バックエンドが使われます。出力された PS データは Ghostscript のps2pdf
で後処理され、デフォルトでフォントのサブセットが作成されます。-
eps
lilypond-book
コマンドのデフォルトです。これは、1 つのファイルにすべてのページとフォントを埋め込んだものと、ページ毎に分離しフォントを埋め込まない eps ファイルの、両方を吐き出します。-
svg
ページ毎の SVG (Scalable Vector Graphics) ファイルが全ページ分作られます。音楽グリフはベクタ画像に変換されますが、文字フォントは SVG ファイルには埋め込まれません。 そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーに関連するテキストフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントリスト’ や ‘フォントエイリアス’ を使用しないことをお勧めします。Web Open Font Format (WOFF) ファイルを使うときには、追加の
-dsvg-woff
スイッチが必要となります。
-
-
clip-systems
bool bool が
#t
なら、楽譜から断片を取り出します。これを使用するには、\layout
ブロックにclip-regions
関数が定義されている必要があります。 音楽の断片を抽出するを参照してください。 ‘-dno-print-pages’ と一緒に用いられた場合、断片は全く出力されません。デフォルト:#f
。-
crop
bool bool が
#t
なら、すべての楽譜とヘッダをマージンなしの ‘単一ページ’ 出力に合わせます。デフォルト:#f
。-
datadir
データファイル パスの接頭辞です。読み取り専用で、設定しても効果がありません。
-
debug-skylines
bool bool が
#t
なら、スカイライン (訳注: 行ごとのオブジェクトの最高位置と最低位置を線で表示するもの) を表示します。デフォルト:#f
。-
delete-intermediate-files
bool bool が
#t
なら、コンパイルの途中で作成される使用しない中間ファイル ‘.ps’ を削除します。デフォルト:#t
。-
embed-source-code
bool bool が
#t
なら、出力される PDF ドキュメントに LilyPond ソースファイルを埋め込みます。デフォルト:#f
。-
eps-box-padding
num 出力される EPS の左端に num mm の余白を追加します。デフォルト:
#f
(余白追加しないことを意味します)。-
font-export-dir
string PostScript ファイルとしてフォントをエクスポートするディレクトリを string に指定します。デフォルト:
#f
(カレントディレクトリを意味します)。 これは、次に示すように、フォントを埋め込まずに PDF を作成し、後でフォントを Ghostscript で埋め込む場合に便利です。$ lilypond -dfont-export-dir=fontdir -dgs-never-embed-fonts foo.ly $ gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \ -sOutputFile=foo.embedded.pdf foo.pdf fontdir/*.font.ps
注:
font-ps-resdir
とは異なり、このメソッドは Ghostscript 9.26 以降で CID フォントを埋め込むことはできません。注:
font-ps-resdir
と同様に、 TrueType フォントを埋め込むと文字化けが発生するため、このオプションは TrueType フォントをスキップします。文字化けしないようにするには、gs-never-embed-fonts
を使用します。これは、TrueType フォントをその名前に関係なく埋め込みます。デフォルト:
#f
(エクスポートしないことを意味します)。-
font-ps-resdir
string (string として) ディレクトリを設定して、後でフォントを埋め込むために使用する PostScript リソース ディレクトリのサブセットをビルドします。これは、次に示すように、フォントを埋め込まずに PDF を作成し、後でフォントを Ghostscript で埋め込む場合に便利です。
$ lilypond -dfont-ps-resdir=resdir -dgs-never-embed-fonts foo.ly $ gs -q -dBATCH -dNOPAUSE -sDEVICE=pdfwrite \ -I resdir -I resdir/Font \ -sOutputFile=foo.embedded.pdf foo.pdf
注: Ghostscript の
-I
オプションで指定した場合、特別な意味があるため、 ‘Resource’ という名前を含むディレクトリは指定しない方がよいでしょう。注:
font-export-dir
とは異なり、このメソッドは Ghostscript 9.26 以降で CID フォントを埋め込むことができます。注:
font-export-dir
と同様に、 TrueType フォントを埋め込むと文字化けが発生するため、このオプションは TrueType フォントをスキップします。文字化けしないようにするには、gs-never-embed-fonts
を使用します。これは、TrueType フォントをその名前に関係なく埋め込みます。デフォルト:
#f
(ビルドしないことを意味します)。-
gs-load-fonts
bool bool が
#t
なら、Ghostscript 経由でフォントを読み込みます。LilyPond 出力ファイルのフォントはすべて参照のみが含まれるようになり、 Ghostscript による後処理で実際のフォントに解決する必要があります。デフォルト:#f
。-
gs-load-lily-fonts
bool bool が
#t
なら、LilyPond のフォントを Ghostscript 経由で読み込みます。LilyPond 出力ファイルの音楽フォントはすべて参照のみが含まれるようになり、 Ghostscript による後処理で実際のフォントに解決する必要があります。他のすべてのフォントは通常通り出力されます。デフォルト:#f
。-
gs-never-embed-fonts
bool bool が
#t
なら、Ghostscript が TrueType フォントのみを埋め込むようになり、他のフォーマットのフォントは埋め込まれません。デフォルト:#f
。-
help
bool bool が
#t
なら、このヘルプを表示します。デフォルト:#f
。-
include-book-title-preview
bool bool が
#t
なら、プレビュー画像にブック タイトルを含めます。デフォルト:#t
。-
include-eps-fonts
bool bool が
#t
なら、システム毎の EPS ファイルにフォントを含めます。デフォルト:#t
。-
include-settings
string グローバル設定のファイルとして string をインクルードします。このファイルは楽譜の処理が開始する前にインクルードされます。デフォルト:
#f
(グローバル設定ファイル無しを意味します)。-
job-count
num num ジョブで、並列処理します。デフォルト:
#f
(並列処理無しを意味します)。-
log-file
string 出力をログファイル ‘string.log’ にリダイレクトします。デフォルト:
#f
(ログファイル無しを意味します)。-
max-markup-depth
num マークアップ ツリーの階層の最大値を num に設定します。それよりも深い階層を持つマークアップがある場合、そのマークアップは終了していないと見なされて、警告が表示され、null マークアップが返されます。デフォルト:
1024
。-
midi-extension
string MIDI 出力ファイルのデフォルトのファイル拡張子を ‘.string’ に設定します。デフォルト:
"midi"
。-
music-strings-to-paths
bool bool が
#t
なら、記譜フォントを用いるテキストをパスに変換します。デフォルト:#f
。-
paper-size
extra-quoted-string デフォルトの紙面サイズを extra-quoted-string に設定します。文字列をエスケープ記号付の 2 重引用符で囲む必要があることに注意してください。デフォルト:
"\"a4\""
。-
pixmap-format
symbol 画像出力のための GhostScript の出力フォーマットを symbol に設定します。デフォルト:
png16m
。-
point-and-click
bool bool が
#t
なら、PDF と SVG 出力に ‘ポイント&クリック’ リンクを付け加えます。ポイント&クリック を参照してください。デフォルト:#f
。-
preview
bool bool が
#t
なら、通常の出力に加えてプレビュー画像を作成します。デフォルト:#f
。このオプションはすべてのバックエンド (
pdf
,png
,ps
,eps
, それにsvg
) でサポートされますが、scm
ではサポートされません。入力ファイル名 file でバックエンド format を使った場合、出力ファイル名は ‘file.preview.
format’ で、タイトルと楽譜の最初の段を含みます。\book
ブロックや\bookpart
ブロックが使われている場合、\book
,\bookpart
, それに\score
のタイトルが出力に譜刻され、\paper
変数print-all-headers
が#t
にセットされている場合は各\score
ブロックの最初の段も譜刻されます。通常の出力を抑制するには、必要に応じて ‘-dprint-pages’ オプションまたは ‘-dno-print-pages’ オプションを使ってください。
-
print-pages
bool bool が
#t
なら、すべてのページを生成します。デフォルト:#t
。‘-dpreview’ や ‘-dcrop’ を使う場合は ‘-dno-print-pages’ を組み合わせると有用です。
-
protected-scheme-parsing
bool bool が
#t
なら、パーサでインライン Scheme のエラーが発生しても処理を続けます。#f
に設定されている場合、エラー終了して、スタック トレースを表示します。デフォルト:#t
。-
relative-includes
bool bool が
#t
なら、\include
コマンドを処理するとき、インクルードするファイルをカレント ファイルからの相対位置で検索します。#f
なら、ルート ファイルからからの相対位置で検索します。デフォルト:#f
。-
resolution
num 生成する
PNG
画像の解像度を num dpi に設定します。デフォルト:101
。-
safe
bool bool が
#t
なら、‘.ly’ 入力ファイルを信用しません。デフォルト:#f
。Web サーバ経由で LilyPond 譜刻が利用可能な場合、‘--dsafe’ オプションか ‘--jail’ オプションのどちらかを 指定する必要があります。‘--dsafe’ オプションはインライン Scheme コードが無茶をする – 例えば、以下のような – ことを防ぎます。
% 正しく書くのはあまりにも危険 #(s ystem "rm -rf /") % 破壊的ではないが悪意がある { c4^$(ly:gulp-file "/etc/passwd") }
‘-dsafe’ オプションはインライン Scheme 表記を特別なセーフ モジュールの中で評価します。これは GUILE の ‘safe-r5rs’ モジュールに由来しますが、‘scm/safe-lily.scm’ でリスト アップされている LilyPond API 関数のいくつかも追加されています。
さらに、セーフ モードでは
\include
は許可されず、TeX 文字列の中でバックスラッシュを使うこともできません。また、セーフ モードでは LilyPond 変数を Scheme にインポートすることもできません。‘-dsafe’ はリソースの過使用を検出 しません ので、このオプションを指定してもプログラムをハングさせられる可能性があります – 例えば、サイクリック (巡回) データ構造をバックエンドに埋め込むことによってです。 そのため、LilyPond を一般公開する Web サーバで使用する場合、プロセスのCPU とメモリ使用を制限すべきです。
セーフ モードは多くの有用な LilyPond 楽譜断片がコンパイルされることを妨げます。
‘--jail’ はさらに安全な代替手段ですが、セットアップにかかる手間も増えます。LilyPond の基本的なコマンド ライン オプション を参照してください。
-
separate-log-files
bool bool が
#t
なら、入力ファイル ‘file1.ly’, ‘file2.ly’, … に対するログをファイル ‘file1.log’, ‘file2.log’, … に出力します。デフォルト:#f
。-
show-available-fonts
bool bool が
#t
なら、使用可能なフォント名をリスト アップします。加えて LilyPond は fontconfig の設定そのものを表示します。デフォルト:#f
。-
strip-output-dir
bool bool が
#t
なら、出力ファイル名を構築する時に入力ファイルのディレクトリを使用しません。デフォルト:#f
。-
strokeadjust
bool bool が
#t
なら、PostScript に線幅補正 (stroke adjustment) を強制します。このオプションは普通、PDF ファイルが PostScript 出力から生成されている場合に意味があります (線幅補正は、低解像度のビットマップ デバイスに対して自動的に有効になります)。このオプションを指定しない場合、PDF ビューアは典型的な解像度のスクリーンにおいて、一貫性の無い符幹の幅を出力しようとします。このオプションは印刷結果の品質には目立って影響せず、PDF のファイル サイズを大きく増加させます。デフォルト:#f
。-
svg-woff
bool このオプションは
svg
バックエンドで Web Open Format (WOFF) フォントを使うために必要となります。bool が#t
なら、ページ毎の SVG ファイルが全ページ分作られます。LilyPond 自身の音楽グリフを除き、フォントは埋め込まれません。そのため、テキストや歌詞の最適な描画を得るためには、SVG ビュアーにフォントが必要となります。SVG ビュアーが対応していないことがあるので、‘フォントエイリアス’ や ‘フォントリスト’ を使用しないことをお勧めします。デフォルト:#f
。-
verbose
饒舌レベル。これは読み込み専用のオプションで、設定しても効果はありません。
-
warning-as-error
bool bool が
#t
なら、すべての警告と ‘プログラミング エラー’ をエラーに変更します。デフォルト:#f
。
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < LilyPond の高度なコマンド ライン オプション ] | [ 上へ : コマンド ラインの使用方法 ] | [ 再配置 > ] |
環境変数
lilypond
は以下の環境変数を認識します:
-
LILYPOND_DATADIR
これはデフォルトで参照するロケール メッセージとデータ ファイルがあるディレクトリを指定し、コンパイル時に定義されるか、実行時に動的に計算される場所を上書きします (再配置 を参照してください) 。このディレクトリは ‘ly’, ‘ps’, ‘tex’ などのサブディレクトリを保持しているべきです。
-
LILYPOND_LOCALEDIR
ロケール固有のファイルが配置されているディレクトリを指定します。これは
LILYPOND_DATADIR
から派生した値を上書きします。-
LILYPOND_RELOCDIR
再配置ファイルが配置されているディレクトリを指定します。これは
lilypond
バイナリの場所から派生した値を上書きします。-
LANG
stdout
およびstderr
に送信される LilyPond データ、たとえば、進捗レポート、警告メッセージ、デバッグ出力などの言語を選択します。例:LANG=de
-
LILYPOND_LOGLEVEL
デフォルトのログレベル。明示的にログレベルが指定されずに LilyPond が呼び出された場合 (すなわち ‘--loglevel’ コマンド ライン オプションが指定されなかった場合)、この値が使用されます。
-
LILYPOND_GC_YIELD
メモリ管理を調節する変数 (単位はパーセント) です。大きな値は LilyPond に多くのメモリ使用を許し、小さな値だと CPU 使用時間が長くなります。デフォルト値は
70
です。 この変数を使ってメモリ使用量とパフォーマンスを調節することができます。これはメモリ管理の振る舞いを調整するパーセント値です。高い値にするとプログラムはより多くのメモリを使用し、低い値にするとより多くの CPU 時間を使用します。デフォルト値は70
です。
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 環境変数 ] | [ 上へ : コマンド ラインの使用方法 ] | [ 再配置ファイル > ] |
再配置
Unix の世界のほとんどのプログラムは、コンパイル前の構成時に決定されるデフォルト ディレクトリを使用します。 LilyPond も例外ではありません。たとえば、標準的なインストールでは、‘lilypond’ バイナリが ‘/usr/bin’ に配置され、LilyPond に固有のすべてのファイルが ‘/usr/share/lilypond/2.21.0/’ のサブディレクトリに配置されます (現在のバージョンが 2.21.0 であると仮定すると) 。
このアプローチは、手動コンパイルや標準のパッケージ マネージャーが付属するプラットフォームでは正常に機能しますが、そのようなマネージャーが一般的でないか、デフォルトで使用されないプラットフォームでは問題を引き起こす可能性があります。このようなプラットフォームの典型的な例は、ユーザーがアプリケーション バンドルをどこにでもインストールできると期待している Windows と MacOS です。
この問題の一般的な解決策は再配置サポートです。データファイルへのハードコーディングされたパスを使用する代わりに、必要なサポートファイルの場所が実行時に実行されたバイナリに対して相対的に計算されます。
再配置ファイル | ||
再配置アルゴリズム |
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 再配置 ] | [ 上へ : 再配置 ] | [ 再配置アルゴリズム > ] |
再配置ファイル
実行時の構成には、実際には別のメカニズムがあります。
LilyPond は、外部プログラムとライブラリ、特にシステムフォントを見つけるための ‘FontConfig’ 、
Scheme ファイルを処理するための ‘GUILE’ ライブラリ、
PS データを PDF ファイルに変換するための gs
プログラムにそれぞれ大きく依存しています。それらのすべては、関連するデータファイルを見つけるためにも構成する必要があります。これを行うために、lilypond
プログラムは外部ライブラリとプログラムを制御する環境変数を操作するために、
‘relocate’ というディレクトリ(存在する場合。下のこのディレクトリが検索される場所を参照してください)
内のすべてのファイルを解析します。このような再配置ファイルのフォーマットは単純です。各行には構文があります
command key=value
空の行は無視されます。
command ディレクティブは次のいずれかです。
-
set
環境変数 key を無条件に value にセットします。 これは以前に設定された値を上書きします。
-
set?
key がまだ定義されていない場合にのみ、環境変数 key を value にセットします。つまり、以前に設定された値を上書きしません。
-
setdir
value がディレクトリの場合、無条件に環境変数 key を value にセットします。それ以外の場合は、警告を発します。
-
setfile
value がファイルの場合、無条件に環境変数 key を value にセットします。それ以外の場合は、警告を発します。
-
prependdir
環境変数 key 内のディレクトリのリストにディレクトリ value を追加します。 key が存在しない場合は作成されます。
(先頭のドル記号でマークされた) 環境変数は value で許可され、ディレクティブが実行される前に展開されます。
以下は、GUB から取得した再配置ファイル エントリの 2 つの例です を参照してください) 。
set? FONTCONFIG_FILE=$INSTALLER_PREFIX/etc/fonts/fonts.conf prependdir GUILE_LOAD_PATH=$INSTALLER_PREFIX/share/guile/1.8
‘relocate’ ディレクトリ内のファイルの解析順序は任意であるため、再配置ファイルでは、複数の行で同じ環境変数を設定することを避ける必要があります。
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 再配置ファイル ] | [ 上へ : 再配置 ] | [ chroot jail 環境で LilyPond を実行する > ] |
再配置アルゴリズム
LilyPond は、次のアルゴリズムを使用してデータファイルを検索します。
-
現在実行されている
lilypond
バイナリが配置されているディレクトリを計算します。これをbindir
としましょう。 (内部) 環境変数INSTALLER_PREFIX
を ‘bindir/..’ (つまり、bindir
の親ディレクトリ) にセットします。 -
環境変数
LILYPOND_DATADIR
を確認します。セットされている場合は、その値を LilyPond のデータ ディレクトリdatadir
に使用します。それ以外の場合は、‘$INSTALLER_PREFIX/share/lilypond/version’ (version は現在の LilyPond バージョンです) または ‘$INSTALLER_PREFIX/share/lilypond/current’ を使用します。 -
環境変数
LILYPOND_LOCALEDIR
を確認します。セットされている場合は、その値を LilyPond のロケール データ ディレクトリlocaledir
に使用します。それ以外の場合は、‘$INSTALLER_PREFIX/share/locale’ を使用します。 -
環境変数
LILYPOND_RELOCDIR
を確認します。セットされている場合は、その値を LilyPond の再配置ファイルのディレクトリrelocdir
に使用します。それ以外の場合は、‘$INSTALLER_PREFIX/etc/relocate’ を使用します。 -
datadir
が存在しない場合は、代わりにコンパイル時の値を使用します。localedir
についても同様です (ただし、relocdir
に関しては無意味なので、同様ではありません) 。 -
relocdir
が存在する場合は、再配置ファイル の説明に従って、このディレクトリ内のすべてのファイルを処理します。
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 再配置アルゴリズム ] | [ 上へ : コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |
chroot jail 環境で LilyPond を実行する
LilyPond を chroot jail 環境で実行させるようサーバをセットアップすることは複雑な作業です。以下にステップをリスト アップします。各ステップの中にある例は Ubuntu GNU/Linux 用であり、sudo
の使用が必要となるかもしれません。
- 必要なパッケージをインストールします: LilyPond, Ghostscript, それに ImageMagick。
-
lily
という名前のユーザを作成します:adduser lily
このコマンドはユーザ
lily
のためにホーム フォルダ (/home/lily
) と新しいグループも作成します。 - ユーザ
lily
のホーム フォルダで、独立したファイルシステムとして使用するファイルを作成します:dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000
このコマンドは jail ファイルシステムとして使用する 200MB のファイルを作成します。
- ループ デバイスを作成し、ファイルシステムを作ってそれをマウントし、それからユーザ
lily
が書き込めるフォルダを作成します: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
- サーバのコンフィグレーションで、JAIL は
/mnt/lilyloop
となり、DIR は/lilyhome
となります。 - 以下に示すサンプル スクリプトのように必要なファイルをコピーして
jail の中に大きなディレクトリ ツリーを作成します。
sed
を使うことで必要な実行形式ファイルをコピーすることができます: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
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
[ << lilypond を実行する ] | [トップ][目次][インデックス] | [ convert-ly を使ってファイルを更新する >> ] |
[ < 再配置アルゴリズム ] | [ 上へ : コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |